项目作者: yenche123

项目描述 :
Serverless Cloud Function in TCB with WeChat-Pay
高级语言: JavaScript
项目地址: git://github.com/yenche123/tcb-wxpay.git
创建时间: 2021-02-16T01:52:21Z
项目社区:https://github.com/yenche123/tcb-wxpay

开源协议:MIT License

下载


tcb-wxpay

cloudbase function + tenpay

使用腾讯云开发云函数实现的微信支付apiV3,小程序支付通道(非腾讯云开发云调用的微信支付)

在微信小程序里使用微信支付,多数人首选腾讯云开发原生的云调用能力 - 微信支付,以腾讯云开发作为服务商提供的微信支付方案。

然而,实测后发现,支付后的支付凭证上少了一个常见的入口商家小程序,看得很难受,如下图所示。

另外,star数排名靠前的第三方开源的微信支付方案,仍然使用的是apiV2,基于安全和适应新特性的考量,也没有被考虑。

为了在支付凭证上看到商家小程序入口,于是自己搭了本仓库所示的支付链路,其中包括通信参数和两道签名的关卡。最后实现了基于腾讯云函数实现的微信支付apiV3统一下单,得到如愿以偿的支付凭证如下图所示。


前置工作

  1. 有一个微信小程序账号 https://mp.weixin.qq.com/

  2. 有一个微信商户号 https://pay.weixin.qq.com/

  3. 依照微信支付接入前准备操作 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml


文件解释

支付时,需要一个后端服务器和微信支付服务器发起统一下单,取得prepay_id,接着对其签名获得paySign,再将包裹传回前端,以获得发起wx.requestPayment()所需的参数。

本仓库下 cloudFuncs/ 目录下就是核心代码。其中

  • requestOrder/ 表示统一下单的逻辑
  • receiveOrderResult/ 用于接收支付回调的云函数,需要一个 return {errcode: 0} 回传给微信支付

开启Http访问

用于接收支付回调的云函数需要至云开发控制台开启Http访问服务,得到一个可http访问receiveOrderResult云函数的url,再将此url填入 requestOrder/index.js 里的 NOTIFY_URL

替换证书和密钥

requestOrder/certKey 文件夹下存放了证书和密钥,用于签名方案SHA256 with RSA

请按照接入前准备 - 下载并配置商户证书 操作 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml#part-5

生成 apiclient_cert.pemapiclient_key.pem,并替换掉 requestOrder/certKey 文件夹下的文件。

安装依赖

requestOrder节点下,安装依赖

  1. npm install


在小程序里使用

  1. wx.cloud.callFunction({
  2. name: "requestOrder",
  3. data: {fee: 200}, //单位为“分”
  4. success(res) {
  5. console.log("回调结果...")
  6. console.log(res)
  7. let result = res.result || {}
  8. let payment = result.payment
  9. if(payment) {
  10. console.log("发起支付...")
  11. wx.requestPayment({
  12. ...payment,
  13. success(res2) {},
  14. fail(err2) {},
  15. })
  16. }
  17. },
  18. fail(err) {
  19. console.log(err)
  20. }
  21. })


License

The project is released under the MIT license.