iOS 微信和支付宝关于回调处理

在支付这一块,发现讲支付集成的比较多,但是关于支付后回调处理的不多见,(当时因为这个问题懵逼了好久)就自己总结一下,

1.支付宝回调

  支付宝的回调想对来说比较简单一些,因为支付宝的回调就在调起支付宝的那个方法中的block中,

    NSString *orderString = nil;
    if (signedString != nil) {orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderSpec, signedString, @"RSA"];

        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {

            NSString * strTitle = [NSString stringWithFormat:@"支付结果"];
            NSString *strMsg;

            //【callback处理支付结果】
            if ([resultDic[@"resultStatus"] isEqualToString:@"9000"]) {

                strMsg = @"恭喜您,支付成功!";

            }else if([resultDic[@"resultStatus"] isEqualToString:@"6001"])
            {
                strMsg = @"已取消支付!";

            }else{
                strMsg = @"支付失败!";

            }
               UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

            [alert show];
        }];
    }

上面我只对,成功,取消,失败 三种状态进行判断,想仔细了解可以查看官方文档。

2.微信支付的回调

  首先,支付回调API的方法,这个方法中完全是按照官方文档写的,自己基本上不需要操作

- (BOOL)application:(UIApplication *)application  openURL:(NSURL *)url  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{

    //如果极简开发包不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给开发包
    if ([url.host isEqualToString:@"safepay"]) {
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
        }[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
            //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
        }];
    }
    if ([sourceApplication isEqualToString:@"com.tencent.xin"]) {
        //微信支付回调
        return [WXApi handleOpenURL:url delegate:self];
    }

    //跳转处理
    BOOL result = [UMSocialSnsService handleOpenURL:url];
    if (result == FALSE) {
        //调用其他SDK,例如支付宝SDK等
    }
    return result;

}

最后微信会调用下面这个方法,我是在这个方法中做的操作,由于这个方法是在AppDelegate中,如果在这里跳转到自己指定的页面,有些困难,

于是就在这个方法中发通知到调起支付的页面,再进行页面跳转操作。

//回调方法
-(void) onResp:(BaseResp*)resp
{
    NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
    NSString *strTitle;

    if([resp isKindOfClass:[SendMessageToWXResp class]])
    {
        strTitle = @"发送媒体消息结果";
    }

    if([resp isKindOfClass:[PayResp class]]){
        //支付返回结果,实际支付结果需要去微信服务器端查询
        strTitle = [NSString stringWithFormat:@"支付结果"];

        switch (resp.errCode) {
            case WXSuccess:{
                strMsg = @"恭喜您,支付成功!";

                [MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"success"}];

                break;
            }
            case WXErrCodeUserCancel:{
                strMsg = @"已取消支付!";
                [MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"cancle"}];
                break;
            }
            default:{

                strMsg = [NSString stringWithFormat:@"支付失败 !"];
                [MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"cancle"}];
                break;
            }
        }

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

        [alert show];
    }

}

由于我们的取消和失败,2种状态的处理结果都是一样的,所以就用了相同的通知。

由于在调起支付页面,在调起前就已经注册了通知,现在支付完后,就可以收到支付状态的通知了。下面就很简单了吧

最后在说一下,

  由于我们的付款性质不一样,所以就遇到了同样的支付成功状态,由于不同的支付类型要跳转的页面也是不同的,这就要求在AppDelegate中的那个处理方法中识别出,不同的支付类型,(如充值,购物等)但是这个方法是微信api回调的方法,它只返回成功,取消,失败等状态。那就只能是支付前做个识别标示,但是由于支付跳到api了,脱离了应用,这个识别标示又无法直接传过来。我想的方法就是保存一个支付标示:

[[NSUserDefaults standardUserDefaults] setObject:@"CHONGZHI" forKey:@"PAYTYPE"];

在每个类型的支付调起方法中,保存一下不同的key,然后再那个

-(void) onResp:(BaseResp*)resp

就总结到这吧!希望能帮到一些还在迷茫的新手,如有什么错误的地方请指出,谢谢!

时间: 2024-10-24 19:24:08

iOS 微信和支付宝关于回调处理的相关文章

iOS 支付(含支付宝、银联、微信)

资料 支付宝 //文档idk都包含了安卓.iOS版 银 联 银联官网资料 Demo Demo给了一个订单号,做测试使用,若出现支付失败什么的,可能是已经被别人给支付了,或者是服务器订单过期了 ~ 一.支付宝 1.1 请阅读支付宝文档和Demo 1.2 导入对应的库 将支付宝Demo中得这些东西全拷贝过来 localhost:alipay mac$ ls APAuthV2Info.h        Order.h            libssl.a APAuthV2Info.m        

iOS支付宝SDK回调那坑

