花了一周多的时间总算把公司微信支付相关的业务代码抽成一个 Gem,第一次写 Gem 肯定有很多不完善的地方,希望大家多给点意见吧。
原文连接:https://www.lanzhiheng.com/posts/ruby-gem-for-wechat-pay-v3
这个 Gem 主要针对微信的 V3 接口做的封装,之前也发过文章来讨论微信的加密/解密过程,今天这个 Gem 也算是之前理论的产物。它对微信的加密/解密过程以及一些常用的接口做了简单的封装,用户可以开箱即用。针对笔者遗漏的接口,你也可以参考源代码封装出自己的版本。
安装好 Gem 之后
gem 'wechat-pay'
用户只需要简单配置所需要的信息,就能够直接使用微信的接口
WechatPay.apiclient_key = File.read('apiclient_key.pem')
WechatPay.platform_cert = File.read('platform_cert.pem')
WechatPay.apiclient_cert = File.read('apiclient_cert.pem') # 没有的话先注释掉
WechatPay.app_id = 'you appid'
WechatPay.mch_id = 'your mchid'
WechatPay.mch_key = 'your mch key'
公共接口目前主要分到 4 个模块中
WechatPay
如上所示提供了类方法来设置来读取关键的信息。WechatPay::Sign
对一些加密/解密的关键方法做了封装,为接口的封装提供支持。针对我遗漏的接口你可以利用里面的方法来封装出自己的版本。不用去纠结微信那繁琐的开发指南
WechatPay::Ecommerce
基于电商收付通的所有接口做了封装(公司业务需要)。而电商收付通所用到的接口跟服务商的接口会有些重叠,文档还没整合得太好,还请见谅。WechatPay::Direct
直连商户相关的接口做了封装,目前只封装了像支付,合单支付,退款等比较常见的接口,后面有需要会慢慢追加。由于时间比较仓促,文档都是直接通过rdoc来生成,并托管到Github Pages。
笔者尽可能对每一个接口都提供了用例,程序员们可以直接贴代码并替换成自己商户系统的相关内容。
比方说,获取证书的接口,我会附上相关的微信文档连接,以及用例代码
要针对微信的每个接口去写测试用例是很难的一件事情,个人精力也比较有限,所以我只针对WechatPay::Sign
的相关接口写了测试,每次合并前都会跑 CI,起码先保证签名相关的逻辑不出问题,对接口的封装才会有意义。
如果大家有微信支付相关的业务需求可以考虑尝试一下这个 Gem,有问题请及时给我建issues,能提PR就更好了。希望这个随着这个 Gem 的完善,能给一些对接微信支付的同学节省不少时间。