微信支付 调用支付JSAPI缺少参数:total_fee,支付失败
微信支付调用的问题解决
在微信支付的沙箱环境中,我们经常会遇到一些奇怪的问题。最近,我遇到了一个这样的问题:微信支付统一下单接口调用成功,但是微信端支付时JSAPI调用报错,提示缺少参数:total_fee,支付失败。
问题描述
在我们的项目中,我们使用微信支付的JSAPI来实现微信端的支付功能。我们先通过微信支付的统一下单接口(Unified Order Interface)来生成一个预付订单,然后再通过JSAPI来完成支付。
但是,在沙箱环境中,尽管我们成功地调用了统一下单接口,但是当我们尝试通过JSAPI进行支付时,却会报错,提示缺少参数:total_fee。这个问题让我们很头疼,因为我们已经检查过所有的参数了。
原因分析
经过一番调研,我们发现,这个问题是由于微信端的JSAPI接口有一个特殊的要求:必须传递一个名为“total_fee”的参数,表示支付金额。这个参数在我们的统一下单接口中已经包含了,但是在JSAPI接口中却没有被自动传递过去。
解决方案
为了解决这个问题,我们需要在JSAPI接口中手动传递这个“total_fee”参数。具体的步骤如下:
1. 在微信端的JSAPI接口中,添加一个名为“total_fee”的参数,值为支付金额。
2. 确保这个参数的值与统一下单接口中的“total_fee”参数值保持一致。
示例代码
以下是示例代码:
```javascript// 统一下单接口wx.request({
url: ' data: {
appid: 'your_app_id',
mch_id: 'your_mch_id',
nonce_str: wx.generateNonceStr(),
body: '测试支付',
out_trade_no: 'your_out_trade_no',
total_fee:1,
spbill_create_ip: '127.0.0.1',
notify_url: ' trade_type: 'JSAPI'
},
method: 'POST',
success: function(res) {
// 获取预付订单号 var prepay_id = res.data.prepay_id;
// JSAPI接口 wx.request({
url: ' data: {
appid: 'your_app_id',
mch_id: 'your_mch_id',
nonce_str: wx.generateNonceStr(),
prepay_id: prepay_id,
package: 'prepay_id=' + prepay_id,
sign_type: 'HMAC-SHA256',
pay: {
total_fee:1 // 添加total_fee参数 }
},
method: 'POST',
success: function(res) {
// 支付成功 console.log('支付成功');
},
fail: function(err) {
// 支付失败 console.error('支付失败', err);
}
});
},
fail: function(err) {
// 统一下单接口调用失败 console.error('统一下单接口调用失败', err);
}
});
```
结论
通过以上的分析和解决方案,我们可以看到,微信支付调用的问题主要是由于JSAPI接口中缺少“total_fee”参数导致的。通过手动添加这个参数,我们就可以成功地完成微信端的支付功能。
希望这篇文章能够帮助你解决类似的问题!