h5支付不能打开支付宝 ios_IOS H5支付调起微信支付宝客户端问题总结
IOS H5支付調起微信支付寶客戶端問題總結
很早之前公司的支付功能,通過H5去支付寶和微信支付,開始使用的是UIwebView來加載h5頁面,當初只有支付寶網頁支付形式,所以沒有考慮到那么多,現在新增微信支付后發現不在info.plist中添加Alipay和weixin的白名單壓根調不起客戶端,折騰了好久,終于算是解決了,但是仍然不理想,下面記錄下這個坎坷的過程。
加載web頁ios下目前提供了兩種框架,UIWebView和WKWebView,經過反復測試,發現在WKWebView下在ios9系統上不能調起微信支付客戶端,因此,暫時放棄WKWebView(雖然很傾向于使用它)。下邊說下使用UIWebView,并不需要添加白名單即可。
創建加載UIWebView就不多說了,這里主要說下打開支付寶和微信客戶端的處理
使用UIWebView調用支付寶支付很簡單,只要在- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType{}協議方法中檢測當前request的url是否可以打開客戶端,即可
對于微信需要檢測當前的request的url.scheme是否是weixin://,如果是的檢測是否設置了Referer,否則先設置? Referer,如果當前scheme不是weixin://,像支付寶一樣拉起客戶端即可,微信支付還需要注意一點,就是支付完成和返回后如果下單url攜帶了回調頁地址的話,微信會自動跳轉到瀏覽器(這個地方出了設置scheme下的域名外如果還有其他方法的歡迎提供意見),同樣返回應用內后也會展示改回調頁,所以這個就需要服務器做下處理,如果需要進行交互,這里也不說了,網上有很多文檔,下面附上代碼
- (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;
}
第一次寫文章,有錯誤的地方還請指出來,大家一塊進步啊~
總結
以上是生活随笔為你收集整理的h5支付不能打开支付宝 ios_IOS H5支付调起微信支付宝客户端问题总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ecology9 后端开发环境搭建_利用
- 下一篇: pdf转word python_Pyt