由于微信支付寶的封殺大戰(zhàn),導(dǎo)致無(wú)法在微信平臺(tái)中使用支付寶付款。但是考慮到某些用戶可能沒(méi)有開通微信支付锯七,因此在一些應(yīng)用情景下源织,實(shí)現(xiàn)微信端支付寶付款還是很有必要翩伪。最近擼的代碼正好有這個(gè)需求,所以研究了一下分享出來(lái)谈息,希望對(duì)需要的小伙伴有所幫助幻工。
實(shí)現(xiàn)思路:
在微信中,當(dāng)我們點(diǎn)擊支付寶付款(點(diǎn)擊第一張圖中的“確定”)時(shí)黎茎,先到一個(gè)跳轉(zhuǎn)頁(yè)面囊颅,跳轉(zhuǎn)頁(yè)面中的JS邏輯如下所示,
- 判斷當(dāng)前的運(yùn)行環(huán)境傅瞻,如果是微信內(nèi)置的瀏覽器踢代,則說(shuō)明是在微信平臺(tái)中,此時(shí)通過(guò)
document.body.innerHTML = '<img src="img/paySkip.png" id="mask" />';
將頁(yè)面內(nèi)容改為一張圖片嗅骄,提示用戶點(diǎn)擊右上角 ... ,選擇在手機(jī)瀏覽器中打開胳挎; - 用戶在手機(jī)瀏覽器中打開之后,則執(zhí)行
if (!isWeixin) {}
中的邏輯溺森,通過(guò)ajax向后臺(tái)請(qǐng)求數(shù)據(jù)慕爬; - 得到ajax返回的data后,運(yùn)行data中的script代碼屏积,就會(huì)接入支付寶的移動(dòng)網(wǎng)絡(luò)支付功能(data中的內(nèi)容為dom(form表單医窿,表單中的數(shù)據(jù)均已由后臺(tái)提供)+script(提交form表單的js代碼))
var orderNumber = url.split('&')[1].split('=')[1]; //判斷當(dāng)前環(huán)境是否為微信內(nèi)置瀏覽器 var ua = navigator.userAgent.toLowerCase(); var isWeixin = ua.indexOf('micromessenger') != -1; var url = window.location.href; if (!isWeixin) {//非微信內(nèi)置瀏覽器,說(shuō)明已經(jīng)在瀏覽器中打開了炊林,執(zhí)行這段邏輯 _ShowWaiting();//顯示等待顯示框 //封裝好的ajax請(qǐng)求函數(shù)姥卢,通過(guò)ajax向后臺(tái)請(qǐng)求數(shù)據(jù) HTTPRequestFunc( "get", 'http://v1dev.ebbaba.com/Interface/json/PayService.ashx?pagetype=aliwebpay', { ordernum: orderNumber }, function(data){ _CloseWaiting(); //返回的數(shù)據(jù)為一個(gè)form表單和提交該form的script,通過(guò)提交該表單(提交到支付寶,提交的數(shù)據(jù)等一系列內(nèi)容已經(jīng)全部包含在后臺(tái)返回的data數(shù)據(jù)中渣聚,我們只需要運(yùn)行data中的script即可) var data = JSON.parse(data); if(data.status == 1){ document.body.innerHTML = data.data; //通過(guò)innerHTML添加的script代碼不會(huì)自動(dòng)執(zhí)行独榴,需要我們手動(dòng)來(lái)執(zhí)行 var scripts = document.body.getElementsByTagName("script"); for(var i=0;i<scripts.length;i++){ //一段一段執(zhí)行script eval(scripts[i].innerHTML); } }else{ _CloseWaiting();//關(guān)閉等待顯示框 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" />'; }