美文网首页iOS大咖说开发文档iOS吧
iOS芝麻信用接入、授权、获取芝麻信用分最全档案(官方文档)

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

作者: 酒深巷子Ya | 来源:发表于2017-05-08 16:29 被阅读5942次

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

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

    (持续更新~🙈)

    相关文章

      网友评论

      • 41b4791daeb7:现在获取芝麻信用要收费了是吧
      • d875efd62016:2388223503@qq.com 求sdk
        酒深巷子Ya:@这个昵称老子用了 SDK只是获取芝麻信用的一些信息 我也是用的网页 根据业务来的
        d875efd62016:现在sdk已经不推荐用了,我用H5的方式。https://segmentfault.com/q/1010000013016006/a-1020000013056522
        酒深巷子Ya:@这个昵称老子用了 https://zmmcportal.zmxy.com.cn/technology/openDoc.htm?relInfo=CERTIFICATION_QUICK_START
      • 曾经像素有点低:现在的SDK,好像用不到ZMCreditSDK.framework这个了,项目里不用这个SDK也能运行实名功能,官网上也没有这个SDK了...本人菜鸟,随便发表下想法:joy:
      • 57e779d8e176:首先谢谢您的回复,一开始读这篇文章却有助益;我的项目中需求是查询芝麻信用评分,已经明确了具体是实现过程(还在调试),在这里和您交流下;现在官方已经关闭了SDK的下载入口,获取芝麻信用评分的话 可以这样做:调用芝麻信用评分需要授权,授权需要服务端生成授权URL, 移动端用webview访问授权URL进行验证码授权,结果回调到服务端页面,解密验签拿到授权码openid, 服务端调用芝麻信用评分接口拿到芝麻分;文档上说的那个输入身份证和姓名的界面 是自己开发的 调用服务端接口传过去就行,等调试通了 我也写点东西分享下
        57e779d8e176:@Stark1937 https://blog.csdn.net/baby_hua/article/details/78762764
        Stark1937:表示关注进一步信息
        酒深巷子Ya:@baby_hua :+1: :+1:
      • 罗文强:你好,文档找不到了,方便给个联系方式么?
        酒深巷子Ya:@baby_hua 我这边只有iOS的SDK 明天问一下我同事 看他那边有没有
        57e779d8e176:有android对应的SDK方便提供下不?
        酒深巷子Ya:SDK链接: https://pan.baidu.com/s/1nvBnCpF 密码: jva1
        文档官方应该删除了
      • qiulibi:你提供的链接用不了,打开提示说“对不起,当前文档未准备好....”
        氧化钙这个有木:大神也给一份吧 1262721274@qq.com 谢谢了
        qiulibi:@过时的码农 可以发到我QQ邮箱 718647831@qq.com ,麻烦了,谢谢
        酒深巷子Ya:官方把资源删除了 需要SDK的话 留下联系方式
      • if_you_like:你好,有什么联系方式可以留一下吗
        酒深巷子Ya:@if_you_like 那我加你
        if_you_like:大兄弟这个微信不好使啊搜索不到
        酒深巷子Ya:微信:18018854315
      • 2c880cfb5cdc:linker错误已解决,把芝麻信用的4个文件,放到根目录,就可以了
      • MH杭:ZMCreditSDK 这些在哪里获得?
        ZaneZhang:下载运行DEMO出现clang: error: linker command failed with exit code 1 (use -v to see invocation)请问有遇到同样问题么
        MH杭:@Hi_Ya 感谢
        酒深巷子Ya:@酷炫杭 https://b.zmxy.com.cn/technology/openDoc.htm?relType=OPEN_COMMON_DOC&relInfo=WEB_SDK_DOCUMENT&type=OPN_INFO_DOC 查看这个链接

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

      本文链接:https://www.haomeiwen.com/subject/ozzmtxtx.html