前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >整合ThinkPHP功能系列之微信企业付款至用户零钱银行卡

整合ThinkPHP功能系列之微信企业付款至用户零钱银行卡

作者头像
沈唁
发布2018-06-06 15:00:27
1.8K0
发布2018-06-06 15:00:27
举报
文章被收录于专栏:沈唁志沈唁志沈唁志

公司开发商城项目,还是放在公众号里面的,所以一系列的支付都需要使用微信的支付功能。产品就提出了用户奖金提现要走API,不然把财务累死 ? 

企业付款到零钱以及银行卡是2个接口,功能不一样,而且付款到零钱是有付款条件的

1、商户号(或同主体其他商户号)已入驻90日 2、商户号(或同主体其他商户号)有30天连续正常交易 3、 登录微信支付商户平台-产品中心,开通企业付款。

就这样我们公司用不了零钱付款的功能,但是我也集成了,可以看看

这里还是主要说付款至用户银行卡,微信上线的企业付款至银行卡功能,商户可以将商户号余额付款至指定的收款银行账户,通过指定收款银行账户户名、卡号,以及收款银行信息就可以实现付款功能

目前企业付款到银行卡仅支持17家银行,更多银行在逐步开放中,但是看着常用的银行基本都有,这个不影响使用

使用企业付款接口是需要双向证书的,这个找你们公司负责的人吧

第一步:获取RSA加密公钥

调用获取RSA公钥API获取RSA公钥,落地成本地文件,假设为public.pem,确定public.pem文件的存放路径,同时修改代码中文件的输入路径,加载RSA公钥,用标准的RSA加密库对敏感信息进行加密,选择RSA_PKCS1_OAEP_PADDING填充模式, 得到进行rsa加密并转base64之后的密文,将密文传给微信侧相应字段,如付款接口(enc_bank_no/enc_true_name)

这个接口默认输出PKCS#1格式的公钥,我们需要这个,所以先写一个接口去请求一下,然后将证书文件保存一下

public function rsa()
{
    $config = C('WECHAT');
    vendor('Weixin.WeChatPayBank');
    $model = new WechatPayBank($config);
    $model->rsa();
}

将集成好的SDK放在/ThinkPHP/Library/Vendor/Weixin,集成好的代码有点多,这里就不发了,万一熊掌号不给我收录就GG了,最后会上传Github,自行下载吧

请求上面这个接口会返回证书信息

整合ThinkPHP功能系列之微信企业付款至用户零钱银行卡
整合ThinkPHP功能系列之微信企业付款至用户零钱银行卡

第二步:转换秘钥

将这个public_key保存一下,因为还要转换。PKCS#1转PKCS#8

openssl rsa -RSAPublicKey_in -in <filename> -pubout

这个命令需要在服务器执行,如果报错的话,说明你姿势不对 

:mrgreen:
:mrgreen:
Error opening Public Key pkcs8.pem
139840771336096:error:02001002:system library:fopen:No such file or directory:bss_file.c:402:fopen('pkcs8.pem','r')
139840771336096:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:404:
unable to load Public Key

类似这样~就是命令的问题了

openssl rsa -RSAPublicKey_in -in pkcs1.pem -pubout > pkcs8.pem

这样提示writing RSA key就说明成功了,当然敲这个命令的时候要进入你放证书以及上面的公钥的目录,放在一个不可直接访问的目录!这是重点,防止别人直接盗用造成资金损失

毕竟这是涉及金钱方面的东西,最好多测试几次。我也不想看到有人来找我说,因为使用了我的SDK而造成资金损失,来找我要赔偿,哈哈 ?

这样就可以把之前写的rsa控制器方法注释掉了,因为他没用了

第三步:配置信息

TP3使用C方法读取配置文件,所以你要将商户号那些配置文件放在/Application/Common/Conf/config.php中,记得补全一下信息。并且我将证书放在了/Common/Credential/

'WECHAT' => [
    'appid' => '',//公众号id
    'appKey' => '',//公众号APPKey
    'apiKey' => '',//商户API密钥
    'mchid' => '',//商户号
    'certificate_path' => dirname(dirname(__FILE__)).'/Credential',//证书路径
],

第四步:调用

然后就可以调用了,具体还是要根据你的业务逻辑来操作,做好写一个事务,防止资金损失,不然你钱怎么没的你都不知道

public function check()
{
    $config = C('WECHAT');
    vendor('Weixin.WeChatPayBank');
    $model = new WechatPayBank($config);
    $result = $model->paybank($bank_no, $true_name, $bank_code, $amount, $partner_trade_no);
}

调用的时候将用户的银行卡号,用户名,开户行ID,企业付款金额(单位为分),商户订单号传过去就行了。开户行ID微信那边有提供,然后就没然后了,具体自己看代码吧

项目地址:

Github,如果项目对你有所帮助,请给一个star ?

相关文档:

获取RSA加密公钥API

银行编号列表

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一步:获取RSA加密公钥
  • 第二步:转换秘钥
  • 第三步:配置信息
  • 第四步:调用
  • 项目地址:
  • 相关文档:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档