支付宝钱包支付接口开发包2.0标准版(iOS 2.2.1) ,回调不出来,demo给出的方法是: - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { if ([url.host isEqualToString:@"safepay"]) { [[Ali

支付宝支付与微信支付服务端回调notify_url数据的区别

这两天优化了一下支付宝支付和微信支付订单回调的问题,之前我们的订单都是用手动回调给服务器,现在改成支付宝和微信原生的异步回调,结果并没有像我们想象的那么简单,支付宝是很顺利的解决回调,用一般的方式接收即可,但是微信接收时用普通的接收方式是不行的必须用另一种方式,如下且看: 支付宝和微信的回调地址 notifyUrl = RequestUrl.BASE_URL+"order/order_payment"+"?order_code="+orderCode; 服务器端是P

iOS不用官方SDK实现微信和支付宝支付XHPayKit

作者:朱晓辉Allen 链接:https://juejin.im/post/5a90dd3a6fb9a0634912b755 前言 前段时间由于项目需求,移除了项目中的微信支付SDK和支付宝支付SDK,这种情况下需要自己搞定支付,第一时间考虑到的是使用openshare,但是当下载openshare下来后发现,openshare的支付接口,并不能直接替换官方SDK支付接口, 官方SDK的实现逻辑是后台订单签名完成后,客服端传签名信息及参数给支付SDK,支付SDK生成协议url,然后拉起第三方支付

当微信和支付宝遇上友盟

前言: 支付,分享,第三方登录,即时通讯这些在现在的APP当中慢慢的变成了最基本,当这些技术已经慢慢的融入到人们的生活中的时候,这些也就成了APP最基本的需求,以前这部分的内容也是经常做,但就是没有好好的总结过,首先说说这几个点,支付的话我们就说说支付宝和微信吧,把我看到的收藏的好点的文章也全都分享出来,第三方登录和分享我用的一直都是友盟的,不为别的,只是友盟的统计和第三方登录分享这些都是一套SDK,就直接用友盟,友盟和微信的回调这里也有一些我们注意的,下面也会和大家说. 微信和支付宝: 其实这

小程序多端差异调研报告(微信,支付宝,头条,QQ)

已经使用uni-app开发并发布了一个跨端小程序啦,嘻嘻嘻! ?? 须知 这是一份详细的小程序各特性各端真机调研对比报告 测试机:iPhone7 plus IOS 12.4.1 客户端:微信7.0.5,支付宝10.1.72,今日头条7.4.0,抖音8.1.0,QQ8.1.5.461 ??? 百度小程序只有商户才能注册,个人开发者无法注册,没有appid功能受限(如百度开发者工具无法使用预览功能导致无法真机测试),所以暂时不测百度小程序 用户信息授权 授权方式: [头条]用户信息授权方式还停留在微

iOS 微信支付流程详解

背景 自微信支付.支付宝支付入世以来,移动端的支付日渐火热.虚拟货币有取代实体货币的趋向(这句纯属扯淡,不用管),支付在app开发中是一项基本的功能,有必要去掌握.从难易程度上讲,不管是微信支付还是支付宝支付都是非常简单的,因为第三方的支付文档非常详细,而且他们内部的安全性也非常高.作为使用这些支付策略的我们,只需要掌握流程,能够实现正常支付的功能即可.为什么要写下这篇博文,原因有二.其一,微信支付流程中有坑,其二,以后忘记了可以拿出来看看. 配置 1.微信支付需要两个账号,财付通和微信开发者,

微信和支付宝实现

支付基本上是很多产品都必须的一个模块,大家最熟悉的应该就是微信和支付宝支付了,不过更多的可能还是停留在直接sdk的调用上,甚至和业务系统高度耦合,网上也存在各种解决方案,但大多形式各异,东拼西凑而成.所以这里我介绍下OSS.PayCenter开源跨平台支付组件 及其框架设计.并对常用支付模式进行一个全面介绍,方便大家开发以及跨平台使用.这篇文章主要围绕以下几个模块: 1. 微信和支付宝对比 2. 支付模式介绍 3. OSS.PayCenter框架设计 4. 调用示例 5. 注意事项 一. 微信和

iOS开发之支付宝集成

项目中要用到支付功能,需要支付宝,微信,银联三大支付,所以打算总结一下,写两篇文章,方便以后的查阅, 大家在做的时候也能稍微参考下,用到的地方避免再次被坑.这是第二篇支付宝集成,第一篇银联支付在这里.本来要用那个ping++的神器,可以集成各种支付手段,异常的方便,但是考虑到安全性问题的话,支付的渠道还是不让第三方参与的好,不然会不安全,于是就苦逼地慢慢的一个一个集成了....这里就代理支付宝的集成过程: 刚开始以为支付宝集成还是比较简单的,看了几个文章,网上的各位大神也是各种秀操作,说集成很简