2020AliPaySDK-支付宝支付iOS端

最近有了点时间总结一下支付宝支付的问题,以免以后忘了。
我这里写的是把主要业务逻辑都放后台实现的方法,移动端直接调接口就行了,也是官方推荐的方法。
关于微信支付
官方文档
AliPaySDK和友盟阿里云推送UTDID的冲突问题

如果你的项目还集成了阿里云推送,这里推荐使用手动集成SDK,不然会有UTDID冲突的问题。

代码部分

#import "AppDelegate.h"
#import <AlipaySDK/AlipaySDK.h>

// NOTE: iOS9.0以前使用的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) {
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
}

// NOTE: iOS9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    if ([url.host isEqualToString:@"safepay"]) {
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
}

//如果还集成了微信支付的SDK,就写在一起
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options

{
    //微信
    BOOL result = [WXApi handleOpenURL:url delegate:self];
    if (!result) {
        //支付宝
        if ([url.host isEqualToString:@"safepay"]) {
            //跳转支付宝钱包进行支付,处理支付结果
            [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
                NSLog(@"result = %@",resultDic);
                NSLog(@"支付宝客户端支付结果result = %@",resultDic);
                [PHTitleAlertView showWithAlerTitle:resultDic[@"memo"]];
                /*
                9000 订单支付成功
                8000 正在处理中
                4000 订单支付失败
                6001 用户中途取消
                6002 网络连接出错
                */
                if (resultDic && [resultDic objectForKey:@"resultStatus"] && ([[resultDic objectForKey:@"resultStatus"] intValue] == 9000)) {
                    
                    // 发通知带出支付成功结果
                    [[NSNotificationCenter defaultCenter] postNotificationName:@"alpayResult" object:resultDic];
                } else {
                    
                    // 发通知带出支付失败结果
                    [[NSNotificationCenter defaultCenter] postNotificationName:@"alpayResult" object:resultDic];
                }
            }];
        }
    }
    return YES;
}

在发起支付的代码处

1:给后台传支付清单获取订单编号orderNo。
2:用户点击支付宝支付按钮的后,给后台传orderNo获取orderStr。
3:唤起微信支付。
备注:AliPaySDK 付款有两种模式:如果外部存在支付宝钱包,则直接跳转到支付宝钱包付款;不存在的场景下,在 SDK 内部进行 H5 支付。测试人员需要关注这两类测试场景,所以比微信支付少了,判断是否安装微信步骤.

#pragma mark - 调起支付宝支付页面
/// 自己写的唤起支付的方法
/// @param payOrder 后台获取的orderStr
- (void)SendAliPay:(NSString *)payOrder
{
//:Url_Scheme  为 app 在 info.plist 注册的 scheme。我用的微信的:Url_Scheme 测试没毛病
    [[AlipaySDK defaultService] payOrder:payOrder fromScheme:Url_Scheme callback:^(NSDictionary *resultDic) {
            if ([resultDic[@"ResultStatus"] isEqualToString:@"9000"]) {
                /*
                9000 订单支付成功
                8000 正在处理中
                4000 订单支付失败
                6001 用户中途取消
                6002 网络连接出错
                */
                [SVProgressHUD dismiss];
            }else{
                //最终支付结果以后台反馈为准
                NSString *str = resultDic[@"ResultStatus"];
                NSInteger num = str.integerValue;
                switch (num) {
                    case 8000:
                        [PHTitleAlertView showWithAlerTitle:@"正在处理"];
                        break;
                    case 4000:
                        [PHTitleAlertView showWithAlerTitle:@"订单支付失败"];
                        break;
                    case 6001:
                        [PHTitleAlertView showWithAlerTitle:@"用户中途取消"];
                        break;
                    case 6002:
                        [PHTitleAlertView showWithAlerTitle:@"网络连接出错"];
                        break;
                        
                    default:
                        break;
                }
            }
        }];
    
}

至此结束。

推荐阅读更多精彩内容