微信企業付款到銀行卡


第一次做微信企業付款到銀行卡,特地記錄下來,因為這個功能自己用了2-3天,這中間的坑主要是再rsa加密那塊。自己記錄下來,供朋友參考。自己用的php開發

第一,首先你需要開通企業的微信認證公眾號平台,然后開通支付功能。這些我就不說了。自己開通。

第二,看文檔,

 

 

 

第三步,發送請求接口,發送后,騰訊會給你響應。特別要說明一點的是,騰訊這個功能真不便宜,我測試時一元錢,手續費扣了我一元。最少金額是一元。

在發送接口時有個公鑰我們首先要獲得,同時里面有個簽名算法,公鑰主要用於到時銀行賬號和收款人姓名加密,把這兩個搞定,其他的就好整了。

先說rsa公鑰。這個公鑰是我們要從微信端服務器獲得。獲得后保存本地服務器。然后在linux服務器上進行公鑰格式轉換  把PKCS#1 轉 PKCS#8:

接口地址是:https://fraud.mch.weixin.qq.com/risk/getpublickey ,請求時需要把證書帶上,證書是在微信支付平台上下載。

 

這誰需要攜帶的參數

   public function getPuyKey(){
        $this->params = [
        'mch_id'    => self::MCHID,//商戶ID
        'nonce_str' => md5(time()),
        'sign_type' => 'MD5'
        ];
        //將數據發送到接口地址
        return $this->send(self::PKURL);
    }

  //下面是在請求時要記得攜帶證書,微信支付平台上下載

  public function postData($url,$postfields){
        $ch = curl_init();
        $params[CURLOPT_URL] = $url;    //請求url地址
        $params[CURLOPT_HEADER] = false; //是否返回響應頭信息
        $params[CURLOPT_RETURNTRANSFER] = true; //是否將結果返回
        $params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向
        $params[CURLOPT_POST] = true;
        $params[CURLOPT_POSTFIELDS] = $postfields;
        $params[CURLOPT_SSL_VERIFYPEER] = false;
        $params[CURLOPT_SSL_VERIFYHOST] = false;
        //以下是證書相關代碼
        $params[CURLOPT_SSLCERTTYPE] = 'PEM';
        $params[CURLOPT_SSLCERT] = dirname(getcwd()).'/pay/cert/apiclient_cert.pem';
        $params[CURLOPT_SSLKEYTYPE] = 'PEM';
        $params[CURLOPT_SSLKEY] =dirname(getcwd()).'/pay/cert/apiclient_key.pem';

        curl_setopt_array($ch, $params); //傳入curl參數
        $content = curl_exec($ch); //執行
        curl_close($ch); //關閉連接
        return $content;
    }

  

 //成功返回后,會返回xml數據,轉換下,里面有pub_key 就是公鑰,然后進行轉換並保存

 

接口會返回PKCS#1格式的公鑰

openssl rsa -RSAPublicKey_in -in pcs1.pem -out  pcs8.pem 

證書請求后再對接口進行請求

先讀取你保存的公鑰

$pubkey=file_get_contents(dirname(getcwd()).'/pay/cert/newpubkey.pem');

//配置好參數
$data=array(
    'partner_trade_no'    => date('YmdHis').rand(1000,9999),   //訂單號
    'enc_bank_no'         => $test->publicEncrypt('xxxxx',$pubkey),//收款方銀行卡號RSA加密
    'enc_true_name'       => $test->publicEncrypt('xxxxx',$pubkey),//收款方姓名RSA加密
    'bank_code'           => '1003',//收款方開戶行
    'amount'              => $prices,//付款金額 默認是分,最少1元
);

 

$pay_info=$test->bankPay($data);


//重點是rsa加密,本人就是在這里被坑了1天,一直是簽名說是銀行卡或收款人姓名不正確。其實是rsa加密不正確。


 /**
     * 公鑰加密,銀行卡號和姓名需要RSA算法加密
     * @param string $data    需要加密的字符串
     * @return null|string    加密后的字符串
     */
    public function publicEncrypt($data = '',$pubkey='')
    {
        if (!is_string($data)) {
            return null;
        }
        // 進行加密
        $r = openssl_public_encrypt($data,$encrypt_data,$pubkey,OPENSSL_PKCS1_OAEP_PADDING);
        if($r){//加密成功,返回base64編碼的字符串
            return base64_encode(''.$encrypt_data);
        }else{
            return false;
        }
    }

  //其實如果流程熟悉了,其實也沒那么難,主要是沒做過,所以才會被不停的被坑,網上關於php企業微信支付這塊不是很多。記錄下來希望能幫到大家。



代碼放在了csdn上了。

 https://download.csdn.net/download/hanyudanei/10397844


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM