这篇文章主要介绍了微信小程序 支付功能开发错误总结的相关资料,需要的朋友可以参考下
微信小程序 支付功能开发错误总结
微信小程序支付终于踩完坑了,发现里面坑挺大的,现在发个贴,希望以后入坑的同学可以看一下 :
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=2
业务流程在这里大家看文档的时候可以看到。第一个坑,获取用户的openid,参数一定要拼在url连接上,否则会报{errcode:40013,errmsg:invalid appid, hints: [ req_id: iil1ba0504ns86 ]}错误
onload: function () {
var that = this
wx.login({
success: function (res) {
if (res.code) {
//发起网络请求
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session?appid=wxaacf22345345cfc7162fe3&secret=83ebd41c3e6f34a49b3a34578063434548ff3f71&js_code=' + res.code + '&grant_type=authorization_code',
method: post,
success: function (res) {
that.setdata({
openid: res.data.openid
})
}
})
} else {
console.log('获取用户登录态失败!' + res.errmsg)
}
}
});
}
第二个坑,支付统一下单接口,签名这个坑是比较多人遇到问题的这个是md5加密经常和签名工具里面的加密签名不一样
签名加密工具地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1
签名加密的时候要转成utf-8,加密我用自己的接口进行加密的 digest.update(data.getbytes(utf-8));
// 统一下单接口获取sign(签名)
paysignjsapi: function (appid, attach, body, mch_id, nonce_str, notify_url, openid, out_trade_no, spbill_create_ip, total_fee, trade_type, key) {
var self = this;
//加密签名
wx.request({
url: 'http://localhost:8080/xinxingwxapi/wxxcxapi/md5encrypt.do',
method: 'get',
data: {
appid: appid,
attach: attach,
body: body,
mch_id: mch_id,
nonce_str: nonce_str,
notify_url: notify_url,
openid: openid,
out_trade_no: out_trade_no,
spbill_create_ip: spbill_create_ip,
total_fee: total_fee,
trade_type: trade_type,
key: key
},
//统一下单
success: function (res) {
var sign = res.data.strmd5
var formdata = <xml>
formdata += <appid> + appid + </appid> //appid
formdata += <attach> + attach + </attach> //附加数据
formdata += <body> + body + </body> //标题
formdata += <mch_id> + mch_id + </mch_id> //商户号
formdata += <nonce_str> + nonce_str + </nonce_str> //随机字符串,不长于32位。
formdata += <notify_url> + notify_url + </notify_url> //异步接收微信支付结果通知的回调地址
formdata += <openid> + openid + </openid> //用户id
formdata += <out_trade_no> + out_trade_no + </out_trade_no> //商户订单号
formdata += <spbill_create_ip> + spbill_create_ip + </spbill_create_ip>
formdata += <total_fee> + total_fee + </total_fee> //金额
formdata += <trade_type> + trade_type + </trade_type> //公共号支付
formdata += <sign> + sign + </sign>//签名
formdata += </xml>
返回数据解析xml
//请求统一下单接口
wx.request({
url: https://api.mch.weixin.qq.com/pay/unifiedorder,
method: 'post',
data: formdata,
success: function (data) {
wx.request({
url: http://localhost:8080/xinxingwxapi/wxxcxapi/xmlanalyze.do?strxml= + data.data,
method: 'post',
success: function (res) {
var pk = 'prepay_id=' + res.data.prepayid;
var timestamp = self.createtimestamp();
//获取支付签名,并支付
self.getsigntype(appid, timestamp, nonce_str, pk, md5, key);
}
})
}
})
}
});
}
第三就是调用支付了,这里也有几个小坑,第一就是appid很多写成appid就不行了,第二个就是preoatid 的参数格式要写对prepay_id=wx2017011711060194dccf725232155886323 第三个就是调用支付的时候报支付签名错误,也需要到签名接口查看签名是否一致,查看参数是否是对的,调用微信支付的时候必须加上appid
getsigntype: function (appid, timestamp, nonce_str, pk, signtype, key) {
var that = this;
wx.request({
url: http://localhost:8080/xinxingwxapi/wxxcxapi/getsigntype.hn,
method: 'get',
data: {
appid: appid,
timestamp: timestamp,
noncestr: nonce_str,
pk: pk,
signtype: signtype,
key: key
},
success: function (res) {
console.log(res.data.paysign)
var paysign = res.data.paysign
//调用微信支付
wx.requestpayment({
'appid': appid,
'timestamp': timestamp,
'noncestr': nonce_str,
'package': pk,
'signtype': 'md5',
'paysign': paysign,
'success': function (res) {
console.log(res);
console.log('success');
},
'fail': function (res) {
console.log(res);
console.log('fail');
},
'complete': function (res) {
// console.log(res);
console.log('complete');
}
});
}
})
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
以上就是详解微信小程序支付功能开发错误总结的详细内容。