评论

调用支付JSAPI缺少参数:appId

跳转支付页立即唤醒微信支付时,部分手机会弹出“调用支付JSAPI缺少参数:appId”提示框。当用户重新刷新一下页面后,又可以重新唤醒支付了

分析原因:(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();
}


最后一次编辑于  2022-07-27  
点赞 2
收藏
评论

1 个评论

  • 蔡徐坤
    蔡徐坤
    04-16

    如果还出现,那就是有一个配置id有时效性,失效了也提示这个

    04-16
    赞同
    回复
登录 后发表内容