react-native-webview 微信h5支付(android,ios)

RN里接入微信的H5支付ios和android的一些配置(主要是在webview中手動設(shè)置referer)

anroid 的配置

修改RNCWebViewManager.java 文件 路徑/node_modules/react-native-webview/android/src/main/java/com/reactnativecommunity/RNCWebViewManager.java?

1. 定義refererUrl??

添加 public static String refererUrl = null;

1

2.添加Referer

刪除

root.loadUrl(args.getString(0));

添加

HashMapheaderMap=newHashMap<>();

if(refererUrl!=null) {

headerMap.put("Referer", refererUrl);

? ? ? ? }

root.loadUrl(args.getString(0), headerMap);


2

3設(shè)置我們的referer

refererUrl = activeUrl;


3

ios的配置

1.info.plist配置scheme

需要將微信H5支付的安全域名配置成scheme,不設(shè)置會報商家參數(shù)格式不對

設(shè)置scheme

2.設(shè)置我們的referer

修改RNCWebView.m 文件?路徑/node_modules/react-native-webview/ios/RNCWebView.m

?在webView:(WKWebView *)webViewdecidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler的方法中添加

//修改跳轉(zhuǎn)鏈接header(Referer,以及重定向跳轉(zhuǎn)微信的 URL)?

?? ?if ([absoluteString hasPrefix:@"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb"]&& ![absoluteString hasSuffix:[NSString stringWithFormat:@"redirect_url=www.baidu.com.cn://wxpaycallback/"]]) {

? ? ? ? decisionHandler(WKNavigationActionPolicyCancel);

? ? ? ? NSString *redirectUrl = nil;

? ? ? ? if ([absoluteString containsString:@"redirect_url="]) {

? ? ? ? ? ? NSRange redirectRange = [absoluteString rangeOfString:@"redirect_url"];

? ? ? ? ? ? redirectUrl = [[absoluteString substringToIndex:redirectRange.location] stringByAppendingString:[NSString stringWithFormat:@"redirect_url=www.baidu.com.cn://wxpaycallback/"]];

? ? ? ? } else {

? ? ? ? ? ? redirectUrl = [absoluteString stringByAppendingString:[NSString stringWithFormat:@"redirect_url=www.baidu.com.cn://wxpaycallback/"]];

? ? ? ? }

? ? ? ? NSMutableURLRequest *newRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:redirectUrl] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];

? ? ? ? newRequest.allHTTPHeaderFields = request.allHTTPHeaderFields;

? ? ? ? newRequest.URL = [NSURL URLWithString:redirectUrl];

? ? ? ? [newRequest setValue:@"www.baidu.com.cn://wxpaycallback/" forHTTPHeaderField:@"Referer"];

? ? ? ? [_webView loadRequest:newRequest];

? ? ? ? return;

? ? }

? ? //攔截重定向的跳轉(zhuǎn)微信的 URL Scheme, 打開微信

? ? if ([absoluteString hasPrefix:@"weixin://"]) {

? ? ? ? decisionHandler(WKNavigationActionPolicyAllow);

? ? ? ? dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

? ? ? ? ? ? if ([[UIApplication sharedApplication] canOpenURL:navigationAction.request.URL]) {

? ? ? ? ? ? ? ? [[UIApplication sharedApplication] openURL:navigationAction.request.URL];

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? //未安裝微信的處理

? ? ? ? ? ? }

? ? ? ? });

? ? ? ? return;

? ? }

? decisionHandler(WKNavigationActionPolicyAllow);

? return;


添加Referer
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容