使用云开发环境的云函数实现微信小程序的支付功能

背景:近期在开发一个商城类的微信小程序,因为本人只会使用 C 语言对 nodejs 环境不熟悉,因此在开发微信小程序时选用容易上手的云开发环境开发微信小程序。我想选用云开发环境的小伙伴和我的想法一致,对微信小程序开发相关知识了解很少。我的小程序的主体是个体工商户。

我的小程序在上线后,我才新增支付功能的。

实现微信支付的唯一核心接口:wx.requestPayment  (这个函数的直观表现是在小程序中点击立即购买按钮后在页面中弹出输入支付密码的弹出框)

wx.requestPayment({
  timeStamp: '',
  nonceStr: '',
  package: '',
  signType: 'MD5',
  paySign: '',
  success (res) { },
  fail (res) { }
})

可见:要能成功使用 wx.requestPayment,需要我们有五个参数( timeStamp, nonceStr,package,signType,,paySign)才能正常发起支付。 那我们要在哪里才能获取到这些参数呢?

十分有必要读的文章:

 云函数实现微信支付:微信小程序如何实现支付功能?看官方文档头疼(使用云函数的方式操作)_微信小程序支付-CSDN博客

总述:经过两天的实践,我了解到在云开发环境中获取(生成)到这些参数的方式有 3 种:

1、使用微信官方提供的 cloud.cloudPay.unifiedOrder (统一下单)函数生成支付必需的5个参数,文档:开发者资源 / SDK 文档 / 微信支付 / 统一下单 (qq.com)

2、使用 'wechatpay-node-v3' 开源库的 transactions_jsapi 函数生成支付必需的5个参数;地址:GitHub - littleApeStudio/ape-node-wechatpay-v3: 微信支付node版本的SDK

3、使用 'tenpay' 开源库的 getPayParams 函数生成支付必需的5个参数;地址:GitHub - befinal/node-tenpay: 微信支付 for nodejs

上面的 3 种方式,方式1 最简单直接在云开发环境种复制官方的示例代码即可完成支付能力。

方式 2 和方式 3 是需要引入引入三方依赖,安装依赖是使用npm 而npm必须安装node,关于如何安装node。所以比较麻烦一点。

最开始我当然选用的是方式1。 方式1 详细教程:7~云开发实现微信支付_哔哩哔哩_bilibili  

但是遇到了无法解决的问题。使用方式 1 需要在微信开发者工具中进行绑定和授权。操作时错误如下。

问题1:微信小程序 + 云开发工具中授权商户的时候 报错,Error: Base resp abnormal, 268500896 和 Error: Base resp abnormal,268435483 

原因:总之就是绑定不了,就是此路不通。具体如下图。就是命中新规了。无法使用,你这个情况得自己调用原接口。

该问题的解决方案就是 方式 2 和方式 3。

方式2 的详细教程:关于使用nodejs搭建微信小程序支付接口_nodejs 支付服务器-CSDN博客

方式3 的详细教程:小程序云开发实现微信支付完整代码_node-tenpay-CSDN博客

注意:1、tenpay 库中的 partnerKey (微信支付安全密钥或服务商密钥)指的是商户号的 APIv2 的密钥。

2、wechatpay-node-v3 的两个证书在商户号中进行申请。

最终我采用的是方式3 使用 tenpay 库,但是也不顺利。遇到的问题卡了 5 个小时。问题如下:

问题2:mch_id 格式错误问题。

排查方法:打印 pay 云函数中传的每一个变量参数,特别注意的是云函数的打印信息是在云开发控制台中的 log 中查看的。最终该问题莫名消失出现了问题3;

问题3:“签名错误,请检查后再试”。---有效的解决办法重新设置了 APIv2 密钥。

解决办法:前期花费大量时间在一遍又一遍的打印 pay 云函数中的参数然后刷新在云开发控制台中产查看,查看了很多类似问题,但不是在云开发环境产生的,浪费了时间,做了很多无效的工作。情绪很是低落,第二天在微信社区中搜索关键字:tenpay+签名失败 找到了相同的提问微信小程序云开发,使用云函数,tenpay微信支付签名失败,请问是什么情况? | 微信开放社区 (qq.com)

特别注意:云函数变动后必须上传并部署。

重置了 APIv2 的密钥(在没成功前我还是没有搞清楚 partnerKey (微信支付安全密钥或服务商密钥)指的是 APIv2 还是 APIv3 的密钥)。通过对比该问题:用云开发tenpay的时候出现“签名错误”的问题? | 微信开放社区 (qq.com)

数了下图中的 partnerKey 的位数,重置了 APIv2 的密钥。成功支付。

最终成功调用支付的效果图:

注意在微信小程序开发工具中调起支付的界面如下:

注意在真实手机的小程序中进行支付的效果图如下:

待补充:

1、提现(企业付款到微信零钱的功能)和充值功能。

在提现时遇到 NO_AUTH 错误,经检查是未开通企业付款到微信零钱的功能。经检查

                                                                                                                                       2024/3/28 晚

------------------------------------------------------------分隔线--------------------------------------------------------------

必用的网站:

1、微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式 (qq.com)

有价值的文档:

1、云函数的认识和理解:小程序云开发也能优雅实现微信支付 | 微信开放社区 (qq.com)

  • 28
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值