分析原因:(1)没有“通过config接口注入权限验证配置”,所有需要使用 JS-SDK (如JS接口wx.chooseWXPay())的页面必须先注入配置信息,否则将无法调用。https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#4;(2)通过 config 接口注入权限验证配置时,注入chooseWXPay接口的权限比调用wx.chooseWXPay()接口的速度慢,导致调用失败。因为config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在 ready 函数中调用来确保正确执行(config信息验证后会执行 ready 方法,所有接口调用都必须在 config 接口获得结果之后)。对于用户触发时才调用的接口,则可以直接调用,不需要放在 ready 函数中。https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#5;
解决方法:
第一种,使用 JS-SDK提供的接口wx.chooseWXPay() :https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#58
// 第一种 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#58
wx.ready(function() {
wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳,注意微信 jssdk 中的所有使用 timestamp 字段均为小写。但最新版的支付后台生成签名使用的 timeStamp 字段名需大写其中的 S 字符
nonceStr: '', // 支付签名随机串,不长于 32 位
package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
signType: '', // 微信支付V3的传入 RSA ,微信支付V2的传入格式与V2统一下单的签名格式保持一致
paySign: '', // 支付签名
success: function (res) {
// 支付成功后的回调函数
}
});
})
第二种,在微信浏览器里面打开H5网页使用微信支付提供的JS API调起支付(WeixinJSBridge内置对象在其他浏览器中无效)https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6
function onBridgeReady(){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId":"", // 公众号ID,由商户传入(appId为当前服务商号绑定的appid)
"timeStamp":"1395712654", // 时间戳,自1970年以来的秒数
"nonceStr":"", // 随机字符串,不长于32位
"package":"prepay_id=u802345jgfjsdfgsdg888", // 统一下单接口返回的prepay_id参数值,提交格式如:prepay_id=***
"signType":"MD5", // 微信签名方式:默认为MD5,支持HMAC-SHA256和MD5。注意此处需与统一下单的签名类型一致
"paySign":"" // 微信签名
},
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ){
// 使用以上方式判断前端返回,微信团队郑重提示:
//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
}
}
);
}
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
}else{
onBridgeReady();
}
如果还出现,那就是有一个配置id有时效性,失效了也提示这个