收付通微信小程序调用接口/v3/pay/partner/transactions/jsapi下单后,微信小程序能够正常调起提示“支付验证签名失败”;
我的请求参数如下:
{
"sp_appid": "wx64a3bxxxxx",
"sp_mchid": "1634xxxx",
"sub_mchid": "1702xxxx",
"description": "订单分次支付-翡翠手镯",
"out_trade_to": "5eFgWsxxxXQkjdQLdn0_xxxx",
"time_expire": "2025-03-16T16:01:44+08:00",
"attach": "orderPay^miniProgram^250313xxx616",
"notify_url": "https://notify.xxxx.com/wallets/v3/wechat_notify",
"amount": {
"total": 650000
},
"payer": {
"sp_openid": "o_kEl0ayxxxxxxxxxxxy23VfSbIs"
},
"settle_info": {
"profit_sharing": true
}
}
小程序和公众号调起支付参数是不同的,注意一下参数格式和大小写
更新示例代码:
const { Wechatpay } = require('wechatpay-axios-plugin'); const { readFileSync } = require('fs'); // 商户号,支持「普通商户/特约商户」或「服务商商户」 const merchantId = '你的服务商商户号'; // 「商户API证书」的「证书序列号」 const merchantCertificateSerial = '对应的证书序列号'; // 从本地文件中加载「商户API私钥」,用于生成请求的签名 const merchantPrivateKeyFilePath = '/Users/memory/Downloads/wechatpay-axios/apiclient_key.pem'; const merchantPrivateKeyInstance = readFileSync(merchantPrivateKeyFilePath); // 从本地文件中加载「微信支付平台公钥」,用来验证微信支付应答的签名 const platformPublicKeyFilePath = '/Users/memory/Downloads/wechatpay-axios/apiclient_key.pem'; // 这里可先配置为和api证书一样的路径 const platformPublicKeyInstance = readFileSync(platformPublicKeyFilePath); // 「微信支付平台公钥」的「平台公钥ID」 // 需要在 商户平台 -> 账户中心 -> API安全 查询 const platformPublicKeyId = 'PUB_KEY_ID_01142321349124100000000000********'; // 这里可以先随便写个假的或者保持上面的不变 // 构造一个 APIv3 客户端实例(微信支付公钥模式) const wxpay = new Wechatpay({ mchid: merchantId, serial: merchantCertificateSerial, privateKey: merchantPrivateKeyInstance, certs: { [platformPublicKeyId]: platformPublicKeyInstance, }, }); const { Formatter, Rsa } = require('wechatpay-axios-plugin'); // 自定义 appId 和 package const appId = '替换你调起支付的APPID'; // 替换为你想要的 appId const prepay_id = '替换为你的预支付ID'; // 替换为你想要的 package const nonceStr = Formatter.nonce(); const timeStamp = '' + Formatter.timestamp(); const packageStr = 'prepay_id=' + prepay_id; const data = { appId, timeStamp, nonceStr, package: packageStr, signType: 'RSA', paySign: Rsa.sign( Formatter.joinedByLineFeed(appId, timeStamp, nonceStr, packageStr), merchantPrivateKeyInstance ) } // 打印输出 data console.log(data);