微信开发之企业付款到银行卡接口开发的示例代码

  

微信支付已上线企业付款至银行卡功能。商户可以将商户号余额付款至指定的收款银行账户。通过指定收款银行账户户名,卡号,以及收款银行信息即可实现付款。功能目前为灰度开放,已灰度新资金流直连普通商户及普通受理模式子商户,其他商户类型将在后续开放。

  

<强>一,微信商户号须开通此功能,

  

微信开发之企业付款到银行卡接口开发的示例代码

  

<强>二,应用环境TP5 + Mysql + Centos
  

  

<强>三、编写代码
  

  

3.1,模型层,Wechat.php

        & lt; & # 63; php   名称空间的应用程序\家庭\模型;   使用认为\缓存;      类微信扩展模型   {   私人appid美元;//公众号APPID   私人appsecret美元;//公众号appsecret   私人mchid美元;//商户号   私人美元关键;//支付密钥   私人sslcert美元;//证书保存的绝对路径   私人sslkey美元;//证书保存的绝对路径      公共函数__construct (appid, appsecret美元mchid美元,美元关键,sslcert美元,美元sslkey)   {   父:__construct ();   $ this→appid=$ appid;   $ this→appsecret=$ appsecret;   $ this→mchid=$ mchid;   $ this→键=$键;   $ this→sslcert=$ sslcert;   $ this→sslkey=$ sslkey;   }/*   *企业付款到银行卡接口   * @params字符串$ out_trade_no:商户订单号   * @params int美元数额:付款金额,单位分   * @params字符串$ enc_bank_no:收款方银行卡号   * @params字符串$ enc_true_name:收款方用户名   * @params字符串$ bank_name:收款方开户行,根据银行名称获取银行编号bank_code   * @params字符串$ desc:付款备注   *返回字符串$ payment_no:支付成功的订单号   */公共函数payForBank (out_trade_no美元,美元金额,enc_bank_no美元,美元enc_true_name, bank_name美元,美元desc=捌笠蹈犊畹揭锌ā?   {   $ data[‘量’]=$金额;   $ data [' bank_code ']=$ this→getBankCode ($ bank_code);   $ data [' desc ']=$ desc;   $ data [' enc_bank_no ']=$ this→publicEncrypt ($ enc_bank_no);   $ data [' enc_true_name ']=$ this→publicEncrypt ($ enc_true_name);   $ data [' mch_id ']=$ this→mchid;   $ data [' nonce_str ']=$ this→随机(12);   $ data [' partner_trade_no ']=$ out_trade_no;   符号=$美元→getParam(元数据);      美元dataXML=" & lt; xml>   & lt; amount>”。$ data[‘量’]。”& lt;/amount>   & lt; bank_code>”。$ data [' bank_code ']。”& lt;/bank_code>   & lt; desc>”。$ data [' desc ']。”& lt;/desc>   & lt; enc_bank_no>”。$ data [' enc_bank_no ']。”& lt;/enc_bank_no>   & lt; enc_true_name>”。$ data [' enc_true_name ']。”& lt;/enc_true_name>   & lt; mch_id>”。$ data [' mch_id ']。”& lt;/mch_id>   & lt; nonce_str>”。$ data [' nonce_str ']。”& lt;/nonce_str>   & lt; partner_trade_no>”。$ data [' partner_trade_no ']。”& lt;/partner_trade_no>   & lt; sign>“美元的迹象。”& lt;/sign>   & lt;/xml>”;      $ url=' https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank ';   ret=这→美元httpsPost (url, dataXML美元,真);   如果(ret美元[' return_code ']==晒Α?,$ ret [' result_code ']==晒Α?,$ ret [' err_code ']=='成功'){   返回$ ret [' payment_no '];   其他}{   $ this→errorLog('微信付款到银行卡失败,appid:”。这个→美元appid,随著美元;   返回错误;   }   }/*   *查询付款到银行卡状态   * @params字符串$ out_trade_no:商户订单号   *返回数组$ ret:查询状态   * */公共函数queryBank (out_trade_no美元)   {   $ data [' mch_id ']=$ this→mchid;   $ data [' nonce_str ']=$ this→随机(12);   $ data [' partner_trade_no ']=$ out_trade_no;   符号=$美元→getParam(元数据);   美元dataXML=" & lt; xml>   & lt; mch_id>”。$ data [' mch_id ']。”& lt;/mch_id>   & lt; nonce_str>”。$ data [' nonce_str ']。”& lt;/nonce_str>   & lt; partner_trade_no>”。$ data [' partner_trade_no ']。”& lt;/partner_trade_no>   & lt; sign>“美元的迹象。”& lt;/sign>   & lt;/xml>”;   $ url=' https://api.mch.weixin.qq.com/mmpaysptrans/query_bank ';   ret=这→美元httpsPost (url, dataXML美元,真);   如果(ret美元[' return_code ']==晒Α?,$ ret [' result_code ']==晒Α?,$ ret [' err_code ']=='成功'){   返回ret美元;   其他}{   $ this→errorLog('查询微信付款到银行卡失败,appid:”。这个→美元appid。”,订单号:“。out_trade_no美元,美元ret);   返回错误;   }   }/*   *银行编号列表,详情参考:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php& # 63; 24 _4章=* @params字符串$ bank_name:银行名称,4个汉字   *返回int bank_code美元:银行编码   * */私有函数getBankCode (bank_name美元)   {   美元bank_code=0;   开关(bank_name美元){   情况下的工商银行”:bank_code=1002美元;打破;   情况下的农业银行”:bank_code=1005美元;打破;   情况下的中国银行”:bank_code=1026美元;打破;   情况下的建设银行”:bank_code=1003美元;打破;   案例的招商银行”:bank_code=1001美元;打破;   案例的邮储银行”:bank_code=1066美元;打破;   案例的交通银行”:bank_code=1020美元;打破;   案例的浦发银行”:bank_code=1004美元;打破;   情况下的民生银行”:bank_code=1006美元;打破;   情况下的兴业银行”:bank_code=1009美元;打破;   情况下的平安银行”:bank_code=1010美元;打破;   案”中信银行”:bank_code=1021美元;打破;   案例的华夏银行”:bank_code=1025美元;打破;   情况下的广发银行”:bank_code=1027美元;打破;   情况下的光大银行”:bank_code=1022美元;打破;   情况下的北京银行”:bank_code=1032美元;打破;   情况下的宁波银行”:bank_code=1056美元;打破;   }   返回bank_code美元;   }/* *   *公钥加密,银行卡号和姓名需要RSA算法加密   * @param字符串$ data需要加密的字符串,银行卡/姓名   * @return null字符串|加密后的字符串   */私有函数publicEncrypt(元数据)   {//进行加密   file_get_contents (ROOT_PATH。美元pubkey=openssl_pkey_get_public(数据/证书/public_pkcs8.pem));   encrypt_datahttps:美元//www.yisu.com/zixun/=?   $="加密;   (r=openssl_public_encrypt美元数据,encrypt_data美元,美元pubkey, OPENSSL_PKCS1_OAEP_PADDING);   如果($ r){//加密成功,返回base64编码的字符串   返回base64_encode(加密。encrypt_data美元);   其他}{   返回错误;   }   }/*   *获取公钥,格式为PKCS # 1转PKCS # 8   * openssl rsa -RSAPublicKey_in——& lt; filename>两级& lt; out_put_filename>   * */私人get_pub_key()函数   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

微信开发之企业付款到银行卡接口开发的示例代码