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

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

1.1 整体框架流程


iOS芝麻信用接入、授权、获取芝麻信用分最全档案(官方文档)_第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

[[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  _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  _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来授权认证。

(持续更新~)

你可能感兴趣的:(iOS芝麻信用接入、授权、获取芝麻信用分最全档案(官方文档))