2017微信企业付款至银行卡接口分享

浏览:7469 发布日期:2017/12/09 分类:用法示例 关键字: 支付
微信公众号企业付款至银行卡,看接口,商户可以将商户号余额付款至指定的收款银行账户。通过指定收款银行账户户名、卡号,以及收款银行信息即可实现付款。
ps:如果银行卡与姓名不一致,可以申请成功,最终到账会失败。失败原因中没有银行卡与姓名不一致,所以不大好判断因为什么失败的。
有不懂得同学可以联系
或者加群(二维码) 698040184
接口url:https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank
未完待续。。。。
按照接口文档
首先要获取rsa公钥,因为银行卡卡号和名字需要加密提交
----------------------------------------------------------
RSA算法使用说明(非对称加密算法,算法采用RSA/ECB/OAEPPadding模式)
1、 调用获取RSA公钥API获取RSA公钥,落地成本地文件,假设为public.pem
2、 确定public.pem文件的存放路径,同时修改代码中文件的输入路径,加载RSA公钥
3、 用标准的RSA加密库对敏感信息进行加密,选择RSA_PKCS1_OAEP_PADDING填充模式
(eg:Java的填充方式要选 " RSA/ECB/OAEPWITHSHA-1ANDMGF1PADDING")
4、 得到进行rsa加密并转base64之后的密文
5、 将密文传给微信侧相应字段,如付款接口(enc_bank_no/enc_true_name)

接口默认输出PKCS#1格式的公钥,商户需根据自己开发的语言选择公钥格式
--------------------------------------------------------

这里好像上传图片不大方便。。    //获取rsa加密公钥
    public function getrsaapi()
    {
            $params = [
                'mch_id'    => $this->mchId,
                'nonce_str' => strtoupper(md5(time())),
                'sign_type' => 'MD5'
            ];
        $signature = $this->getPaymentSignature($params); //生成sign
        $xml = $this->buildUnifiedOrderXml($params, $signature); //创建xml,
        $response = $this->getUnifiedpublickey($xml);  //提交获取rsa的请求
        $xml = simplexml_load_string($response, 'SimpleXMLElement', LIBXML_NOCDATA);
        if($xml->return_code == 'SUCCESS')
        {
//返回success时保存到本地pub_key
//            Storage::disk('public')->put('publicrsa.pem', $xml->pub_key);
        }
    }
保存到本地的pub_key是PKCS#1格式的公钥,需要转换成#8的

这是官方提供的#1格式-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEArT82k67xybiJS9AD8nNAeuDYdrtCRaxkS6cgs8L9h83eqlDTlrdw
zBVSv5V4imTq/URbXn4K0V/KJ1TwDrqOI8hamGB0fvU13WW1NcJuv41RnJVua0QA
lS3tS1JzOZpMS9BEGeFvyFF/epbi/m9+2kUWG94FccArNnBtBqqvFncXgQsm98JB
3a62NbS1ePP/hMI7Kkz+JNMyYsWkrOUFDCXAbSZkWBJekY4nGZtK1erqGRve8Jbx
TWirAm/s08rUrjOuZFA21/EI2nea3DidJMTVnXVPY2qcAjF+595shwUKyTjKB8v1
REPB3hPF1Z75O6LwuLfyPiCrCTmVoyfqjwIDAQAB
-----END RSA PUBLIC KEY-----
PKCS#1 转 PKCS#8: 文件路径写好后,执行就可以了

执行命令:openssl rsa -RSAPublicKey_in -in <filename> -pubout
到这里,就可以生成了PKCS#8的公钥了PKCS#8 格式密钥:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArT82k67xybiJS9AD8nNA
euDYdrtCRaxkS6cgs8L9h83eqlDTlrdwzBVSv5V4imTq/URbXn4K0V/KJ1TwDrqO
I8hamGB0fvU13WW1NcJuv41RnJVua0QAlS3tS1JzOZpMS9BEGeFvyFF/epbi/m9+
lkUWG94FccArNnBtBqqvFncXgQsm98JB3a42NbS1ePP/hMI7Kkz+JNMyYsWkrOUF
DCXAbSZkWBJekY4nGZtK1erqGRve8JbxTWirAm/s08rUrjOuZFA21/EI2nea3Did
JMTVnXVPY2qcAjF+595shwUKyTjKB8v1REPB3hPF1Z75O6LwuLfyPiCrCTmVoyfq
jwIDAQAB
-----END PUBLIC KEY-----
到这里可以先加密银行卡号和姓名了  //rsa加密响应字段
    public function rsa_encrypt($str)  
    {
        $pu_key = openssl_pkey_get_public(file_get_contents(这里是公钥的实际路径);  //读取公钥内容
        $encryptedBlock = '';
        $encrypted = '';
// 用标准的RSA加密库对敏感信息进行加密,选择RSA_PKCS1_OAEP_PADDING填充模式
   //   (eg:Java的填充方式要选 " RSA/ECB/OAEPWITHSHA-1ANDMGF1PADDING")
// 得到进行rsa加密并转base64之后的密文
       openssl_public_encrypt($str,$encryptedBlock,$pu_key,OPENSSL_PKCS1_OAEP_PADDING);  
       $str_base64  = base64_encode($encrypted.$encryptedBlock);
       return $str_base64;
    }
加密银行卡或者姓名结束

现在可以根据要求字段,加上sign,双向认证就可以提交api请求。

由于银行卡姓名和卡号不是同一持卡人也能通过,这点比较坑。提交个名字和正确的卡号,就会返回SUCCESS。

一般都得第二天到账,第一次测试的时候中行和招商信用卡,下午5点半提交,早上7点就到账了。

即使到账,请求查询企业付款的api时候,也可能显示PROCESSING,也就是银行卡到账,但是微信那边还不知道。
判断是否到账,还是得用SUCCESS。[2017-12-09 13:45:03] production.DEBUG: success-22提现到账1.08
[2017-12-09 13:45:03] production.DEBUG: <xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[查询成功]]></return_msg>
<result_code><![CDATA[SUCCESS]]></result_code>
<err_code><![CDATA[SUCCESS]]></err_code>
<err_code_des><![CDATA[查询成功]]></err_code_des>
<mch_id><![CDATA[********]]></mch_id>//这个是商户号id
<partner_trade_no><![CDATA[2017120817581932230]]></partner_trade_no>//自己创建的单号
<payment_no><![CDATA[10000148324492017120800000062557449]]></payment_no>//微信内部的单号
<bank_no_md5><![CDATA[C2D6A340BCF6B12193502D62144B28A9]]></bank_no_md5>//银行卡
<true_name_md5><![CDATA[55AAA12ACA99E936316A05161DE50828]]></true_name_md5>//名字
<amount>108</amount>//到账1.08手续费1元
<status><![CDATA[SUCCESS]]></status>
<cmms_amt>100</cmms_amt>
<create_time><![CDATA[2017-12-08 17:58:19]]></create_time> //创建订单时间
<pay_succ_time><![CDATA[2017-12-09 09:38:55]]></pay_succ_time> //成功付款时间
<reason><![CDATA[]]></reason>
今天的账单没有,因为我没有支付后台账号,所以无法下载
以下是之前21号测试的账单,










评论( 相关
后面还有条评论,点击查看>>