iOS接入
调试说明
该聚合SDK(将在联调时提供),聚合了微信、支付宝、连尚钱包等渠道支付功能。接入SDK前,请同时在本地的项目中接入支付宝、微信、连尚钱包SDK,并引入相应的库。
1. 微信:1.8.7.1
2. 支付宝:15.7.4
3. 连尚钱包:3.9.38
接入说明
以下项目开发环境以Xcode11.3.1,运行环境为IOS13为例,说明其开发中需要的操作。
1. 项目设置APPID
商户在微信/支付宝开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性中的URL Schemes为您的APPID。如图标红位置所示。
2. 注册APPID
- 商户APP工程中引入聚合支付SDK、连尚钱包SDK、支付宝SDK和微信lib库和头文件;
- 调用支付API前,微信和连尚钱包,需要先向微信和盛付通注册您的APPID,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 | //微信
[SDPAggregationPaySDK sdp_registerWXApp:@"wx90d9273885746504" universalLink:@"https://b.shengpay.com/"];
//连尚钱包
/*! @brief 获取连信相关信息 && 设置连尚钱包环境 && 钱包初始化
* 需要在每次启动第三方应用程序时调用。
* @param lxEnvType 设置连信环境 lxEnvType 值为 dev debug debug2 release mock
* @param fetchInfoBlock 设置获取连信用户信息 block
* @param deviceInfoBlock 设置获取连信设备信息 block
* @param envType 连尚钱包 环境类型
* @param appID 必传 连信:ZX0001 , 掌信:ZX0002
* @param appSource 必传 连信:LX ,掌信:ZX
* @param unionid 非必传
* @param openId 非必传
*/
[SDPAggregationPaySDK setLXInfoWithAppID:@"ZX0001"
appSource:@"LX"
unionid:@""
openId:@""
lxEnvType:@"debug"
walletEnvType:SDPWalletSDKEnvRelease
userInfoBlock:^NSDictionary * _Nullable{
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
dic[@"uhid"] = [YNFriendsManager sharedManager].me.uid;
dic[@"sessionId"] = [YNAccountManager sharedManager].sessionID;
dic[@"lxToken"] = [[YNAccountManager sharedManager] encrptedUidWithTimeStamp];
dic[@"phoneNumber"] = [YNFriendsManager sharedManager].me.phoneNumber;
return dic;
} deviceInfoBlock:^NSDictionary * _Nullable{
[SDPWalletSDK_LX setFetchLXDeviceInfoBlock:^NSDictionary * _Nonnull{
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
dic[@"deviceId"] = [[UIDevice currentDevice] uniqueDeviceIdentifier];
dic[@"smId"] = [UserExtraInfo shareUserExtraInfo].sdid ?:@"";
return dic;
}];
|
该接口,整合了连尚钱包中的以下接口,如果项目中已经调用该以下方法进行了初始化,以下接口无需调用。
1
2
3
4
5
6
7
8
9
10
11
12
13 | //设置连信的环境
[SDPWalletSDK_LX setLxEnvType:lxEnvType];
//设置连信用户信息
[SDPWalletSDK_LX setFetchLXUserInfoBlock:fetchInfoBlock];
//设置连信设备信息
[SDPWalletSDK_LX setFetchLXDeviceInfoBlock:deviceInfoBlock];
//设置盛付通钱包环境
[SDPWalletSDK_LX setWalletEnvType:(NSInteger)envType];
//钱包初始化
[SDPWalletSDK_LX setAppID:appID
appSource:appSource
unionid:unionid
openId:openId];
|
调起支付
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | /*! @brief 发起支付
*
* @param paymentType 支付方式:微信/支付宝/连尚钱包
* @param payOrder 支付信息串(预收单接口中返回的"payInfo"值)
* @param appScheme 支付宝支付,需要传(应用注册scheme,在AliSDKDemo-Info.plist定义URL types)
* @param delegate SDPAggregationPayDelegate对象,用来接收微信/支付宝/连尚钱包触发的消息。
*/
//微信支付
[[SDPAggregationPaySDK getInstance] sendPayOrderWithPaymentType:SDPPaymentType_WX
payScenarioType:SDPWIFIPayScenarioType_GeneralPay
payOrder:payInfo
appScheme:@""
delegate:self];
//支付宝支付
[SDPAggregationPayManager sendPayOrderWithPaymentType:SDPPaymentType_AliPay
payOrder:payInfo
appScheme:@""
delegate:self];
//连尚钱包支付
[[SDPAggregationPaySDK getInstance] sendPayOrderWithPaymentType:SDPPaymentType_WIFIPay
payScenarioType:SDPWIFIPayScenarioType_GeneralPay
payOrder:payInfo
appScheme:@""
delegate:self];
|
支付结果回调
支付完成后,会返回到商户APP并回调sdp_parcelResultErrorCode:retmsg:函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功/支付处理中,则去后台查询支付结果再展示用户实际支付结果。注意 一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。代码示例如下:
| #pragma mark SDPAggregationPayDelegate
- (void)sdp_parcelResultErrorCode:(SDPResultErrorCode)resultErrorCode retmsg:(NSString *)retmsg {
switch (resultErrorCode) {
case SDPResultErrorCode_OK:
//服务器端查询支付通知或查询API返回的结果再提示成功
NSlog(@"retmsg = %@,retcode=%d",retmsg,resultErrorCode);
break;
default:
break;
}
}
|
回调中errCode值列表: 名称 | 描述 | 解决方案 |
0 | 支付成功 | 展示成功页面 |
-1 | 支付中 | |
-2 | 支付失败 | 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。 |
-3 | 用户取消 | 无需处理。发生场景:用户不支付了,点击取消,返回APP。 |
APPDelegate中接入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | /*! @brief 处理微信通过Universal Link启动App时传递的数据
*
* 需要在 application:continueUserActivity:restorationHandler:中调用。
* @param userActivity 微信启动第三方应用时系统API传递过来的userActivity
* @return 成功返回YES,失败返回NO。
*/
[[SDPAggregationPaySDK getInstance] sdp_handleOpenUniversalLink:userActivity];
/*! @brief 处理旧版微信/支付宝app,通过URL启动App时传递的数据
*
* 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL:或者application:handleOpenURL: openURL:options:中调用。
* @param url 微信/支付宝app 返回的支付结果url
* @param delegate SDPAggregationPayDelegate对象,用来接收微信/支付b包触发的消息。
* @return 成功返回YES,失败返回NO。
*/
[[SDPAggregationPaySDK getInstance] sdp_handlePaymentOpenURL:url delegate:self];
|
查看版本号
| /*! @brief 获取微信/支付宝/连尚钱包当前包的版本号
* @paymentType 支付方式
* @return 返回对于支付方式的版本号
*/
+ (NSString *_Nullable)getVersionWithPaymentType:(SDPPaymentType)paymentType;
/*! @brief 获取该SDK的版本号
*/
+ (NSString *_Nullable)getAggregationPaySDKVersion;
|
相关文档
支付宝参考文档:通知参数说明
微信参考文档:iOS接入指南 、 APP端开发步骤