
说明
在之前开发发布的项目课程《微信小程序云开发微信支付商城实战项目》,早先做支付的时候非常容易,只需要在云开发设置中,配置一下微信商户号,然后点一下授权就可以直接使用了,但是现在改了规则,绑定商户号时,无法发起授权,提示需要用微信支付的工作流来实现,那么这一节就给大家讲一下如何快速高效完成微信小程序支付功能。
错误复现
如果在云函数中写使用cloudPay.unifiedOrder统一下单api,如下所示,会报错:errCodeDes: "受理关系不存在",出现这个错误,那就代表绑定商户号没有授权成功,不知道大家有没有遇到过这个错误。
javascript
exports.main = async (event, context) => {
const res = await cloud.cloudPay.unifiedOrder({
"body" : "小秋TIT店-超市", // 商品描述
"outTradeNo" : "1217752501201407033233368018", // 商户订单号
"spbillCreateIp" : "请传入终端 ip 地址,支持 ipv6", // 终端 IP
"subMchId" : "1712600078", // 商户号
"totalFee" : 1, // 总金额
"envId": "cloud1-9gaa1ieg11955727", // 云函数环境名称
"functionName": "pay_cb" // 支付结果通知回调云函数名
})
return res
}
解决方案
1.在云开发控制台选择管理工具

2.模版中心的模版市场中,选择小程序微信支付
选择完模版后会自动安装,这里稍微等待一下就可以,就会自动安装成功了
3.模版概览
在模版概论中有详细的操纵步骤,你仔细看文档基本可以掌握,文档地址传送门,在模版中主要是配置参数比较麻烦,配置错了会出现各种错误,这里主要是给大家说一下错误后怎么解决。
1)在模版概述或我的模版中,点击查看详情就可以进入到模版配置中
主要是填写好如下几项配置就可以完成支付 ① 点击参数设置 ②如果不知道这些参数怎么填,可以选择输入框下面的链接,有很详细的文档说明,会告诉你怎么配置的,详细的文档地址
2)安装调试接口
1.打开微信开发者工具界面,在cloudfunctions目录点击右键,选择同步云函数列表,同步模板中的云函数wxpayFunctions到本地;然后在云函数wxpayFunctions目录右键,选择下载,即可下载模板内置的云函数代码到本地。如下图所示:
2.选择wxpayFunctions云函数,单击右键"开启云函数本地调试"
①选择手动调试 ②设置参数,type:"wxpay_order",点击调用 ③如果返回了code:0,data返回了参数,那么就说明参数配置成功了,如果出现报错那么可以参考下面我统计的错误信息及修改办法
3)错误一:商户API证书序列号错误,errcode: "InnerError.FailedOperation"
errmsg: "{"message":"微信支付SDK请求失败, 响应码:401,错误码:SIGN_ERROR, 错误信息: 商户证书序列号有误。请使用签名私钥匹配的证书序列号"}"。出现上面的这个错误,一般就是"商户API证书序列号"过期或者无效。 解决办法: 进入到微信商户pay.weixin.qq.com,点击管理证书,申请新的API证书管理,这个申请过程可以根据之前写的文案来生成,uniapp项目unipay开通微信支付,生成后下载好证书,同时会生成新的"证书序列号",将新的序列号添加到参数设置中的"商户API证书序列号",就可以解决这个错误了。
4)错误二:商户API证书私钥错误,errcode: "InnerError.FailedOperation"
errmsg: "{"message":"http请求失败, 错误信息: Input byte array has incorrect ending byte at 1628"}"。错误可能有所不同,但是很类似,这种一般就是私钥有问题。 解决办法: 在上一步使用"微信支付商户平台证书工具"生成的证书,解压"1604799500_20250416_cert"文件 使用文本编辑器,打开私钥文件"apiclient_key.pem"
将私钥文件全选复制,拷贝到"参数设置"的"商户API证书私钥"中,重新保存,再运行,可以解决这个错误。
5)错误三:API V3密钥错误,errcode: "InnerError.FailedOperation"
errmsg: "{"message":"http请求失败, 错误信息: java.security.InvalidKeyException: Invalid AES key length: 33 bytes"}"。这个错误API V3密钥错误,这个错误找了半天,原因是要求32位,给提供了33位,我用AI给生成的随机字符,结果AI给多生成了一位字符,导致找了好久的错误。 解决办法: 还是到微信商户平台里面,找到api安全,设置修改APIv3秘钥,重新修改一个,填写到"参数设置"的API V3密钥中,就可以解决这个错误了。
4.实现支付
在可以的直接可以调用云函数获取支付参数,然后通过wx.requestPayment唤起微信支付组件,完成支付。
javascript
wx.cloud.callFunction({
// 云函数名称
name: 'wxpayFunctions',
data: {
// 调用云函数中的下单方法
type: 'wxpay_order',
// 业务其他参数...
// 这里的参数会传入wxpayFunctions/wxpay_order/index.js下的函数,通过event获取
},
success: (res) => {
console.log('下单结果: ', res);
const paymentData = res.result?.data;
// 唤起微信支付组件,完成支付
wx.requestPayment({
timeStamp: paymentData?.timeStamp,
nonceStr: paymentData?.nonceStr,
package: paymentData?.packageVal,
paySign: paymentData?.paySign,
signType: 'RSA', // 该参数为固定值
success(res) {
// 支付成功回调,实现自定义的业务逻辑
console.log('唤起支付组件成功:', res);
},
fail(err) {
// 支付失败回调
console.error('唤起支付组件失败:', err);
},
});
},
});