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¶ms=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{
}
}