美文网首页
iOS之iOS9.0后跳支付点击左上角返回APP,兼听不到支付状

iOS之iOS9.0后跳支付点击左上角返回APP,兼听不到支付状

作者: 张小凡123 | 来源:发表于2020-02-27 14:42 被阅读0次

    首先介绍下微信或者支付宝支付成功,提示页面逻辑,此页面部分逻辑参考网上资料。

    1.调起支付页面未开始支付:直接点击左上角返回App按钮,回到带支付页面提示用户去支付,在支付页面点击返回按钮,回到商品详情页面

    2.支付成功:点击左上角返回App按钮,展示支付成功页面,在支付成功页面点击返回按钮,回到商品列表页面

    3.支付成功:直接点击返回商户按钮,展示支付成功页面,在支付成功页面点击返回按钮,回到商品列表页面

    4. 取消支付:回到支付页面

    iOS系统9.0以后,左上角多了一个返回键。在app里调起支付,跳转到支付宝或者微信的时候,左上角有一个返回键,点击这个返回键,支付宝和微信是不给app回调的,因此用户返回app的时候,app无法判断支付结果,针对这个,我做了一个补全。

    支付宝返回键,支付宝的阴影给的真暗啊 微信返回键

    图上红色标记的地方就是那个返回键,现在介绍详细解决办法:

    在点击返回键的时候,支付宝、微信就会退回发起支付的app,返回app必定会走这个方法:

    点击左上角返回App将进入前台

    我在这个方法里发通知告诉调起支付的vc,请求服务器,看服务器那边的支付结果,如果没有支付结果,就给支付结果等待页面,一般来说支付宝和微信回调结果会很快的。

           但是仅仅这样做事不够的,因为app压后台,再次打开的情况很多,比如分享返回也走这个接口,我怎么会知道是不是支付调起的返回呢,那么我就在发起支付的时候,做了一个标记,这里我用了系统单例NSUserDefaults,这样我在返回app的时候,就知道是不是支付返回的了。

    调起微信支付

     做完这些感觉是完成了,其实还有个重点问题,就是点击支付宝或微信给的取消或者完成按钮的时候,app返回不仅会走WillEnterForeground方法,而且会走下图的方法,要命的是,下图的方法是后进入的,这样app就会返回两次支付结果。

    支付回调方法

    为了解决以上问题,在AppDelegate里定义个bool值,我就用了GCD,在进入WillEnterForeground方法里的时候,让里面的方法等0.5秒执行,如果是有回调的返回,就利用bool值,变为ture,这是下面判断这个bool是ture,WillEnterForeground方法里的判断就不进,如果是没有回调的返回,这个bool值是不会改变的,0.5秒后继续执行WillEnterForeground方法里的判断。

    支付回调方法,改变bool值 这里有初始bool值,等0.5秒看看bool值是否改变,根据bool值判断是否执行下面方法

    注释:点击微信支付成功返回商户按钮,程序会先走applicationWillEnterForeground,中间会跳回到微信自己的onResp(结果回调方法)。为了避免在WillEnterForeground重复验证订单,可以在处理微信结果的方法中将NSUserDefaults存的订单信息和支付返回的数据清空,或者设置BOOL值来区分。

    微信支付结果回调方法

    以上是本人结合网上资料及自己总结,如有问题,欢迎大家指正,补充,谢谢!

    相关文章

      网友评论

          本文标题:iOS之iOS9.0后跳支付点击左上角返回APP,兼听不到支付状

          本文链接:https://www.haomeiwen.com/subject/pbdthhtx.html