# 一、导入开发资源

# 1. 下载PaySdk 和demo包

    在壹收银开放平台下载PaySdk.zip资源并解压,demo项目中包含demo案、微信和支付宝依赖的库及封闭类;

    PaySdk分为swift版(swift 3.0+)和objc版本,请根据项目需要选择对应的版本。

# 2. iOS兼容支持

    目前支持iOS Sdk支持的iOS版本为ios 7.0+

# 3. 手动导入

    PaySdk依赖聚合平台的库和framework

    图中红色方框为项目需要额外导入的库和framework,以及封装文件;

    依赖系统的Frameworks:

libc++.tbd
libz.tbd
CoreTelephony.framework
SystemConfiguration.framework
CoreMotion.framework
Security.framework
CoreLocation.framework
libsqlite3.tbd

# 4. 添加 Other Linker Flag(微信支付需设置)

    项目:target -> Build Settings -> Other Linker Flags 设置 “-ObjC”


# 5. 添加 URL Schemes,用于微信和支付宝支付完成后回跳

    项目:target -> info -> URL Types, 点击”+”添加

    1)设置微信支付: identifier:wxpay URL Schemes: 实际微信支付的appid

    2)设置支付宝: identifier:sqpay URL Schemes: mch+mchno(mch+商户聚合平台分配的编号)

# 6. 添加必要的权限,如https,http请求

    针对 iOS 9 及以上系统的限制 http 协议的访问,如果 App 需要访问 http://, 则需要在 Info.plist 添加如下代码:

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

# 二、初始化支付sdk

    AppDelegate didFinishLaunchingWithOptions中,初始化sdkAppDelegate didFinishLaunchingWithOptions中,初始化sdk

// 聚合sdk:初始化支付配置;根据应用实际配置,设置:mchNo, clientKey, wxpayAppId, alipayAppId
[SQPayApi initWithKey:mchNo 
clientKey:clientKey 
wxpayAppId:wxpayAppId 
alipayAppId:alipayAppId];

【注:获取mchNo和client key

# 三、发起支付请求

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);
    }];

# 四、UIApplicationDelegate接收交易结果

    渠道为支付宝但未安装支付宝钱包时,交易结果会在调起插件时的 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;
}

# 五、支付页面的ViewControler处理交易结果

    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);
}