跳转至

iOS接入

一、准备

1.导入Framework

(导入SDPWalletSDK.framework、SDPResource.bundle、SDPLivenessKuangShi.framework、SDPLivenessKuangShi.bundle)

2.依赖第三方如下:

(Masonary、Reachability、MJRefresh)

二. 快速集成

钱包SDK开放的对外功能接口,统一集中在 SDPWalletSDK.h 文件里。

主要功能描述如下:

1.初始化

注意,使用钱包功能之前,需要提前初始化SDK!其中,初始化的两个参数说明如下:

  • 参数一:SDPWalletParamModel,包含基本的属性值(“掌门集团”内部的App接入时,该参数稍有不同,详情请联系钱包团队):
字段名 变量 必填 类型 示例值 描述
appId 盛付通分配的钱包Id String 349566231193 由盛付通分配
walletEnvType 接入的环境 int SDPWalletSDKEnvTest "测试环境"为SDPWalletSDKEnvTest, "预生产环境"为SDPWalletSDKEnvPreRelease", "生产环境"为SDPWalletSDKEnvRelease"
customThemeJson 自定义主题色 String 参见下方的“自定义主题”json结构 若设置有值,则优先使用该字段,而忽略theme字段
loadingText loading框上的文案 String 请稍等 若不设置,则默认显示"请稍等

自定义主题示例(通过customThemeJson属性设置)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
    "themeColor": "#FF6F61",    // 整体主题色
    "textColor": "#FF6F61", // 支付成功界面icon下面的字体颜色
    "textColorbutton_cantClick": "#FF6F61", // 支付成功界面icon图标的颜色
    "button_cantClick": "#FFD3CF",  // 按钮不能点击时的“背景颜色”
    "buttonText_cantClick": "#FFFFFF",  // 按钮不能点击时的“字体颜色”
    "buttonStroke_cantClick": "#FFD3CF",    // 按钮不能点击时的“边框颜色”
    "button_clickAble": "#FF6F61",  // 按钮可用时的“背景颜色”
    "buttonText_clickAble": "#ffffff",  // 按钮可用时的“字体颜色”
    "buttonStroke_clickAble": "#FF6F61",    // 按钮可用时的“边框颜色”
    "button_clickDown": "#FF6F61",  // 按钮按下时的“背景颜色”
    "buttonText_clickDown": "#FFFFFF",  // 按钮按下时的“字体颜色”
    "buttonStroke_clickDown": "#FF6F61" // 按钮按下时的“边框颜色”
  }
  • 参数二:userInfoBlock 设置获取用户登录信息回调.

如果接入方已登录,需通过该方法把相关用户信息回传给钱包,回调结果是一个包含uhId、userToken 两个key的字典(如果你已经实名,请将身份证后六位通过realNaInfo字段传入,钱包内将验证是否是同一个人。)

1
2
3
4
5
6
/// 钱包初始化
/// @param walletPatamModel 参数配置信息
/// @param userInfoBlock 设置获取用户登录信息回调

   + (void)setWalletParamModel:(SDPWalletParamModel *)walletParamModel
                 userInfoBlock:(NSDictionary *(^)(void))userInfoBlock;

初始化代码示例:

 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
  SDPWalletParamModel *walletParamModel = [[SDPWalletParamModel alloc] init];
  walletParamModel.walletEnvType = SDPWalletSDKEnvTest;
  walletParamModel.walletThemeStyle = SDPWalletSDKThemeStyleRed;
  walletParamModel.appId = @"test-merchantYZP";
  walletParamModel.customThemeJson = [self sdp_toString:self.customThemeDic];
  walletParamModel.loadingText = @"加载中";

  [SDPWalletSDK setWalletParamModel:walletParamModel
                      userInfoBlock:^NSDictionary * _Nonnull{

                      /*回调结钱包App登录信息,若已登录则需要把登录信息通过字典回传给钱包,
                    若字典为空,则钱包认为App未登录会在钱包内部唤起登录页面*/
                      return @{ @"uhId": @"a073305557355074",
                      @"userToken": @"A5DE507C-CCAF-443C-8B34-B09674B2E292" ,
                      @"realNaInfo":@"123456"};
}];


