Supay iOS SDK
目录
简介
lib 文件夹中是 iOS SDK 文件,
example 文件夹中是一个简单的接入示例,该示例仅供参考。
当前版本,不需要微信的 SDK,可以正常调用微信支付
版本要求
iOS SDK 要求 iOS 7.0 及以上版本
接入方法
使用 CocoaPods
-
在
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'
-
运行
pod install
-
现在开始使用
.xcworkspace
打开项目,而不是.xcodeproj
-
添加 URL Schemes:在 Xcode 中,选择你的工程设置项,选中 "TARGETS" 一栏,在 "Info" 标签栏的 "URL Types" 添加 "URL Schemes",如果使用微信,填入所注册的微信应用程序 ID,如果不使用微信,则自定义,允许英文字母和数字,首字母必须是英文字母,建议名称复杂一些,尽量避免与其他程序冲突。
-
1.0.1 及以上版本,可开启 Debug 模式,打印 log 以方便调试。开启方法:
[SPSDKPay setDebugMode:YES];
。
手动导入
- 获取 SDK
下载 SDK,其中包含了 lib 文件夹和 example 文件夹。lib 文件夹中包含 SDK 的文件。 - 依赖 Frameworks:必须:
CFNetwork.framework SystemConfiguration.framework Security.framework QuartzCore.framework CoreTelephony.framework libc++.tbd libz.tbd libsqlite3.0.tbd libstdc++.tbd CoreMotion.framework CoreLocation.framework
- 如果不需要某些渠道,删除
lib/Channels
下的相应目录即可。 - 添加 URL Schemes:在 Xcode 中,选择你的工程设置项,选中 "TARGETS" 一栏,在 "Info" 标签栏的 "URL Types" 添加 "URL Schemes",如果使用微信,填入所注册的微信应用程序 ID,如果不使用微信,则自定义,允许英文字母和数字,首字母必须是英文字母,建议名称复杂一些,尽量避免与其他程序冲突。
- 添加 Other Linker Flags:在 Build Settings 中搜索 Other Linker Flags,添加
-ObjC
。 - 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;
}
额外配置
-
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>
-
iOS 9 限制了 http 协议的访问,如果 App 需要访问
http://
,需要在Info.plist
添加如下代码:<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
-
如果编译失败,遇到错误信息为:
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
。