跳转至

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。如图标红位置所示。 工程目录-iOS

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返回的结果为准。代码示例如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#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];  

查看版本号

1
2
3
4
5
6
7
8
/*! @brief 获取微信/支付宝/连尚钱包当前包的版本号
* @paymentType 支付方式
* @return 返回对于支付方式的版本号
*/
+ (NSString *_Nullable)getVersionWithPaymentType:(SDPPaymentType)paymentType;
/*! @brief 获取该SDK的版本号
 */
 + (NSString *_Nullable)getAggregationPaySDKVersion;

相关文档

支付宝参考文档:通知参数说明
微信参考文档:iOS接入指南APP端开发步骤

Back to top