SPSDKPay 1.1.2

SPSDKPay 1.1.2

limingzou维护。



SPSDKPay 1.1.2

  • 作者
  • Afon Weng

Supay iOS SDK

目录

简介

lib 文件夹中是 iOS SDK 文件,
example 文件夹中是一个简单的接入示例,该示例仅供参考。

当前版本,不需要微信的 SDK,可以正常调用微信支付

版本要求

iOS SDK 要求 iOS 7.0 及以上版本

接入方法

使用 CocoaPods

  1. Podfile 中添加

    pod 'SPSDKPay', '~> 1.1.2'
    

    默认包含支付宝和微信。你也可以选择其他渠道。
    目前支持的模块有:

    • Alipay(支付宝移动支付)
    • CBAlipay(支付宝移动支付 - 海外支付)
    • AlipayNoUTDID(支付宝移动支付,独立的 UTDID.framework
    • Wx(微信 App 支付)
    • UI(Supay++ SDK UI 版)
    • 更新中...

    例如:

    pod 'SPSDKPay/Alipay', '~> 1.1.2'
    pod 'SPSDKPay/UnionPay', '~> 1.1.2'
    
    

    Super++ SDK UI 版

    pod 'SPSDKPay/UI', '~> 1.1.2'
    
  2. 运行 pod install

  3. 现在开始使用 .xcworkspace 打开项目,而不是 .xcodeproj

  4. 添加 URL Schemes:在 Xcode 中,选择你的工程设置项,选中 "TARGETS" 一栏,在 "Info" 标签栏的 "URL Types" 添加 "URL Schemes",如果使用微信,填入所注册的微信应用程序 ID,如果不使用微信,则自定义,允许英文字母和数字,首字母必须是英文字母,建议名称复杂一些,尽量避免与其他程序冲突。

  5. 1.0.1 及以上版本,可开启 Debug 模式,打印 log 以方便调试。开启方法:[SPSDKPay setDebugMode:YES];

手动导入

  1. 获取 SDK
    下载 SDK,其中包含了 lib 文件夹和 example 文件夹。lib 文件夹中包含 SDK 的文件。
  2. 依赖 Frameworks:必须:
    CFNetwork.framework
    SystemConfiguration.framework
    Security.framework
    QuartzCore.framework
    CoreTelephony.framework
    libc++.tbd
    libz.tbd
    libsqlite3.0.tbd
    libstdc++.tbd
    CoreMotion.framework
    CoreLocation.framework
    
    
    
  3. 如果不需要某些渠道,删除 lib/Channels 下的相应目录即可。
  4. 添加 URL Schemes:在 Xcode 中,选择你的工程设置项,选中 "TARGETS" 一栏,在 "Info" 标签栏的 "URL Types" 添加 "URL Schemes",如果使用微信,填入所注册的微信应用程序 ID,如果不使用微信,则自定义,允许英文字母和数字,首字母必须是英文字母,建议名称复杂一些,尽量避免与其他程序冲突。
  5. 添加 Other Linker Flags:在 Build Settings 中搜索 Other Linker Flags,添加 -ObjC
  6. 1.0.1 及以上版本,可开启 Debug 模式,打印 log 以方便调试。开启方法:[SPSDKPay setDebugMode:YES];

接入方法

使用 Super++ 标准版 SDK

#import <SPSDKPay.h>
[SPSDKPay createPayment:charge
           viewController:viewController
             appURLScheme:kUrlScheme
           withCompletion:^(NSString *result, PingppError *error) {
               if ([result isEqualToString:@"success"]) {
                   // 支付成功
               } else {
                   // 支付失败或取消
                   NSLog(@"Error: code=%lu msg=%@", error.code, [error getMsg]);
               }
}];

使用 Supay++ UI版 SDK

#import <SPSDKPay+UI.h>

带渠道选择页面

/**
 *  设置需要显示的渠道按钮(有序)
 *  @param  channels  渠道数组,与 API 的 channel 字段对应。 例: @[@"wx",@"alipay", @"upacp", @"bfb_wap"]
 */
[SPSDKPay enableChannels:channels];
 
//调起支付页面
[SPSDKPay payWithOrderNo:orderNo // 订单号
                    amount:100 // 金额
                    params:nil // 自定义参数,请求 chargeURL 时,会放在 custom_params 字段
                 chargeURL:chargeURL // 壹收款会向该地址发送请求,该地址需要返回 charge 的 JSON 字符串
              appURLScheme:appURLScheme // Info.plist 中填写的 URL Scheme,支付宝渠道和测试模式需要
            viewController:self // 当前的 ViewController
         completionHandler:^(NSString * _Nonnull result, PingppURLResponse * _Nullable response, NSError * _Nullable error) {
 
        // 根据result判断支付是否成功
        NSLog(@"result=%@", result);
        if (response && response.responseString) {
            NSLog(@"response.responseString=%@", response.responseString);
        }
        if (error) {
            NSLog(@"completion error code:%lu domain:%@ userInfo:%@", error.code, error.domain, error.userInfo);
        }
}];

不带渠道选择页面

[SPSDKPay createPay:string
       viewController:self
         appURLScheme:kUrlScheme
       withCompletion:^(NSString *result, PingppError *error) {
        // 根据result判断支付是否成功
        NSLog(@"result=%@", result);
        if (response && response.responseString) {
            NSLog(@"response.responseString=%@", response.responseString);
        }
        if (error) {
            NSLog(@"completion error code:%lu domain:%@ userInfo:%@", error.code, error.domain, error.userInfo);
        }
} ];

接收并处理交易结果

请实现 UIApplicationDelegate 的 - application:openURL:xxxx- 方法
iOS 8 及以下
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {

    BOOL canHandleURL = [SPSDKPay handleOpenURL:url withCompletion:nil];

    return canHandleURL;
}
iOS 9 及以上
- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary *)options {

    BOOL canHandleURL = [SPSDKPay handleOpenURL:url withCompletion:nil];

    return canHandleURL;
}

额外配置

  1. iOS 9 以上版本如果需要使用支付宝和微信渠道,需要在 Info.plist 添加以下代码:

    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>weixin</string>
        <string>wechat</string>
        <string>alipay</string>
        <string>alipays</string>
        <string>mqq</string>
        <string>uppaysdk</string>
        <string>uppaywallet</string>
        <string>uppayx1</string>
        <string>uppayx2</string>
        <string>uppayx3</string>
    </array>
    
  2. iOS 9 限制了 http 协议的访问,如果 App 需要访问 http://,需要在 Info.plist 添加如下代码:

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    
  3. 如果编译失败,遇到错误信息为:

    XXXXXXX does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target.
    

    请到 Xcode 项目的 Build Settings 标签页搜索 bitcode,将 Enable Bitcode 设置为 NO

注意事项

* 请勿直接使用客户端支付结果作为最终判定订单状态的依据,支付状态以服务端为准!!!在收到客户端同步返回结果时,请向自己的服务端请求来查询订单状态。

* 支付宝渠道发生包冲突的情况

使用阿里百川等阿里系的 SDK 时,可能会出现冲突,请尝试使用 pod 'SPSDKPay/AlipayNoUTDID' 代替 pod 'SPSDKPay/Alipay'

因为 CocoaPods 的限制,只有编译通过的才能上传成功,所以使用时,需要删除项目中已经存在的 UTDID.framework

关于如何使用 SDK 请参考 开发者中心 或者 example 文件夹里的示例。