【iOS】程序内跳转到支付宝转账(非SDK实现支付)及相关监听

转载请注明出处

今天遇到了一个有意思的问题,就是支付调用支付宝,但是后台返的链接类似这种(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
(点击一下自动进入网易云听歌识曲界面)

原文地址:https://www.cnblogs.com/weicyNo-1/p/9620088.html