iOS微信/支付宝支付集成

2,316 阅读2分钟

微信支付

APP支付时序图商户系统和微信支付系统主要交互说明:

步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。

步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。

步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。注意:package的值格式为Sign=WXPay

步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明

步骤5:商户后台接收支付通知。api参见【支付结果通知API

步骤6:商户后台查询支付结果。,api参见【查询订单API】(查单实现可参考:支付回调和查单实现指引

微信官方文档参考:

1.developers.weixin.qq.com/doc/oplatfo…

2.pay.weixin.qq.com/wiki/doc/ap…

Universal Link链接生成:iOS 唤起APP之Universal Link(通用链接)

当前使用的cocopods集成SDK1.8.7版本,现在开始代码阶段吧.

一 AppDelegate相关代码

//微信注册
[WXApi registerApp:WXAppID universalLink:WXUniversalLinks];  


//回调代理设置

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
    if ([[url scheme] isEqualToString:WXAppID]) {
        return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
    }
    return YES;
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    if ([[url scheme] isEqualToString:WXAppID]) {
        return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
    }
    return YES;
}

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
    return [WXApi handleOpenUniversalLink:userActivity delegate:[WXApiManager sharedManager]];
}

二 WXApiManager响应支付结果管理,与官方demo类似加上你的逻辑处理

+(instancetype)sharedManager {
    static dispatch_once_t onceToken;
    static WXApiManager *instance;
    dispatch_once(&onceToken, ^{
        instance = [[WXApiManager alloc] init];
    });
    return instance;
}

#pragma mark - WXApiDelegate
- (void)onResp:(BaseResp *)resp {
    if([resp isKindOfClass:[PayResp class]]){
        //支付返回结果,实际支付结果需要去微信服务器端查询
        PayResp *response=(PayResp*)resp;
        [[NSNotificationCenter defaultCenter] postNotificationName:@"wechatPayStateChange" object:nil userInfo:@{@"response": response}];
        switch(response.errCode){
            case WXSuccess:
                //服务器端查询支付通知或查询API返回的结果再提示成功
                HSLog(@"支付成功");
                break;
            default:
                HSLog(@"支付失败,retcode=%d",response.errCode);
                break;
        }
        
    }else {
    }
}

- (void)onReq:(BaseReq *)req {
    HSLog(@"onReq");
}

三 支付页响应结果

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(wechatPayStateChange:) name:@"wechatPayStateChange" object:nil];

-(void)wechatPayStateChange:(NSNotification*)notification {
    PayResp *response= [notification.userInfo objectForKey:@"response"];
    switch(response.errCode){
        case WXSuccess:{
            [MBProgressHUD showSuccess:@"支付成功"];
            break;
            }
        case WXErrCodeUserCancel:
            [MBProgressHUD showError:@"支付取消"];
            break;
        default:
            [MBProgressHUD showError:@"支付失败"];
            break;
    }
}

支付宝支付

支付宝支付集成相对简单,直接看这篇官方文档就够了

opendocs.alipay.com/open/204/10…