1、問題分析
首先核實需要的參數是否有值,其次核實JSAPI喚起支付方法的參數類型是否有效(經試驗這個問題會導致多個錯誤,比如:(1)調用支付JSAPI缺少參數:timeStamp;(2)商戶傳入的appid參數不正確,請聯系商戶處理),懷疑蘋果手機的微信內置瀏覽器有轉義,比如:package=rs.data.package;實際上傳給喚起支付JS的參數類型是int,也就是說我們賦值的時候需要加上 '',將int轉string類型,代碼如下:
var appid,timeStamp,nonceStr,package,paySign; //Ajax獲取業務參數 $.get('/wx/pay/jsapi.do',{},function(rs){ appid = ''+rs.data.appid; package = ''+rs.data.package; ... //喚起支付function ... });
當然如果定義參數的時候賦初始值,比如:var package="";這樣就不需要在ajax回調函數賦值的時候加上 ( ""+ );
2、喚起JSAPI支付方法
function onBridgeReady() { WeixinJSBridge.invoke('getBrandWCPayRequest', { "appId": "wx2421b1c4370ec43b", //公眾號ID,由商戶傳入 "timeStamp": "1395712654", //時間戳,自1970年以來的秒數 "nonceStr": "e61463f8efa94090b1f366cccfbbb444", //隨機串 "package": "prepay_id=up_wx21201855730335ac86f8c43d1889123400", "signType": "RSA", //微信簽名方式: "paySign": "oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ\/X+QBhcCYL21N7cHCTUxbQ+EAt6Uy+lwSN22f5YZvI45MLko8Pfso0jm46v5hqcVwrk6uddkGuT+Cdvu4WBqDzaDjnNa5UK3GfE1Wfl2gHxIIY5lLdUgWFts17D4WuolLLkiFZV+JSHMvH7eaLdT9N5GBovBwu5yYKUR7skR8Fu+LozcSqQixnlEZUfyE55feLOQTUYzLmR9pNtPbPsu6WVhbNHMS3Ss2+AehHvz+n64GDmXxbX++IOBvm2olHu3PsOUGRwhudhVf7UcGcunXt8cqNjKNqZLhLw4jq\/xDg==" //微信簽名 }, 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(); }
3、微信支付-QA文檔
https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/faq/chapter2_15.shtml?index=2#menu11