美文网首页
微信/支付宝支付集成总结(含核心代码)

微信/支付宝支付集成总结(含核心代码)

作者: xiaoyouPrince | 来源:发表于2019-10-24 18:43 被阅读0次

Note
公司项目中最近继承支付功能,支付方式为 微信、支付宝,趁此机会整理一下支付宝和微信的流程
移动端,主要是支付结果回调处比较麻烦,实际上整个集成过程比较简单

无论集成哪个支付方式,其业务逻辑都是一样的,大致如图

15718986345195.jpg

根据集成支付的业务逻辑图,开发者需要做的工作就是

  1. 下载支付平台SDK 集成到项目,配置好可用环境
  2. 请求后台商品信息,包装对应下单平台的请求参数 --> 调起三方平台发起付款
  3. 付款完成(或失败)返回App,根据回调查询支付结果 --> 展示给用户

下面分别说一下 支付宝/微信 的一些集成过程

1.支付宝集成

支付宝SDK 在集成到项目的时候可能会遇到一些头文件找不到的情况,这里可以参考我之前写的支付宝代码集成讲解AliPayDemo

支付宝特点:

  • 集成代码复杂,会报一些头文件找不到之类的错误,详看上面Demo
  • 支付完成回调方便,在调起支付宝支付的方法中就有对应的回调Block

主要步骤:

  1. 官网下载SDK,集成到项目
  2. 请求公司商品信息,封装请求信息拉起支付宝客户端支付
  3. 支付完成返回App,在调用支付宝的回调中请求最终支付结果,展示给用户

核心代码展示

#pragma mark - AppDelegate 中监听支付宝支付回调的,处理可能在支付过程中App被kill的情况
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation
{
    if (!url) {
        return NO;
    }
    
    // 支付宝完成之后回到App
    if ([url.host isEqualToString:@"safepay"]) {
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            DLog(@"result = %@",resultDic);
            if([resultDic[@"resultStatus"]isEqualToString:@"9000"]){
                
                DLog(@"AppDeletate: safepay alipay 9000");
            }
            else{
                DLog(@"AppDeletate: safepay alipay not 9000");
            }
        }];
    }
    if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回 authCode
        [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
            DLog(@"result = %@",resultDic);
            if([resultDic[@"resultStatus"]isEqualToString:@"9000"]){
                
                DLog(@"AppDeletate: platformapi alipay 9000");
            }
            else
            {
                DLog(@"AppDeletate: platformapi alipay not 9000");
            }
        }];
    }
}


/// 使用支付宝支付
- (void)payWithAliPay
{
        
    // 1. 封装参数,请求商品订单信息
    XYWeakSelf;
    NSDictionary *params = @{
                              @"id" : @"商品ID"],
                              @"payType" : PayTypeAliPay]
                              };
    NSString *url = URL_for_Visa_WithPath(@"/pay/");
    [NetWorkUikits requestWithUrl:url param:params completionHandle:^(NSDictionary*json) {
        
        // 2.拿到商品信息,封装支付参数,调起支付宝支付
        NSString *appScheme = @"com.scheme.xiaoyouPrince";
        NSString *orderSpec = [NSString stringWithFormat:@"%@",json[@"orderInfo"]];

        [[AlipaySDK defaultService] payOrder:orderSpec fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            DLog(@"%@",resultDic);

            // 3. 支付完成,回调查看支付结果
            [weakSelf checkPayMent:weakSelf.model.orderNumber payTypeKey:@"1"];
            
        }];

    } failureHandle:^(NSError *error) {
        NSLog(@"error = %@",error);
    }];
}

因为支付宝调用支付的方法中有支付结束的回调,可以直接在内部请求支付结果信息并展示即可。

至此,支付宝支付的核心就此结束。

2.微信支付集成

微信支付SDK 下载之后,根据文档集成到App项目中。

微信支付特点:

  • 集成代码简单
  • 支付完成回调麻烦,官方使用代理的方式,对每次的 Request 进行一个 response 回调。支付完成回调的使用场景一般在微信支付跳回 App 时候。

主要步骤:

  1. 官网下载SDK,集成到项目
  2. 请求公司商品信息,封装请求信息拉起微信客户端支付
  3. 支付完成返回App,监听微信支付回调,并在回调中请求后台最终支付结果。

官方的回调使用的是代理模式,这里根据官方方法,列出如下步骤:

  1. 在 APPDelegate 中监听调起 App 方法,在内部设置微信API的代理管理者 WXApiManager
  2. 在 支付页面,设置 WXApiManager 代理,来真正执行该页面的回调业务。
  3. -- 此方法主要是便于微信API的管理和日后功能的扩展,如微信登录,分享等

