iOS集成说明

1.下载SDK包, 并解压,文件目录如下:

    .
    |____S4P_SDK                      // SDK目录
    | |____ScanForPaySDK.framework    // ScanForPay Framework
    | |____Channels                      // 依赖的支付宝SDK
    |____ScanForPay_Demo              // Demo工程

2.将SDK目录拖入工程里

3.添加依赖,Target --> Build Phases --> Link Binary With Libraries

4.如果App需要访问http地址,需要在Info.plist添加如下代码,或者根据需求添加 NSExceptionDomains:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

5.添加URL Scheme,在Target --> Info --> URL Types里面添加自己的URL Scheme

6.调用接口,发起支付

1)先在要调用的文件里引用头文件:

    #import <ScanForPaySDK/ScanForPayTask.h>

2)发起支付,需要调用ScanForPayTask里的pay方法,该方法接受支付请求串,需要服务端进行签名或者组装。其格式可见iOS接口说明

在没有安装支付宝或者调起支付宝失败时,将进入wap支付,支付完成或取消后,结果会在pay方法的回调里返回。

正常拉起支付宝App支付时,回调会进入App的OpenUrl回调。

    // 先获取ScanForPayTask的实例,ScanForPayTask为单例模式
    ScanForPayTask* task = [ScanForPayTask shareInstance];

    // 组建订单信息,签名等信息一定要放到服务端做,这里只是做为示例,不可以在客户端生成签名。
    // 请求的格式可以见API说明文档,或者参考Demo里的代码
    NSString *request = [self buildRequest:@"Alipay"
                                orderTitle:@"test"
                                     price:0.01f];
    // 调用支付接口,拉起支付
    [task pay:request                       // 请求串
    appScheme:@"scanforpaySdkDemo"          // app注册的URL Scheme, 从钱包返回app时使用
     callback:^(NSDictionary *dictResult){
         // NOTE: 该回调只有当支付宝未安装或无法调起时,调用了wap方式时才会进入。
        // 拿到结果后需要判断是否正确, 1成功,其他为失败
         NSLog(@"reslut test= %@",dictResult);
         if([dictResult[@"code"] intValue] == 1 && [dictResult[@"data"] [@"status"] intValue] == 1){
             // NOTE: 请求成功,且支付状态为成功时, 应该将params里的参数给app服务端校验签名,然后才认为成功,并进行成功的处理
             NSLog(@"pay success, params =%@", dictResult[@"data"][@"params"]);
             // 去服务端校验签名
             // 校验成功,进行成功展示
         } else{
             if([dictResult[@"code"] intValue] < 0){
                 // 支付渠道返回的错误都转为了负数,通常为用户取消支付等,可以不进行处理
             }else{
                 // 失败的展示,可以根据情况进行展示。
             }
         }
    }];

3)在AppDelegate.h中注册openURL回调, 并调用ScanForPayTask里的handleOpenURL来取得订单信息,用于给服务端进行交易的交易和订单的更新。

    // NOTE: 9.0以后使用新API接口
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
    {
        // 将支付宝返回的结果url发送给ScanForPay,ScanForPay处理后会将相关的订单信息及结果返回给商户
        return [[ScanForPayTask shareInstance] handleOpenURL:url callback:^(NSDictionary *dictResult){
            // NOTE: 拿到结果后,需要把订单内容发给APP的服务端,校验签名或者查询结果以确认支付结果
            NSLog(@"reslut test= %@",dictResult);
            if([dictResult[@"code"] intValue] == 1 && [dictResult[@"data"] [@"status"] intValue] == 1){
                // NOTE: 请求成功,且支付状态为成功时, 应该将params里的参数给app服务端校验签名,然后才认为成功,并进行成功的处理
                NSLog(@"pay success, params =%@", dictResult[@"data"][@"params"]);
                // 去服务端校验签名
                // 校验成功,进行成功展示
            } else{
                if([dictResult[@"code"] intValue] < 0){
                    // 支付渠道返回的错误都转为了负数,通常为用户取消支付等,可以不进行处理
                }else{
                    // 失败的展示,可以根据情况进行展示。
                }
                NSLog(@"pay failed, code =%@, msg=%@", dictResult[@"code"], dictResult[@"msg"]);
            }

        }];
    }

results matching ""

    No results matching ""