iOS H5調微信支付與回調

我這里用的是WKWebView,首先要實現(xiàn)WKNavigationDelegate協(xié)議

1、由H5頁跳轉微信客戶端--WKNavigationDelegate方法

該方法是決定H5頁面是否允許跳轉的

-(void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler{

? ? WKNavigationActionPolicy ?actionPolicy = WKNavigationActionPolicyAllow;//允許

? ? NSString*urlString = [[navigationAction.request URL] absoluteString];

? ? urlString = [urlString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

? ? NSLog(@"跳轉:>>>???>>%@",urlString);

? ? //打開微信

? ? if([urlString containsString:@"weixin://wap/pay?"]) {

? ? ? ? actionPolicy =WKNavigationActionPolicyCancel;//不允許跳轉

? ? ? ? NSURL*url = [NSURL URLWithString:urlString];

? ? ? ? if([[UIApplication sharedApplication] respondsToSelector:@selector(openURL:options:completionHandler:)]) {

? ? ? ? ? ? [[UIApplication sharedApplication] openURL:url options:@{UIApplicationOpenURLOptionUniversalLinksOnly: @NO} completionHandler:^(BOOL success) {

? ? ? ? ? ? }];

? ? ? ? }else{

? ? ? ? ? ? [[UIApplication sharedApplication]openURL:webView.URL];

? ? ? ? }

? ? }

? ? decisionHandler(actionPolicy);?//這句是必須加上的,不然會異常

}


2、從微信客戶端跳回APP

很多小伙伴兒都遇到回跳的問題,點擊“完成”或“取消”跳到了Safari卻跳不回APP。

1、配置 URL Types ??添加schemes:www.xxxx.com


2、配置?Referer

[request setValue:@"www.xxxx.com://" forHTTPHeaderField:@"Referer"];

3、服務器回調的URL中一定要寫成 ?www.xxxx.com:// , 如果一定要拼接,可以讓后臺區(qū)分一下,如果是iOS 前面一定要寫成?www.xxxx.com:// ,不然跳不回APP。

注意:www.xxxx.com 此域名一定是H5授權的域名,如果是二級域名,可以寫成:aaa.xxxx.com

3、支付回來頁面不刷新或產(chǎn)生空白頁

一般支付完不管完成與否都要調一下回調地址來刷新支付頁面的,但問題是iOS的回調地址中一定要寫成?www.xxxx.com:// 這樣的格式才能跳回來,但是調回來后沒有執(zhí)行回調地址,頁面又刷新不了,或者跳回來后是個空白頁,這又產(chǎn)生了一個新的問題。當點擊微信支付頁上的“完成”或“取消”返回APP時,會調用?AppDelegate 中的?openURL: 方法

-(BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options{?

? ? // url.scheme 就是?www.xxxx.com ,你只需要在這做一個判斷,如果是?www.xxxx.com 你就給外部發(fā)一個通知,那外部接收到這個通知,刷新界面就行了。

那么問題又來了,刷新方法是什么呢??

刷新地址也就是支付完的回調地址,后臺可以把回調地址拼接在?www.xxxx.com:// 后面,例如:www.xxxx.com://http://www.baidu.com 。 那么?url 就是?www.xxxx.com://?http://www.baidu.com ,你向外部發(fā)通知時把?url 作為參數(shù)傳出去即可?

if ([url.scheme containsString:@"www.xxxx.com"]) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

[[NSNotificationCenter defaultCenter] postNotificationName:@"refreshWXH5Pay" object:nil userInfo:@{@"url":url}]; ? ? ? ? ? ? ? ? ?

?} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

}

//這是外部接收、處理通知的方法 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-(void)refreshOrderData:(NSNotification*)notifi{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

NSDictionary*dic = notifi.userInfo; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

NSString*url = [NSString stringWithFormat:@"%@",dic[@"url"]]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

NSString*urlStr = [url substringFromIndex:14]; ?//截取?www.xxxx.com://?http://www.baidu.com? ? 后面的部分 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

[self.webView loadRequest:[self getRequest:urlStraction:nil]];

}

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容