iOS芝麻信用接入、授权、获取芝麻信用分最全档案(官方文档)

一、整体框架流程和接入流程

1.1 整体框架流程


1.2 接入流程
此文档,为完整的对接流程中的第三步,芝麻信用移动sdk的对接文档。其他技术细节,请参考芝麻信用开发平台和商户平台文档。
第一步:商户通过芝麻信用商户平台进行配置申请

第二步:商户服务端对接芝麻信用开发平台,集成加密加签等功能

第三步:商户app对接芝麻信用移动端sdk接口

第四步: 商户拿到返回的params参数,通过RSA解密,可以获取授权结果以及用户的openId

二、 开发流程
导入 SDK的Framework文件
2.1 向工程中导入SDK Framework文件
Build Phases -> Link Binary With Libraries 里导入库
ZMCreditSDK.framework
ZMDependUponSDK.framework
(找不到的话,需要的可以联系我~)
注意:如果商户引入支付宝钱包SDK,则不需要再引入ZMBuildUponSDK.framework, 因为这样可以解决相同类库冲突的问题

将资源bundle导入工程
H5Service.bundle
Poseidon.bundle
(找不到的话,需要的可以联系我~)
导入其他依赖库
SDK中依赖了其他基础库来保证正常运行,请添加如下依赖库:
MobileCoreServices.framewrok
CFNetwork.framework
MessageUI.framework
EventKit.framework
AssetsLibrary.framework
CoreMotion.framework
Libz.dylib (Xcode 7 之后是libz.tbd)
SystemConfiguration.framework
CoreTelephony.framework
2.2 代码开发
2.2.1 在appdelegate中注册APP
首先倒入头文件:#import <ZMCreditSDK/ALCreditService.h>

[[ALCreditService sharedService] resgisterApp]; 

2.2.2 支付宝对app进行授权

认证 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
这里给一个参考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 {
        //引导安装支付宝 根据需求这里也可以跳转到一个VC界面进行网页认证
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:@"是否下载并安装支付宝完成认证?"
                                                           delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"好的", nil];
        [alertView show];
        //网页认证
        //(传入认证 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 网页认证
网页认证直接调用H5页面,这里需要用到与JS的交互

- (void)viewDidLoad {
    [super viewDidLoad];
    //_zmUrl 这个是后台返回的一个认证后的url 加载授权认证网页
    [self.zmWeb loadHTMLString:_zmUrl baseURL:nil];
    [self.view addSubview:self.zmWeb];
}

2.3 获取芝麻信用分

- (void) getZMCreditInfo{
    // ①把用户数据传给服务器,即传入参数(字典)
    //(如果后台从别的页面已经获取到用户的这些数据了,此处也可以不传参数,这就看你跟后台怎么商量了;IDCardNumber:身份证号userName:用户姓名)
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"18位身份证号码", @"IDCardNumber", @"用户姓名", @"userName", nil];
    // 创建网络请求管理对象
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    // 申明返回的结果是json类型
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    // 申明请求的数据是json类型
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    // 如果报接受类型不一致请替换一致text/html或别的
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];
    
    [manager POST:@"后台请求网址" parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        // ②芝麻信用SDK提供的方法,就是这么简单,就一行代码,搞定。(APPid(不是app的appid)是后台接入芝麻信用时申请时后台申请的,这个是固定的,写死就行)
        // ②这里只要传三个参数就行,app id、sign、params,芝麻信用会返回给我们一个字典,在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提交给服务器,服务器就能把芝麻信用分数返回给我们了,这里dict的key:params也是后台给你的,不是固定的。
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:dic[@"params"], @"params", nil];
    // 创建网络请求管理对象
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    // 申明返回的结果是json类型
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    // 申明请求的数据是json类型
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    // 如果报接受类型不一致请替换一致text/html或别的
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];
    
    [manager POST:@"后台请求网址" parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        // 看看这里是不是打印出了你想要的芝麻分数了呢
        NSLog(@"%@", responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
    }];
}

三、注意事项
ALCreditService是IOS SDK的功能入口,所有的接口调用都需要通过ALCreditService进行调用。
注意:界面跳转是基于navigationController的push功能,并且使用的是系统的nav bar,如果商户端有对nav bar作自定义,请在调用SDK之前,进行nav bar的调整。
由于sdk里面有用到c编译,请把调用queryUserAuthReq的controller后缀名改成.mm
附官方demo链接:滚到最下面

https://zmmcportal.zmxy.com.cn/technology/openDoc.htm?relInfo=CERTIFICATION_QUICK_START

特别注意:像ofo、优拜单车、永安行 支付宝客户端的认证方式只有和支付宝深度合作才可以做......
没有深度合作就老老实实使用H5来授权认证。

(持续更新~🙈)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容