IOS H5支付調(diào)起微信支付寶客戶端問題總結(jié)

????????????????????????????IOS H5支付調(diào)起微信支付寶客戶端問題總結(jié)



????很早之前公司的支付功能,通過H5去支付寶和微信支付,開始使用的是UIwebView來加載h5頁面,當初只有支付寶網(wǎng)頁支付形式,所以沒有考慮到那么多,現(xiàn)在新增微信支付后發(fā)現(xiàn)不在info.plist中添加Alipay和weixin的白名單壓根調(diào)不起客戶端,折騰了好久,終于算是解決了,但是仍然不理想,下面記錄下這個坎坷的過程。

????加載web頁ios下目前提供了兩種框架,UIWebView和WKWebView,經(jīng)過反復測試,發(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é)議方法中檢測當前request的url是否可以打開客戶端,即可

????對于微信需要檢測當前的request的url.scheme是否是weixin://,如果是的檢測是否設置了Referer,否則先設置? Referer,如果當前scheme不是weixin://,像支付寶一樣拉起客戶端即可,微信支付還需要注意一點,就是支付完成和返回后如果下單url攜帶了回調(diào)頁地址的話,微信會自動跳轉(zhuǎn)到瀏覽器(這個地方出了設置scheme下的域名外如果還有其他方法的歡迎提供意見),同樣返回應用內(nèi)后也會展示改回調(diào)頁,所以這個就需要服務器做下處理,如果需要進行交互,這里也不說了,網(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;

}


? ??第一次寫文章,有錯誤的地方還請指出來,大家一塊進步啊~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。