javascript - 微信支付:H5調起支付API,直接說支付失敗
問題描述
我在使用java開發微信的公眾號支付功能,使用的是公眾號內部支付功能
第一步,統一下單接口已經調通,可以獲取prepay_id(下面會有代碼貼出),可是在通過JS調起支付的API的時候,直接返回的就是失敗,頁面有調用微信支付的窗口閃動一下,其實根本沒調起來支付控件,也不知道哪里出了問題,只能在手機上調用查看,也無法進行跟蹤調查,alert出來的數據直接就是失敗,具體的JS代碼如下
function onBridgeReady(){var param = {}; param.openid = openid; param.orderAmount = 11; param.stageid = 2007;console.log(param);//通過下面接口獲取統一下單接口參數 var url = puburl + '/wxpay/createOrderinfo'; var data = ajaxUtil.ajaxJson(url, JSON.stringify(param)); console.log(data); if(data.code != 0) {console.log(data);return false; }var result = data.data; alert(JSON.stringify(result));//上面接口已經獲取接口需要的數據, //根據微信官方提供的demo就是通過下面方式進行參數賦值 WeixinJSBridge.invoke( ’getBrandWCPayRequest’, { 'appId':result.appId, 'timeStamp':result.timeStamp, 'nonceStr':result.nonceStr, 'package':result.prepay_id,'signType':result.signType,'paySign':result.paySign}, function(res){ //可是程序走到這一步 //打印出 res.err_msg的結果直接就是:get_brand_wcpay_request:fail //只能在手機上調試,無法查看具體錯誤原因 alert(res.err_msg); // 使用以上方式判斷前端返回, //微信團隊鄭重提示:res.err_msg將在用戶支付成功后返回ok, //但并不保證它絕對可靠。 if(res.err_msg == 'get_brand_wcpay_request:ok' ) {alert('支付成功!') } else if(res.err_msg == 'get_brand_wcpay_request:cancel') {alert('支付取消!'); } else if(res.err_msg == 'get_brand_wcpay_request:fail') {alert('支付失敗!'); }} );}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();}
希望各位大神看看有什么問題,具體如果那里沒有描述清楚,請指出來我給解釋或者貼代碼
補充:配置的支付授權目錄和支付頁面的路徑是一直的,這個是經過仔細確認一直的,沒有任何問題!
問題解答
回答1:親,你的微信支付授權URL配置的是否正確?另外,http和https一定要嚴格匹配喲
回答2:調統一下單成功嗎?要是成功的話,看看簽名對不對,再看看支付目錄配置。微信返回的提示具體是什么?
回答3:這種情況下,不是簽名錯誤,就是支付路徑不對。在失敗時,把整個 res 打出來,微信返回有其他信息的,不僅僅有err_msg
你的package參數是不是不對,參數值是prepay_id=xxx
timestamp: 0, // 支付簽名時間戳,注意微信jssdk中的所有使用timestamp字段均為小寫。但最新版的支付后臺生成簽名使用的timeStamp字段名需大寫其中的S字符
不知道是不是字段大小寫原因?
