由于微信支付寶的封殺大戰,導致無法在微信平臺中使用支付寶付款。但是考慮到某些用戶可能沒有開通微信支付,因此在一些應用情景下,實現微信端支付寶付款還是很有必要。最近擼的代碼正好有這個需求,所以研究了一下分享出來,希望對需要的小伙伴有所幫助。
實現思路:
在微信中,當我們點擊支付寶付款(點擊第一張圖中的“確定”)時,先到一個跳轉頁面,跳轉頁面中的JS邏輯如下所示,
- 判斷當前的運行環境,如果是微信內置的瀏覽器,則說明是在微信平臺中,此時通過
document.body.innerHTML = '<img src="img/paySkip.png" id="mask" />';
將頁面內容改為一張圖片,提示用戶點擊右上角 ... ,選擇在手機瀏覽器中打開; - 用戶在手機瀏覽器中打開之后,則執行
if (!isWeixin) {}
中的邏輯,通過ajax向后臺請求數據; - 得到ajax返回的data后,運行data中的script代碼,就會接入支付寶的移動網絡支付功能(data中的內容為dom(form表單,表單中的數據均已由后臺提供)+script(提交form表單的js代碼))
var orderNumber = url.split('&')[1].split('=')[1]; //判斷當前環境是否為微信內置瀏覽器 var ua = navigator.userAgent.toLowerCase(); var isWeixin = ua.indexOf('micromessenger') != -1; var url = window.location.href; if (!isWeixin) {//非微信內置瀏覽器,說明已經在瀏覽器中打開了,執行這段邏輯 _ShowWaiting();//顯示等待顯示框 //封裝好的ajax請求函數,通過ajax向后臺請求數據 HTTPRequestFunc( "get", 'http://v1dev.ebbaba.com/Interface/json/PayService.ashx?pagetype=aliwebpay', { ordernum: orderNumber }, function(data){ _CloseWaiting(); //返回的數據為一個form表單和提交該form的script,通過提交該表單(提交到支付寶,提交的數據等一系列內容已經全部包含在后臺返回的data數據中,我們只需要運行data中的script即可) var data = JSON.parse(data); if(data.status == 1){ document.body.innerHTML = data.data; //通過innerHTML添加的script代碼不會自動執行,需要我們手動來執行 var scripts = document.body.getElementsByTagName("script"); for(var i=0;i<scripts.length;i++){ //一段一段執行script eval(scripts[i].innerHTML); } }else{ _CloseWaiting();//關閉等待顯示框 mui.toast(data.info,{verticalAlign:"center", duration:"long"}); } }, function(status, info){ _CloseWaiting(); mui.toast(info,{verticalAlign:"center", duration:"long"}); }); }else{//微信瀏覽器,顯示‘在瀏覽器中打開’圖片 document.body.innerHTML = '<img src="img/paySkip.png" id="mask" />'; }