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字段传入,钱包内将验证是否是同一个人。)
| /// 钱包初始化
/// @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 设置登录回调
| /**
设置登录回调
如果需要在接入方未登录的情况下,能够过进入钱包首页,
请实现这个方法,这个方法会在钱包需要接入方登录信息的情况下,
唤起接入方的登录界面,完成登录之后 通过 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 进入钱包首页
| /** 以push的方式进入钱包首页 */
+ (void)enterWalletHomePage;
/** 以present的方式进入钱包首页 */
+ (void)enterWalletHomePageByPresent;
|
4 发起支付
| #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×tamp=1536733076
2.将拼接后的结果进行RSA签名
*/
orderInfo.sign = @"iaKliK7BOQoBJKxfSj+91toRp4L9CjFDpovU7376WBeXYg98b9v2jdQ58SsdVtsa9pbZ91bEXyx1
RAJ+md90PzUsLItTYnUfOECSx/uesvghxEDQpj3t6FLO3Jr7LHWSaf07tLbzkKpbk9lwXEXIjWg4
bgniCkWSJIvXYPCcNsIrzHY5itictO94attPD08dezhuY+Pv6MC7AmXGmfmogYfwn+PQtAy8qRHI
B8YeW3XdtcTjNLGg6SfGhvNaG0gYffyFJOm7vFVd4smVKihnkxa8OIN4JXfOEwrJXhZfeomQijGY
oppPa+Ixf605YYuOrkMdrVL9u3K+DJvBaU9o9g==";
/**是否显示支付结果页 (该参数 不参与加签!!)
默认 : 不显示结果页 */
orderInfo.showPayResultPage = YES;
|
3.发起支付以及支付结果的回调
| [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 获取钱包版本号
5.2 清理缓存
5.3 退出钱包页面
5.4 清除钱包的登录态
5.5 设置开启日志功能
| + (void)setLogEnable:(BOOL)logEnable;
|