- (NSDictionary *)customThemeDic {
   NSDictionary *dic=@{@"themeColor": @"#0285f0",    // 整体主题色
                        @"textColor": @"#0285f0",//支付成功界面icon下面的字体颜色
                        @"iconColor": @"#0285f0", // 支付成功界面icon图标的颜色
                 @"button_cantClick": @"#57a7e9",  // 按钮不能点击时的“背景颜色”
             @"buttonText_cantClick": @"#d9eeff",  // 按钮不能点击时的“字体颜色”
           @"buttonStroke_cantClick": @"#368ae3", // 按钮不能点击时的“边框颜色”
                 @"button_clickAble": @"#0285f0",  // 按钮可用时的“背景颜色”
             @"buttonText_clickAble": @"#d9eeff",  // 按钮可用时的“字体颜色”
           @"buttonStroke_clickAble": @"#005cbf",    // 按钮可用时的“边框颜色”
                 @"button_clickDown": @"#0072d5",  // 按钮按下时的“背景颜色”
             @"buttonText_clickDown": @"#cae7ff",  // 按钮按下时的“字体颜色”
           @"buttonStroke_clickDown": @"#004b9c" // 按钮按下时的“边框颜色”
           };
    return dic;
       }

2 设置登录回调

1
2
3
4
5
6
7
/**
 设置登录回调
 如果需要在接入方未登录的情况下,能够过进入钱包首页,
 请实现这个方法,这个方法会在钱包需要接入方登录信息的情况下,
 唤起接入方的登录界面,完成登录之后 通过 loginCompleteBlock 告诉钱包登录结果
 **/
+ (void)setLoginBlock:(void (^)(void (^loginCompleteBlock)(SDPWalletSDKLoginState state)))loginBlock;

举例说明:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
[SDPWalletSDK setLoginBlock:^(void (^_Nonnull loginCompleteBlock)(SDPWalletSDKLoginState)) {
    //这里请接入方 自己弹出登录界面
    LoginViewController *loginVC = [LoginViewController new];
    loginVC.loginSuccessBlock = ^{
        //完成登录之后 告诉钱包登录结果
        if (loginCompleteBlock) {
            loginCompleteBlock(SDPWalletSDKLoginSuccess);
        }
    };
    loginVC.loginCancelBlock = ^{
        //登录取消之后 告诉钱包登录结果
        if (loginCompleteBlock) {
            loginCompleteBlock(SDPWalletSDKLoginCancle);
        }
    };
    [self.navigationController presentViewController:loginVC animated:YES completion:nil];
}];

3 进入钱包首页

1
2
3
4
5
/** 以push的方式进入钱包首页 */
+ (void)enterWalletHomePage;

/** 以present的方式进入钱包首页 */
+ (void)enterWalletHomePageByPresent;

4 发起支付

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
 #import <SDPWalletSDK/SDPOrderInfo.h>

/** 支付接口
 @param orderInfo 订单信息
 @param appScheme 预留功能(第三方调用时),应用内调用可传nil
 @param completion 支付结果回调
 */
+ (void)payOrder:(SDPOrderInfo *)orderInfo
      fromScheme:(NSString *__nullable)appScheme
        callback:(void(^)(NSDictionary *resultDic))completion;

举例说明:

