PayiOS
Introduction: 对微信支付和支付宝支付的 App 端 SDK 进行二次封装,对外提供一个较为简单的接口和支付结果回调
Tags:
iOS-微信支付-支付宝支付-对微信支付和支付宝支付的 App 端 SDK 进行二次封装,对外提供一个较为简单的接口和支付结果回调
1 下载最新 SDK
下载后将 sdk 放入项目目录中
2 配置
2.1 配置静态库
在项目 General-linked Frameworks and Libraries 中添加以下库:
- SystemConfiguration.framework
- libsqlite3.tbd
- libc++.tbd
- libz.tbd
- libWeChatSDK.a(在下载的 SDK 中添加)
- QuartzCore.framework
- CoreText.framework
- CoreGraphic.framework
- UIKit.framework
- Foundation.framework
- CFNetwork.framework
- CoreMotion.framework
- AlipaySDK.framework(在下载的 SDK 中添加)
2.2 配置应用白名单
针对 iOS 9 系统更新, 为了使你接入的微信支付与支付宝支付兼容 iOS 9 ,请按照以下引导进行操作: 应用需要在 Info.plist 中将要使用的 URL Schemes 列为白名单,才可正常检查其他应用是否安装,需要在 Info.plist 里添加如下代码:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>wechat</string>
<string>weixin</string>
<string>alipay</string>
</array>
2.3 配置 URL Types
为了用户操作完成后能够跳转回你的应用,请务必添加 URL Schemes:在 Xcode 中,选择你的工程设置项,选中 TARGETS 一栏,在 Info 标签栏的 URL Types 添加 URL Schemes,或在 info.plist 中右键选择 open as,选择 Source code,找到如下代码并设置
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>alipay</string>
<!-- 支付宝支付-->
<key>CFBundleURLSchemes</key>
<array>
<string>com.girl.123</string>
<!-- 此处填写 app 的 Bundle Identity-->
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>weixin</string>
<!-- 微信支付-->
<key>CFBundleURLSchemes</key>
<array>
<string>wx6b69bdbf2adca4f8</string>
<!-- 此处填写申请的微信 app id-->
</array>
</dict>
</array>
2.4 开启 http 访问
针对 iOS 9 限制 http 协议的访问,如果 App 需要访问 http://, 则需要在 Info.plist 添加如下代码:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2.5 设置 build-setting 中 bitcode 为 NO
2.6 设置 Search Paths
进入 Build Settings-Search Paths 将 Framework Search Paths、Header Search Paths、Library Search Paths 里面增加 lib 里面微信 SDK 路径和支付宝 SDK 路径:
例如:(相对路径要自己设置)
- "$(SRCROOT)/../pay_ios_sdk/lib/Wechat_SDK_1.6.2"
- "$(SRCROOT)/../pay_ios_sdk/lib/aliPay_SDK_2.0"
3 调用
3.1 接收交易结果设置
在 AppDelegate.m 文件中添加以下代码:
#import "PayApi.h"
...
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
return [[PayApi sharedApi] handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[PayApi sharedApi] handleOpenURL:url];
}
3.2 发起支付调用
3.2.1 微信支付
//pay_param 是服务端生成的支付参数
[[PayApi sharedApi]wxPayWithPayParam:pay_param success:^(void) {
NSLog(@"支付成功");
} failure:^(PayErrorCode err_code) {
switch (err_code) {
case WXERROR_PAYPARAM: //支付参数错误
NSLog(@"支付参数错误");
break;
case WXERROR_PAY: //支付失败
NSLog(@"支付失败");
break;
case WXCANCEL_PAY: //支付取消
NSLog(@"支付取消");
break;
default:
break;
}
}];
3.2.2 支付宝支付
[[PayApi sharedApi]alipayWithPayParam:_AliTextView.text success:^(void){
NSLog(@"支付成功");
} failure:^(PayErrorCode err_code) {
switch (err_code) {
case ALIPAYERROR_PAY: //支付失败
NSLog(@"支付失败");
break;
case ALIPAYCANCEL_PAY: //支付取消
NSLog(@"支付取消");
break;
default:
break;
}
}];