iOS 芝麻认证开发(跳转本地的支付宝进行认证开发)

1,首先注册芝麻认证开发平台

https://b.zmxy.com.cn/product/productDetail.htm?productId=w1010100000000002978&scene=shop

2,查看芝麻认证文档中心

https://b.zmxy.com.cn/technology/openDoc.htm?LEFT_MENU_MODE=LEFT_BLANK&id=566

开始认证方式 1:商户有自己的 App 使用 native 的方式唤起支付宝客户端(可选)

这个原理是 跳转至自己手机的支付宝进去认证  不需要调用SDK

A:先判断手机是否安装支付宝

B:支付宝需要传入 真实姓名,身份证号码,手机号(可选,以需求而定)

C: 首先将param传给后台服务器,服务器返回一串字符串(如下)

"https://zmopenapi.zmxy.com.cn/openapi.do?charset=UTF-8&method=zhima.customer.certification.certify&sign=oPsjcCksTxwm3Gm0eVSIZ11TZAB69I4bt9xhW6x1Y6qFpuF6Xbmtw1XIW9G2J2ogvlpoIUgsLSpq%2BQjNG7CWbiyMfIj1%2BctCkEFIBWSFN%2Bs30anlfT1GMVfQWJWOtwP%2Fiseid2HWObREOO3DZ9MlKzwJWBHEnX5WLXkvq3M%2F5KA%3D&version=1.0&app_id=300000271&sign_type=RSA&platform=zmop&params=T1mDX729nz5ul0kcJ7%2BGt%2FSQwKv4yO%2BbqP8kgHeaAQW80wwP4PvxG27XyP0CondPH7x4Wz1UmH4YfATijBpUEVy6XpnFDoELd00Yr5za4G%2FR08QpaSb1fZYHiQCOEu1CLJC7nqGIQKuNZ0EcJQPd3D5%2FRtv9SrjDFLZb%2But3d%2Fs%3D";

ps:后台生成这段字符串  一定要掉2个接口,否则生成的字符串无法认证

zhima.customer.certification.initialize 认证初始化 服务端调用

zhima.customer.certification.certify 生成认证请求 URL  服务端调用

D: 移动端再拼接固定的url跳转至支付宝

NSString *alipayUrl = [NSString stringWithFormat:@"alipays://platformapi/startapp?appId=20000067&url=%@",

                           [self URLEncodedStringWithUrl:url]];(url是后台返回的字符串,必须Encoded)

F:当认证成功/失败需要跳转至app

移动端设置:

需要在.info 里面的 URL types -->URL Schemes里面添加一个标识,最好与项目匹配 

weilvapp://  (weilvapp这个就是设置在URL Schemes里面的标识)将这句话发给后台服务端,让他设置在return_url这个字段返回

ps:如果认真成功/失败无法自动回到app,检查下URL types -->URL Schemes   不需要后面再拼接什么

E:当认证成功或失败回到app时,芝麻认证都会返回一个状态

在appdelagete里面获取

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options

[url absoluteString]  这样可以拿到返回来的字符串 进行转字符串

再将里面的params 和 sign进行截取  截取方法如下:然后再将截取后的字符串传给后台即可

  NSArray *strarray = [url componentsSeparatedByString:@"="];

    NSString *param = [strarray objectAtIndex:1];

    NSArray *paramSrr = [param componentsSeparatedByString:@"&"];

    NSString *params =[paramSrr firstObject];

    NSString *sign =[strarray lastObject];

    NSMutableDictionary *paraDic = @{}.mutableCopy;

    [paraDic setObject:params forKey:@"params"];

    [paraDic setObject:sign forKey:@"sign"];

代码如下:

NSString *alipayUrl = [NSString stringWithFormat:@"alipays://platformapi/startapp?appId=20000067&url=%@",

                           [self URLEncodedStringWithUrl:url]];(url是后台返回的字符串,必须Encoded)

 if ([self canOpenAlipay]) {//是否安装支付宝

        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:alipayUrl] options:@{} completionHandler:^(BOOL success) {//跳转到支付宝芝麻认证

        }];

    } else {

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:@"是否下载并安装支付宝完成认证?"

                                                           delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"好的", nil];

        [alertView show];

    }

//字符串encode

- (NSString *)URLEncodedStringWithUrl:(NSString* )url {

    NSString *encodedString = (NSString* )CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)url,NULL,(CFStringRef) @"!'();:@&=+$,%#[]|",kCFStringEncodingUTF8));

    return encodedString;

}

//是否安装支付宝

- (BOOL)canOpenAlipay {//

    return [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"alipays://"]];

}

//如果没有安装支付宝  就跳转至苹果市场下载支付宝

- (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];

    }else{

    }

}

原文地址:https://www.cnblogs.com/liaolijun/p/7764983.html