轉載請註明出處api
今天遇到了一個有意思的問題,就是支付調用支付寶,可是後臺返的連接相似這種(https://qr.alipay.com/bax05299bjty5xvbkjii8018)。這種連接直接打開在APP中是不行的,轉成二維碼能夠用支付寶掃碼支付。微信
那麼如何不生成二維碼,而後掃描在進行支付呢?這相似於支付寶轉帳。至關於程序跳轉到支付寶轉帳。app
附:經過半天的摸索,終於明白轉帳的套路: 1,生成收款用的二維碼。(支付寶上有) 2,用二維碼掃描工具掃描出對應URL。這個連接在 PC 端訪問,會跳到支付寶首頁,可是在 iPhone 上面訪問,這個網頁會作一次支付寶 app 的 scheme 跳轉。這個過程已經能夠接受了,在 app 內 openURL,會先跳到 Safari,而後 Safari 提示你去支付寶付款。eg:HTTPS://QR.ALIPAY.COM/********* 2,在 app 的代碼裏面,只要作一次 openURL,就會跳轉到支付寶裏面,直接打開第一步裏面那個付款對象,而且 title 是掃碼付款,這個現象和直接掃了第一步的二維碼是如出一轍的。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"alipayqr://platformapi/startapp?saId=10000007&clientVersion=3.7.0.0718&qrcode=上邊對應的URL"]]; 3,搞定。
so,咱們就能夠這樣作。工具
// 首先拼接urlStr 前面至關於固定的 只要再後面拼上返回的連接 NSString *url = @"alipayqr://platformapi/startapp?saId=10000007&qrcode=https://qr.alipay.com/bax05299bjty5xvbkjii8018"; // 打開連接 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
可是有個問題就是,咱們不清楚是否支付成功,且沒有支付回調之類的來返回APP,並在APP中處理。url
第二個重點就來了,如何監聽回調呢?個人思路是這樣,在咱們的APP從新回到前臺時判斷,這也須要後臺的配合,咱們獲取不到支付寶的回調,可是後臺根據調取的相關SDK能獲取到。在回到前臺時咱們就能夠經過調用後臺接口來獲取狀態。而後進行相關處理。spa
方法一:在APPdelegate中處理code
- (void)applicationWillEnterForeground:(UIApplication *)application { // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. NSLog(@"APP 回到前臺"); // 判斷是否是須要處理的界面 若是是進行操做 不是不處理 // 由於是支付,因此我寫了個方法 獲取最上層的ViewController,只要是點擊支付的界面,咱們就進行操做。根據不一樣的界面進行不一樣操做,可是比較繁瑣。 }
方法二:在那個界面處理,比較簡單orm
- (void)viewDidLoad { [super viewDidLoad]; // 監聽應用從新得到活躍 並處理 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleApplicationActive:) name:UIApplicationDidBecomeActiveNotification object:nil]; } //處理app後臺回來事件 -(void)handleApplicationActive:(NSNotification *)notification{ NSLog(@"回到app2222"); }
這兩個方法均可以實現這個監聽功能,能夠根據喜愛本身選擇。附上demo。server
最後附上支付寶和其餘開放平臺對應的schemes:對象
微信掃一掃weixin://scanqrcode(跳轉微信掃一掃)支付寶掃一掃alipayqr://platformapi/startapp?saId=10000007(跳轉支付寶掃一掃)支付寶付款alipay://platformapi/startapp?appId=20000056(跳轉支付寶轉帳向商家付款界面)支付寶記帳alipay://platformapi/startapp?appId=20000168(跳轉支付寶記帳界面)支付寶滴滴alipay://platformapi/startapp?appId=20000778支付寶螞蟻森林alipay://platformapi/startapp?appId=60000002支付寶轉帳alipayqr://platformapi/startapp?saId=20000116(跳轉支付寶轉帳界面)支付寶手機充值alipayqr://platformapi/startapp?saId=10000003(跳轉支付寶手機充值頁面)播放網易雲已下載的音樂orpheuswidget://download(跳轉進網易雲並自動播放已經下載的歌曲,需提早設置爲隨機播放,不然每次都是播放你下載的歌曲中的第一首)網易雲音樂聽歌識曲orpheuswidget://recognize(點擊一下自動進入網易雲聽歌識曲界面)