🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、导入开发资源 1. 下载PaySdk 和demo包 &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;在壹收银开放平台下载PaySdk.zip资源并解压,demo项目中包含demo案、微信和支付宝依赖的库及封闭类; &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;PaySdk分为swift版(swift 3.0+)和objc版本,请根据项目需要选择对应的版本。 <br/> 2. iOS兼容支持 &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;目前支持iOS Sdk支持的iOS版本为ios 7.0+ <br/> 3. 手动导入 PaySdk依赖聚合平台的库和framework ![](https://box.kancloud.cn/3fefe43f313087e9adcd1b6fa57757b9_432x362.png) &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;图中红色方框为项目需要额外导入的库和framework,以及封装文件; 依赖系统的Frameworks: ![](https://box.kancloud.cn/72fab4c5cf38811a8405198947049684_1571x625.png) ~~~ libc++.tbd libz.tbd CoreTelephony.framework SystemConfiguration.framework CoreMotion.framework Security.framework CoreLocation.framework libsqlite3.tbd ~~~ <br/> 4. 添加 Other Linker Flag(微信支付需设置) 项目:target -> Build Settings -> Other Linker Flags 设置 “-ObjC” <br/> 5. 添加 URL Schemes,用于微信和支付宝支付完成后回跳 项目:target -> info -> URL Types, 点击”+”添加 1)设置微信支付: identifier:wxpay URL Schemes: 实际微信支付的appid 2)设置支付宝: identifier:sqpay URL Schemes: mch+mchno(mch+商户聚合平台分配的编号) ![](https://box.kancloud.cn/b64a8df4b0c4d027b82e0a3866989c75_432x191.png) <br/> 6. 添加必要的权限,如https,http请求 针对 iOS 9 及以上系统的限制 http 协议的访问,如果 App 需要访问 http://, 则需要在 Info.plist 添加如下代码: ~~~ <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> ~~~ ## 二、初始化支付sdk &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;AppDelegate didFinishLaunchingWithOptions中,初始化sdkAppDelegate didFinishLaunchingWithOptions中,初始化sdk ~~~ // 聚合sdk:初始化支付配置;根据应用实际配置,设置:mchNo, clientKey, wxpayAppId, alipayAppId [SQPayApi initWithKey:mchNo clientKey:clientKey wxpayAppId:wxpayAppId alipayAppId:alipayAppId]; ~~~ 【注:[获取mchNo和client key](https://www.kancloud.cn/book/cattong/youyisdk/preview/%E6%B3%A8%E5%86%8C%E5%BC%80%E5%8F%91%E8%80%85%E8%B4%A6%E5%8F%B7.md)】 <br/><br/> ## ## 三、发起支付请求 ~~~ SQPayRequest *payRequest = [[SQPayRequest alloc] init]; payRequest.mchOrderId = mchOrderId; payRequest.body = body; payRequest.fee = fee; payRequest.payChannel = PAY_CHANNEL_ALIPAY; payRequest.notifyUrl = notifyUrl; payRequest.attach = attach; //调起支付页面,回调接口代表下单成功开始调起支付,不代表用户已经支付成功; [SQPayApi pay:payRequest withCompletion:^( BOOL isSuccess, NSString *errorCode, NSString *errorMessage) { NSLog(@”%@:%@”, errorCode, errorMessage); }]; ~~~ <br/> ## ## 四、UIApplicationDelegate接收交易结果 &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;渠道为支付宝但未安装支付宝钱包时,交易结果会在调起插件时的 Completion 中返回。渠道为微信、支付宝(安装了支付宝钱包)、银联或者测试模式时,请实现 UIApplicationDelegate 的 - application:openURL:xxxx: 方法 ~~~ //针对9.0以前版本,此方法9.0以后不建议使用
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    
    BOOL canHandleURL = [SQPayApi handleOpenURL:url];
    return canHandleURL;
} //针对9.0及以后版本 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { BOOL canHandleURL = [SQPayApi handleOpenURL:url]; return canHandleURL; } ![](https://box.kancloud.cn/2a874e0aba10f8228f847b36f708fa33_432x277.png) ~~~ <br/><br/> ## ## 五、支付页面的ViewControler处理交易结果 &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;UIApplicationDelegate 接收交易数据后,通过NSNotificationCenter 通知支付页面的ViewController来处理支付成功的业务逻辑,因此需要在ViewController中添加通知处理; ### viewDidLoad方法中添加: ~~~ //监听支付返回结果,回调绑定至方法:appPaySuccess, 在appPaySucces实现成功后的业务逻辑处理 [[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(appPaySuccess:) name: APP_PAY_SUCCESS_NOTIFICATION object:nil]; ~~~ ### 添加处理交易结果方法appPaySuccess: ~~~ - (void) appPaySuccess:(NSNotification *) notification
{
    NSDictionary *userInfo = notification.userInfo;
    NSLog(@"Received pay notification: %@", userInfo); } ~~~ <br/><br/>