1.请求参数
字段名 变量 必填 类型 示例值 描述
appId 应用ID Y String(32)
mchId 商户号 Y String(20) 商户在盛付通申请的商户号
prepayId 预支付Id Y String(32) 从服务器获取
nonceStr 随机字符串 Y String(32)
timestamp 时间戳 Y String(32) 系统时间精确到秒,10位数字
signType 加签类型 Y String(32) RSA 目前只支持:RSA
sign 签名 Y String(1000) 请求加签,请参考服务端加签文档
showPayResultPage 是否显示支付结果页 N BOOL YES 该参数 不参与加签!! 默认值NO: 不显示结果页
2.参数事例
 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
 SDPOrderInfo *orderInfo = [[SDPOrderInfo alloc] init];
 //应用Id
 orderInfo.appId = @"349566231193";
 //商户号
 orderInfo.mchId = @"93756275";
 //预支付Id
 orderInfo.prepayId = @"e62ef3f574b247ae9947418db51c0462";
 //随机字符串
 orderInfo.nonceStr = @"pWUVWVYWNQhnTXpQzhIzMGCwqBkZclzg";
 //时间戳
 orderInfo.timestamp = @"1603941829";
 //暂时固定为RSA,不可变更
 orderInfo.signType = "RSA";

 /*请求加签说明
  1.排序拼接方式:
 按照首字母顺序排序,以key1=value1&key2=value2&key3=value3.....形式组装加签串,value为空字段不参与签名
 eg: appId=fdji3ro29k&mchId=93745648&nonceStr=NDKwAJLZEPkBJKZbJyNjuUxMpkgapYPk&prepayId=WP091214175671270865777524736&signType=RSA&timestamp=1536733076
 2.将拼接后的结果进行RSA签名
 */
 orderInfo.sign = @"iaKliK7BOQoBJKxfSj+91toRp4L9CjFDpovU7376WBeXYg98b9v2jdQ58SsdVtsa9pbZ91bEXyx1
RAJ+md90PzUsLItTYnUfOECSx/uesvghxEDQpj3t6FLO3Jr7LHWSaf07tLbzkKpbk9lwXEXIjWg4
bgniCkWSJIvXYPCcNsIrzHY5itictO94attPD08dezhuY+Pv6MC7AmXGmfmogYfwn+PQtAy8qRHI
B8YeW3XdtcTjNLGg6SfGhvNaG0gYffyFJOm7vFVd4smVKihnkxa8OIN4JXfOEwrJXhZfeomQijGY
oppPa+Ixf605YYuOrkMdrVL9u3K+DJvBaU9o9g==";

 /**是否显示支付结果页 (该参数 不参与加签!!)
 默认 : 不显示结果页 */
 orderInfo.showPayResultPage = YES;
3.发起支付以及支付结果的回调
1
2
3
4
5
 [SDPWalletSDK payOrder:orderInfo 
             fromScheme:nil 
               callback:^(NSDictionary * _Nonnull resultDic) { 
               NSLog(@"result----->%@", resultDic);
 }];
4.返回码列表
返回码 返回信息 备注
0 支付成功 通知商户支付成功,不可作为最终的支付凭证,需商户异步查询支付结果。
-1 支付中 需商户异步去查询最终的支付结果。
-2 支付失败 可能的原因:签名错误、未注册APPID、APPID不正确、其他异常等。
-3 支付取消 无需处理。发生场景:用户不支付了,点击取消,返回APP。
5.返回的数据格式
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
{
  "data" : {
    "ext" : {
      "pkgname" : "",
      "lati" : "31.190352",
      "wifipay_merchantOrderNo" : "1540446060876",
      "longi" : "121.591777",
      "wifipay_merchantNo" : "93745648",
      "mapsp" : "",
      "wifipay_appId" : "fdji3ro29k"
    },
    "errmsg" : "支付成功",
    "errCode" : "0"
  },
  "what" : "pay",
  "retcode" : "0",
  "retmsg" : "支付成功"
}

5 其它功能接口

5.1 获取钱包版本号

1
+ (NSString *)version;

5.2 清理缓存

1
+ (void)cleanCache;

5.3 退出钱包页面

1
+ (void)exitWallet;

5.4 清除钱包的登录态

1
+ (void)walletLoginOut;

5.5 设置开启日志功能

1
+ (void)setLogEnable:(BOOL)logEnable;
Back to top