核心代码展示

#pragma mark - AppDelegate 中注册微信SDK 的代理
// 这里我自己创建了一个工具类 WXApiManager ,来管理微信API相关的代理回调
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation
{
    if (!url) {
        return NO;
    }
    
    // 接收微信回调
    if ([url.scheme isEqualToString:@"你的微信scheme"]) {
        [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
    }
}

#pragma mark - 设置支付页面作为微信支付完成回调的代理,实现代理方法
- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 监听微信支付完成回调
    [[WXApiManager sharedManager] setDelegate:self];
    
    // ... 其他配置
}

/// 使用微信支付
- (void)payWithWeChat
{
    
    // 1.请求商品信息
    NSDictionary *params = @{
                              @"id" : @"你的商品id"],
                              @"payType" : PayTypeWeChat]
                              };
    NSString *url = URL_for_Visa_WithPath(@"/pay/");
    [NetWorkUikits requestWithUrl:url param:params completionHandle:^(NSDictionary*json) {

        // 2. 封装商品信息,调起微信发起付款
        NSString *prepayId = [NSString stringWithFormat:@"%@",json[@"prepayId"]];
        NSString *nonceStr = [NSString stringWithFormat:@"%@",json[@"nonceStr"]];
        uint32_t timeStamp = [json[@"timeStamp"] unsignedIntegerValue];
        NSString *sign = [NSString stringWithFormat:@"%@",json[@"sign"]];

        PayReq *request = [[PayReq alloc] init];
        request.partnerId = @"1548525371";
        request.prepayId= prepayId;
        request.package = @"Sign=WXPay";
        request.nonceStr= nonceStr;
        request.timeStamp= timeStamp;
        request.sign= sign;
        [WXApi sendReq:request];

    } failureHandle:^(NSError *error) {
        NSLog(@"error = %@",error);
    }];
}

#pragma mark - 微信支付回调

// 本页面需要实现微信支付回调,在微信跳回App的时候就会调用此方法
- (void)managerDidRecvPayResponse
{
    // 这里是微信支付完成请求最终支付状态并自行处理
    [self checkPayMent:self.model.orderNumber payTypeKey:@"2"];
}

微信的回调,比较麻烦。这里写的工具类来统一处理微信回调。目前只写入了支付回调。。后面可能会有分享、登录等功能扩展,使用统一工具类也便于日后功能扩展。

工具类 WXApiManager 也统一放到AliPayDemo中了,需要自取吧。

至此,微信支付的核心就此结束。

最后,祝大家玩的愉快~

相关文章

  • 微信/支付宝支付集成总结(含核心代码)

    Note公司项目中最近继承支付功能,支付方式为 微信、支付宝,趁此机会整理一下支付宝和微信的流程移动端,主要是支付...

  • iOS- 收藏 (专题文章分类)

    支付宝/ 微信 / 银联 1. iOS 支付宝详细集成总结2. 支付宝3. iOS-微信支付和支付宝支付4. ...

  • iOS集成支付宝/微信支付遇到的坑...

    最近在集成微信/支付宝支付,下面是集成的大体流程以及遇到的一些坑,特此记录.首先来谈下微信支付(因为集成支付宝支付...

  • 支付宝接入支付集成总结

    支付宝接入支付集成总结 我会详细的记录每一步,以便自己以后查看复习,包括:非代码部分、代码部分 配置 支付宝集成文...

  • 支付

    微信支付集成 前段时间,公司突然要在App中集成支付功能。毫无意外的选择了支付宝、微信 支付宝,这里就不多说了。按...

  • iOS集成支付宝-Swift版

    iOS集成支付宝-Swift版 如果要了解整个支付流程可以阅读文章《手机App集成微信支付&支付宝-iOS&And...

  • 一分钟快速集成微信支付宝支付

    本篇文章主要记录:在项目中集成微信支付和微信支付的快速解决方案 风鼎科技支付插件 里面集成了支付宝支付和微信支付 ...

  • 支付

    支付宝集成:http://caoyudong.com/2016/01/03/iOS接入支付宝/ 微信支付:http...

  • Android集成微信支付功能

    公司项目中需要支付功能,原来已经集成了支付宝,现在集成微信支付;由于我在集成支付宝的时候,已经做了一次支付工具类的...

  • 微信支付,支付宝支付,银联支付——三大支付总结

    介绍 银联支付,支付宝支付,微信支付的三大总结,之前也有写过两篇。 微信支付,支付宝支付,银联支付——三大支付总结...

网友评论

      本文标题:微信/支付宝支付集成总结(含核心代码)

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