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

转载请注明出处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");
}

 这两个方法均可以实现这个监听功能,能够根据喜爱本身选择。附上demoserver

最后附上支付宝和其余开放平台对应的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(点击一下自动进入网易云听歌识曲界面)

相关文章
相关标签/搜索