上代碼 解析在下邊 適用于所有安卓手機(jī)端webview支付
ios 添加微信Scheme即可使用
//攔截H5頁(yè)面跳轉(zhuǎn)事件 (request ) => boolean true繼續(xù)跳轉(zhuǎn) false停止跳轉(zhuǎn)
<WebView>
source={{ uri: 'uri',}}
onShouldStartLoadWithRequest={request => {
//url
const url = request.url;
console.log('nowUrl', request);
//如果跳轉(zhuǎn)的為 微信支付或者 支付寶支付
if (
url.startsWith('weixin://wap/pay?') ||
url.startsWith('alipay')
) {
if (url.startsWith('alipay')) {
//打開(kāi)支付寶
Linking.openURL(url);
} else {
console.log('wxpay', url);
//打開(kāi)微信
Linking.openURL(url);
}
return false;
} else {
console.log('未攔截');
return true;
}
}}
</WebView>
因微信支付特殊性 需修改react-nativ-webview 文件node_modules\react-native-webview\android\src\main\java\com\reactnativecommunity\webview\RNCWebViewManager.java
shouldOverrideUrlLoading方法
修改為以下
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
final String url = request.getUrl().toString();
if(url.startsWith("https://wx.tenpay.com")){
Map<String, String> headers = new HashMap<String, String>();
headers.put("Referer","http:xxxxxxx.xxx");//填入 H5 端的支付域名
view.loadUrl(url, headers);
return true;
}
return this.shouldOverrideUrlLoading(view, url);
}
微信支付解析(僅自己理解)
H5發(fā)送跳轉(zhuǎn)事件 跳轉(zhuǎn)到 【https://wx.tenpay.com/xxxx】 的頁(yè)面(對(duì)應(yīng)底層的攔截) 由此頁(yè)面生成真正的H5支付信息和跳轉(zhuǎn)鏈接
這個(gè)跳轉(zhuǎn)鏈接以【weixin://wap/pay?】為開(kāi)頭 在webview中攔截此頁(yè)面
調(diào)用打開(kāi)瀏覽器的方法 去打開(kāi)此鏈接會(huì)自動(dòng)跳轉(zhuǎn)