• 【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
    (点击一下自动进入网易云听歌识曲界面)

  • 相关阅读:
    rsync免密码远程复制文件
    维护中常用的k8s和docker命令
    小程序插件集成functional-page-navigator真机调试报错
    docker私有仓库操作(搭建、运行、添加、删除)
    国内不fq安装K8S四: 安装过程中遇到的问题和解决方法
    国内不fq安装K8S三: 使用helm安装kubernet-dashboard
    国内不fq安装K8S二: 安装kubernet
    国内不fq安装K8S一: 安装docker
    机器学习笔记8:XGBoost
    机器学习笔记7:矩阵分解Recommender.Matrix.Factorization
  • 原文地址:https://www.cnblogs.com/weicyNo-1/p/9620088.html
Copyright © 2020-2023  润新知