最近我其中一個(gè)項(xiàng)目需要接入微信支付硝桩,實(shí)現(xiàn)方式是在WebView里利用Url拉起微信支付頁面,但是實(shí)際操作的時(shí)候卻發(fā)現(xiàn)始終無法拉起支付頁面枚荣,最后排查了一段時(shí)間碗脊,發(fā)現(xiàn)原來是因?yàn)橐粋€(gè)很簡單的問題出錯(cuò)了,于是解決問題以后特意想把這個(gè)問題記錄下來分享橄妆,也便于以后自己解決同類問題衙伶。
代碼如上祈坠,每次微信支付走到https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=************,這個(gè)開頭的url時(shí)矢劲,就停住了赦拘,根本不會(huì)跳到weixin://wap/pay?開頭的url中,然后再調(diào)用startActivity打開微信客戶端支付芬沉。當(dāng)時(shí)我百思不得其解躺同,到底那里出錯(cuò)了呢,為什么吊不起微信支付丸逸,后來我看了一下自己之前的項(xiàng)目笋籽,發(fā)現(xiàn)我原先的項(xiàng)目是這樣的:
可以看到,這里return 返回的是false椭员,問題出在這里车海。這時(shí)我又在想,為什么會(huì)這樣隘击?
查閱資料以后我發(fā)現(xiàn)shouldOverrideUrlLoading的返回值的意義為:
- 若設(shè)置 WebViewClient 且該方法返回 true 侍芝,則說明由應(yīng)用的代碼處理該 url,WebView 不處理埋同,也就是程序員自己做處理州叠。
- 若設(shè)置 WebViewClient 且該方法返回 false,則說明由 WebView 處理該 url凶赁,即用 WebView 加載該 url咧栗。
- 若沒有設(shè)置 WebViewClient 則由系統(tǒng)(Activity Manager)處理該 url,通常是使用瀏覽器打開或彈出瀏覽器選擇對(duì)話框虱肄。
那么這種情況下致板,返回值應(yīng)該改為 false或者super .shouldOverrideUrlLoading(view, url); ,因?yàn)槲⑿胖Ц墩{(diào)用https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb這個(gè)開頭的url后咏窿,會(huì)重定向到weixin://wap/pay開頭的url斟或,然后調(diào)用微信客戶端支付,如果用true集嵌,則WebView不會(huì)自動(dòng)重定向到weixin://wap/pay開頭的url萝挤,需要程序員自行處理,這種情況下自然是無法吊起支付的根欧。