iOS 手機網站支付轉Native支付(使用WKUIDelegate協議獲取url)
為了節約開發成本,很多Native-H5混合App採用手機網站支付的方式去實現支付模組。但手機網站支付的網路依賴比較嚴重,也通常需要經過更多的驗證,這種種原因導致手機網站支付的成功率比Native支付低,對商戶的利益造成影響。
官方使用方法,UIWebViewDelegate協議
下面我就給大家介紹一下使用WKUIDelegate協議怎麼解決手機網站支付轉Native支付:
一:sdk匯入流程請檢視
二:使用說明:
1.在需要呼叫AlipaySDK的檔案中,增加標頭檔案引用。
#import <AlipaySDK/AlipaySDK.h>
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
@interface ViewController ()<WKNavigationDelegate,WKUIDelegate>
@property (weak, nonatomic) WKWebView *webView;
//進度條
@property (weak, nonatomic) CALayer *progresslayer;
@end
//初始化
- (void)stopRunning{
WKWebView *webView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 64, SCREEN_WIDTH, SCREEN_HEIGHT-64)];
[self.view addSubview:webView];
self.webView = webView;
webView.navigationDelegate = self;
webView.UIDelegate = self;
//新增屬性監聽
[webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
//進度條
UIView *progress = [[UIView alloc]initWithFrame:CGRectMake(0, 64, CGRectGetWidth(self.view.frame), 3)];
progress.backgroundColor = [UIColor clearColor];
[self.view addSubview:progress];
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(0, 0, 0, 3);
layer.backgroundColor = [UIColor blueColor].CGColor;
[progress.layer addSublayer:layer];
self.progresslayer = layer;
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:_customLabel.text]]];
}
2.呼叫介面
[[AlipaySDK defaultService]fetchOrderInfoFromH5PayUrl:url]
3.實現WKUIDelegate協議,攔截H5的URL
如果返回的resultCode為9000,接入方可以提示使用者支付成功;返回結果不是9000的情況,無需做任何處理。如果returnUrl不為空,建議接入方跳轉到該returnUrl。
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
decisionHandler(WKNavigationActionPolicyAllow);//允許跳轉
NSLog(@"%@",navigationAction.request.URL.absoluteString);
if ([navigationAction.request.URL.absoluteString hasPrefix:@"alipay://alipayclient/"]) {
decisionHandler(WKNavigationActionPolicyCancel);
if ([[UIApplication sharedApplication] canOpenURL:navigationAction.request.URL]) {
[[UIApplication sharedApplication] openURL:navigationAction.request.URL options:@{UIApplicationOpenURLOptionUniversalLinksOnly: @NO} completionHandler:^(BOOL success) {
NSString *orderInfo = [[AlipaySDK defaultService]fetchOrderInfoFromH5PayUrl:navigationAction.request.URL.absoluteString];
NSLog(@"orderInfo----%@",orderInfo);
if (orderInfo.length > 0) {
// 呼叫支付介面進行支付
[[AlipaySDK defaultService]payUrlOrder:orderInfo fromScheme:@"alisdkdemo" callback:^(NSDictionary* result) {
// 處理返回結果
NSString* resultCode = result[@"resultCode"];
//建議操作: 根據resultCode做處理
NSLog(@"%@",resultCode);
// returnUrl 代表 第三方App需要跳轉的成功頁URL
NSString* returnUrl = result[@"returnUrl"];
NSLog(@"第三方url----%@",returnUrl);
//建議操作: 開啟returnUrl
}];
}
}];
}
} else {
decisionHandler(WKNavigationActionPolicyAllow);
}
}
4.支付寶客戶端返回url處理方法,在AppDelegate.m檔案中,增加標頭檔案引用
#import <AlipaySDK/AlipaySDK.h>
在@implementation AppDelegate中增加如下程式碼:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
//如果極簡開發包不可用,會跳轉支付寶錢包進行支付,需要將支付寶錢包的支付結果回傳給開發包
if ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由於在跳轉支付寶客戶端支付的過程中,商戶app在後臺很可能被系統kill了,所以pay介面的callback就會失效,請商戶對standbyCallback返回的回撥結果進行處理,就是在這個方法裡面處理跟callback一樣的邏輯】
NSLog(@"result = %@",resultDic);
}];
}
if ([url.host isEqualToString:@"platformapi"]){//支付寶錢包快登授權返回authCode
[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由於在跳轉支付寶客戶端支付的過程中,商戶app在後臺很可能被系統kill了,所以pay介面的callback就會失效,請商戶對standbyCallback返回的回撥結果進行處理,就是在這個方法裡面處理跟callback一樣的邏輯】
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
希望可以幫助大家
如果哪裡有什麼不對或者不足的地方,還望讀者多多提意見或建議
iOS技術交流群:668562416
相關文章
- java對接支付寶支付(手機網站支付)Java網站
- Laravel 整合 EasyAlipay 實現支付寶手機網站 Wap 支付Laravel網站
- 支付寶“手機網站支付”開發的相關文件和工具網站
- 支付寶手機網站支付開通技巧,解決簽約條件不足!網站
- 網站如何整合支付寶支付介面網站
- 手機APP如何接入支付寶支付APP
- iOS使用Stripe整合支付寶Alipay支付iOS
- mui 判斷手機客戶端是否安裝微信或支付寶或淘寶等,mui 獲取微信、支付寶支付通道UI客戶端
- 獲取支付連結轉化為二維碼
- web端網站接入支付寶支付過程Web網站
- 在 Firefox 上使用 Org 協議捕獲 URLFirefox協議
- iOS 獲取手機外網和內網IP地址iOS內網
- iOS URL Scheme 劫持-在未越獄的 iPhone 6上盜取支付寶和微信支付的帳號密碼iOSSchemeiPhone密碼
- ios 手機驗證碼獲取iOS
- iOS支付寶支付主要程式碼iOS
- 實現網站由http協議轉為https協議網站HTTP協議
- 獲取手機外網IP
- iOS 之獲取APP與手機 資訊iOSAPP
- PayPal支付整合到自己Web網站Web網站
- 外貿網站客戶支付被跳轉到其他網站怎麼辦網站
- 區塊鏈支付平臺開發,幣支付網站搭建,承兌商支付系統開發區塊鏈網站
- 支付寶回應支付漏洞:僅在使用者自己手機上才能找回密碼密碼
- iOS WKWebView H5微信支付跳轉iOSWebViewH5
- 一個PHP檔案搞定支付寶系列之電腦網站支付PHP網站
- iOS 獲取手機型號,XR,XS,MAXiOS
- 微信開放平臺手機APP支付APP
- Intuit:手機支付業務發展趨勢UI
- 蘋果Apple Pay支付或實施瑞波Interledger協議蘋果APP協議
- iOS各種支付大全iOS
- iOS 獲取裝置uuid,公網ip,手機ip等資訊iOSUI
- 玩轉 iOS 開發:整合 AliPay – 支付寶iOS
- 玩轉 iOS 開發:整合 AliPay - 支付寶iOS
- 玩轉iOS開發:整合 WeChat SDK - 支付篇iOS
- 手機沒網了,卻還能支付,這是什麼原理?
- 支付寶小程式(後臺)---獲取授權和使用者資訊
- 小米手環3繫結支付寶免密支付教程 小米手環3支援支付寶免密支付嗎?
- 使用jquery獲取url及url引數的方法jQuery
- 【支付】Cocos2d-x IOS內購(IAP支付)iOS