h5支付不能打开支付宝 ios_IOS H5支付调起微信支付宝客户端问题总结
IOS H5支付調(diào)起微信支付寶客戶端問題總結(jié)
很早之前公司的支付功能,通過H5去支付寶和微信支付,開始使用的是UIwebView來加載h5頁面,當(dāng)初只有支付寶網(wǎng)頁支付形式,所以沒有考慮到那么多,現(xiàn)在新增微信支付后發(fā)現(xiàn)不在info.plist中添加Alipay和weixin的白名單壓根調(diào)不起客戶端,折騰了好久,終于算是解決了,但是仍然不理想,下面記錄下這個坎坷的過程。
加載web頁ios下目前提供了兩種框架,UIWebView和WKWebView,經(jīng)過反復(fù)測試,發(fā)現(xiàn)在WKWebView下在ios9系統(tǒng)上不能調(diào)起微信支付客戶端,因此,暫時放棄WKWebView(雖然很傾向于使用它)。下邊說下使用UIWebView,并不需要添加白名單即可。
創(chuàng)建加載UIWebView就不多說了,這里主要說下打開支付寶和微信客戶端的處理
使用UIWebView調(diào)用支付寶支付很簡單,只要在- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType{}協(xié)議方法中檢測當(dāng)前request的url是否可以打開客戶端,即可
對于微信需要檢測當(dāng)前的request的url.scheme是否是weixin://,如果是的檢測是否設(shè)置了Referer,否則先設(shè)置? Referer,如果當(dāng)前scheme不是weixin://,像支付寶一樣拉起客戶端即可,微信支付還需要注意一點,就是支付完成和返回后如果下單url攜帶了回調(diào)頁地址的話,微信會自動跳轉(zhuǎn)到瀏覽器(這個地方出了設(shè)置scheme下的域名外如果還有其他方法的歡迎提供意見),同樣返回應(yīng)用內(nèi)后也會展示改回調(diào)頁,所以這個就需要服務(wù)器做下處理,如果需要進行交互,這里也不說了,網(wǎng)上有很多文檔,下面附上代碼
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL*url = [requestURL];
NSString *newUrl = url.absoluteString;
if ([url.scheme isEqualToString:@"weixin://"]) {
NSDictionary *headers = [request allHTTPHeaderFields];
BOOLhasReferer = [headersobjectForKey:@"Referer"] !=nil;
if(hasReferer){
if(![newUrlhasPrefix:@"http"]) {
UIApplication *application = [UIApplication sharedApplication];
if([applicationrespondsToSelector:@selector(openURL:options:completionHandler:)]) {
[applicationopenURL:request.URLoptions:@{}completionHandler:^(BOOLsuccess) {
}];
}else{
if([applicationcanOpenURL:request.URL]) {
[applicationopenURL:request.URL];
}
}
}else{
NSLog(@"===================false");
}
returnYES;
}else{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[requestsetHTTPMethod:@"GET"];
[requestsetValue:@"xxx.xxx.xx" HTTPHeaderField:@"Referer"];
[self.myWebViewloadRequest:request];
}
returnYES;
}else{
if(![newUrlhasPrefix:@"http"]) {
UIApplication *application = [UIApplication sharedApplication];
if([applicationrespondsToSelector:@selector(openURL:options:completionHandler:)]) {
[applicationopenURL:request.URLoptions:@{}completionHandler:^(BOOLsuccess) {
}];
}else{
if([applicationcanOpenURL:request.URL]) {
[applicationopenURL:request.URL];
}
}
}else{
NSLog(@"===================false");
}
returnYES;
}
return YES;
}
第一次寫文章,有錯誤的地方還請指出來,大家一塊進步啊~
總結(jié)
以上是生活随笔為你收集整理的h5支付不能打开支付宝 ios_IOS H5支付调起微信支付宝客户端问题总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ecology9 后端开发环境搭建_利用
- 下一篇: 你不知道的BAT大数据面试题