今天遇到了一个有意思的问题,就是支付调用支付宝,但是后台返的链接类似这种(https://qr.alipay.com/bax05299bjty5xvbkjii8018)。这种链接直接打开在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中处理。
第二个重点就来了,如何监听回调呢?我的思路是这样,在我们的APP重新回到前台时判断,这也需要后台的配合,我们获取不到支付宝的回调,但是后台根据调取的相关SDK能获取到。在回到前台时我们就可以通过调用后台接口来获取状态。然后进行相关处理。
方法一:在APPdelegate中处理
- (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,只要是点击支付的界面,我们就进行操作。根据不同的界面进行不同操作,但是比较繁琐。 }
方法二:在那个界面处理,比较简单
- (void)viewDidLoad { [super viewDidLoad]; // 监听应用重新获得活跃 并处理 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleApplicationActive:) name:UIApplicationDidBecomeActiveNotification object:nil]; } //处理app后台回来事件 -(void)handleApplicationActive:(NSNotification *)notification{ NSLog(@"回到app2222"); }
这两个方法都可以实现这个监听功能,可以根据喜好自己选择。附上demo。
最后附上支付宝和其他开放平台对应的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
(点击一下自动进入网易云听歌识曲界面)