一、整體框架流程和接入流程
1.1 整體框架流程

1.2 接入流程
此文檔,為完整的對(duì)接流程中的第三步,芝麻信用移動(dòng)sdk的對(duì)接文檔。其他技術(shù)細(xì)節(jié),請(qǐng)參考芝麻信用開(kāi)發(fā)平臺(tái)和商戶平臺(tái)文檔。
第一步:商戶通過(guò)芝麻信用商戶平臺(tái)進(jìn)行配置申請(qǐng)
第二步:商戶服務(wù)端對(duì)接芝麻信用開(kāi)發(fā)平臺(tái),集成加密加簽等功能
第三步:商戶app對(duì)接芝麻信用移動(dòng)端sdk接口
第四步: 商戶拿到返回的params參數(shù),通過(guò)RSA解密,可以獲取授權(quán)結(jié)果以及用戶的openId
二、 開(kāi)發(fā)流程
導(dǎo)入 SDK的Framework文件
2.1 向工程中導(dǎo)入SDK Framework文件
Build Phases -> Link Binary With Libraries 里導(dǎo)入庫(kù)
ZMCreditSDK.framework
ZMDependUponSDK.framework
(找不到的話,需要的可以聯(lián)系我~)
注意:如果商戶引入支付寶錢包SDK,則不需要再引入ZMBuildUponSDK.framework, 因?yàn)檫@樣可以解決相同類庫(kù)沖突的問(wèn)題
將資源bundle導(dǎo)入工程
H5Service.bundle
Poseidon.bundle
(找不到的話,需要的可以聯(lián)系我~)
導(dǎo)入其他依賴庫(kù)
SDK中依賴了其他基礎(chǔ)庫(kù)來(lái)保證正常運(yùn)行,請(qǐng)?zhí)砑尤缦乱蕾噹?kù):
MobileCoreServices.framewrok
CFNetwork.framework
MessageUI.framework
EventKit.framework
AssetsLibrary.framework
CoreMotion.framework
Libz.dylib (Xcode 7 之后是libz.tbd)
SystemConfiguration.framework
CoreTelephony.framework
2.2 代碼開(kāi)發(fā)
2.2.1 在appdelegate中注冊(cè)APP
首先倒入頭文件:#import <ZMCreditSDK/ALCreditService.h>
[[ALCreditService sharedService] resgisterApp];
2.2.2 支付寶對(duì)app進(jìn)行授權(quán)
認(rèn)證 URL:https://zmopenapi.zmxy.com.cn/openapi.do?sign=rr8lb07UarEXFp2gckiAc28y%2BeHHdq%2BYwWFBW3bl1iYMKK2ScHFYtZRdOxWwBgbqBily5P6455c4QjumfF%2BRQhHgFr6DrA7RfMDp3tQMbTAn7wtAR8vGE8o%2BuCKAgDMzF2lfqCSn%2BGcOtbhSwnNbJDJAsNWerlezkSTu0YrMLvA%3D&signtype=RSA&charset=UTF-8&appid=1000509&method=zhima.customer.certification.certify&version=1.0?ms=TNjy6EwBUey02QxJF4VUB4UjkRL1NjLHrK7XKD1J9sGvjvVPXGT7e1cupoxr%2BBZS1OXbhpf4LTRVzPIgROiyk6az%2BFFU7ud0378ugHn8UbqHu%2FvbeTRsEY0FDAekCv6AmY6xbVZRDkClVuM9k1KlZ6bVRvs%2F1zUgvjP8iSivKA0%3D
這里給一個(gè)參考URL
- (void)doVerify:(NSString* )url {
// 這里使用固定appid 20000067
NSString *alipayUrl = [NSString stringWithFormat:@"alipays://platformapi/startapp?appId=20000067&url=%@",
[self URLEncodedStringWithUrl:url]];
if ([self canOpenAlipay]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:alipayUrl] options:@{} completionHandler:nil];
} else {
//引導(dǎo)安裝支付寶 根據(jù)需求這里也可以跳轉(zhuǎn)到一個(gè)VC界面進(jìn)行網(wǎng)頁(yè)認(rèn)證
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:@"是否下載并安裝支付寶完成認(rèn)證?"
delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"好的", nil];
[alertView show];
//網(wǎng)頁(yè)認(rèn)證
//(傳入認(rèn)證 URL)
BBDCZMCreditViewController *zmCreditVC = [[BBDCZMCreditViewController alloc] init];
zmCreditVC.zmUrl = url;
[self.navigationController pushViewController:zmCreditVC animated:YES];
}
}
- (NSString *)URLEncodedStringWithUrl:(NSString *)url {
NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)url,NULL,(CFStringRef) @"!'();:@&=+$,%#[]|",kCFStringEncodingUTF8));
return encodedString;
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1) {
NSString *appstoreUrl = @"itms-apps://itunes.apple.com/app/id333206289";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:appstoreUrl] options:@{} completionHandler:nil];
}
}
- (BOOL)canOpenAlipay {
return [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"alipay://"]];
}
2.2.3 網(wǎng)頁(yè)認(rèn)證
網(wǎng)頁(yè)認(rèn)證直接調(diào)用H5頁(yè)面,這里需要用到與JS的交互
- (void)viewDidLoad {
[super viewDidLoad];
//_zmUrl 這個(gè)是后臺(tái)返回的一個(gè)認(rèn)證后的url 加載授權(quán)認(rèn)證網(wǎng)頁(yè)
[self.zmWeb loadHTMLString:_zmUrl baseURL:nil];
[self.view addSubview:self.zmWeb];
}
2.3 獲取芝麻信用分
- (void) getZMCreditInfo{
// ①把用戶數(shù)據(jù)傳給服務(wù)器,即傳入?yún)?shù)(字典)
//(如果后臺(tái)從別的頁(yè)面已經(jīng)獲取到用戶的這些數(shù)據(jù)了,此處也可以不傳參數(shù),這就看你跟后臺(tái)怎么商量了;IDCardNumber:身份證號(hào)userName:用戶姓名)
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"18位身份證號(hào)碼", @"IDCardNumber", @"用戶姓名", @"userName", nil];
// 創(chuàng)建網(wǎng)絡(luò)請(qǐng)求管理對(duì)象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 申明返回的結(jié)果是json類型
manager.responseSerializer = [AFJSONResponseSerializer serializer];
// 申明請(qǐng)求的數(shù)據(jù)是json類型
manager.requestSerializer = [AFJSONRequestSerializer serializer];
// 如果報(bào)接受類型不一致請(qǐng)?zhí)鎿Q一致text/html或別的
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];
[manager POST:@"后臺(tái)請(qǐng)求網(wǎng)址" parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// ②芝麻信用SDK提供的方法,就是這么簡(jiǎn)單,就一行代碼,搞定。(APPid(不是app的appid)是后臺(tái)接入芝麻信用時(shí)申請(qǐng)時(shí)后臺(tái)申請(qǐng)的,這個(gè)是固定的,寫死就行)
// ②這里只要傳三個(gè)參數(shù)就行,app id、sign、params,芝麻信用會(huì)返回給我們一個(gè)字典,在result中
[[ALCreditService sharedService] queryUserAuthReq:@"APP ID" sign:responseObject[@"sign"] params:responseObject[@"param"] extParams:nil selector:@selector(result:) target:self];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
- (void)result:(NSMutableDictionary*)dic{
// ③從第二步中芝麻信用返回給我們的字典就是這的dic,你可以試著打印看一下
// ③把params提交給服務(wù)器,服務(wù)器就能把芝麻信用分?jǐn)?shù)返回給我們了,這里dict的key:params也是后臺(tái)給你的,不是固定的。
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:dic[@"params"], @"params", nil];
// 創(chuàng)建網(wǎng)絡(luò)請(qǐng)求管理對(duì)象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 申明返回的結(jié)果是json類型
manager.responseSerializer = [AFJSONResponseSerializer serializer];
// 申明請(qǐng)求的數(shù)據(jù)是json類型
manager.requestSerializer = [AFJSONRequestSerializer serializer];
// 如果報(bào)接受類型不一致請(qǐng)?zhí)鎿Q一致text/html或別的
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];
[manager POST:@"后臺(tái)請(qǐng)求網(wǎng)址" parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 看看這里是不是打印出了你想要的芝麻分?jǐn)?shù)了呢
NSLog(@"%@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
三、注意事項(xiàng)
ALCreditService是IOS SDK的功能入口,所有的接口調(diào)用都需要通過(guò)ALCreditService進(jìn)行調(diào)用。
注意:界面跳轉(zhuǎn)是基于navigationController的push功能,并且使用的是系統(tǒng)的nav bar,如果商戶端有對(duì)nav bar作自定義,請(qǐng)?jiān)谡{(diào)用SDK之前,進(jìn)行nav bar的調(diào)整。
由于sdk里面有用到c編譯,請(qǐng)把調(diào)用queryUserAuthReq的controller后綴名改成.mm
附官方demo鏈接:滾到最下面
https://zmmcportal.zmxy.com.cn/technology/openDoc.htm?relInfo=CERTIFICATION_QUICK_START
特別注意:像ofo、優(yōu)拜單車、永安行 支付寶客戶端的認(rèn)證方式只有和支付寶深度合作才可以做......
沒(méi)有深度合作就老老實(shí)實(shí)使用H5來(lái)授權(quán)認(rèn)證。
(持續(xù)更新~??)