美文网首页
2020AliPaySDK-支付宝支付iOS端

2020AliPaySDK-支付宝支付iOS端

作者: 的的可可 | 来源:发表于2020-07-10 15:37 被阅读0次

    最近有了点时间总结一下支付宝支付的问题,以免以后忘了。
    我这里写的是把主要业务逻辑都放后台实现的方法,移动端直接调接口就行了,也是官方推荐的方法。
    关于微信支付
    官方文档
    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;
                    }
                }
            }];
        
    }
    

    至此结束。

    相关文章

      网友评论

          本文标题:2020AliPaySDK-支付宝支付iOS端

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