iOS 支付宝登录
因需求所以要弄一个支付宝登录功能,但是看了支付宝的开发文档之后,比不看之前更懵逼了,写的太乱了,所以遇到很多坑,但是最后还是解决了(不过不是看支付宝的开发文档解决的),不多说,剧情开始了。
1.首先你要导入文件库,看图:
2.直接拖入demo中的文件到工程中(demo放在后面,去下载吧),看图:
3. 在需要支付宝登录的点击操作里写入以下代码:
//重要说明
//这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成;
//真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;
//防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;
/*============================================================================*/
/*=======================需要填写商户app申请的===================================*/
/*============================================================================*/
NSString*pid =@"";
NSString*appID =@"";
//如下私钥,rsa2PrivateKey或者rsaPrivateKey只需要填入一个
//如果商户两个都设置了,优先使用rsa2PrivateKey
// rsa2PrivateKey可以保证商户交易在更加安全的环境下进行,建议使用rsa2PrivateKey
//获取rsa2PrivateKey,建议使用支付宝提供的公私钥生成工具生成,
//工具地址:https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=106097&docType=1
NSString*rsa2PrivateKey =@"";
NSString*rsaPrivateKey =@"";
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
//pid和appID获取失败,提示
if([pidlength] ==0||
[appIDlength] ==0||
([rsa2PrivateKeylength] ==0&& [rsaPrivateKeylength] ==0))
{
UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"提示"
message:@"缺少pid或者appID或者私钥。"
delegate:self
cancelButtonTitle:@"确定"
otherButtonTitles:nil];
[alertshow];
return;
}
//生成auth info对象
APAuthV2Info*authInfo = [APAuthV2Infonew];
authInfo.pid= pid;
authInfo.appID= appID;
//auth type
NSString*authType = [[NSUserDefaultsstandardUserDefaults]objectForKey:@"authType"];
if(authType) {
authInfo.authType= authType;
}
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types
NSString*appScheme =@"alisdkdemo";
//将授权信息拼接成字符串
NSString*authInfoStr = [authInfodescription];
NSLog(@"authInfoStr = %@",authInfoStr);
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
NSString*signedString =nil;
RSADataSigner* signer = [[RSADataSigneralloc]initWithPrivateKey:((rsa2PrivateKey.length>1)?rsa2PrivateKey:rsaPrivateKey)];
if((rsa2PrivateKey.length>1)) {
signedString = [signersignString:authInfoStrwithRSA2:YES];
}else{
signedString = [signersignString:authInfoStrwithRSA2:NO];
}
//将签名成功字符串格式化为订单字符串,请严格按照该格式
if(signedString.length>0) {
authInfoStr = [NSStringstringWithFormat:@"%@&sign=%@&sign_type=%@", authInfoStr, signedString, ((rsa2PrivateKey.length>1)?@"RSA2":@"RSA")];
[[AlipaySDKdefaultService]auth_V2WithInfo:authInfoStr
fromScheme:appScheme
callback:^(NSDictionary*resultDic) {
NSLog(@"result = %@",resultDic);
//解析auth code
NSString*result = resultDic[@"result"];
NSString*authCode =nil;
if(result.length>0) {
NSArray*resultArr = [resultcomponentsSeparatedByString:@"&"];
for(NSString*subResultinresultArr) {
if(subResult.length>10&& [subResulthasPrefix:@"auth_code="]) {
authCode = [subResultsubstringFromIndex:10];
break;
}
}
}
NSLog(@"授权结果authCode = %@", authCode?:@"");
}];
}
4. 这个时候你会遇到报错:
解决办法:在这里添加$(SRCROOT)/xxx/Alipay, 指向你的支付宝sdk头文件,记住文件一定不要写到最底层openssl这个位置,到上一个文件就ok了
支付宝登录demo下载地址:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7386797.0.0.Vkn9oy&treeId=65&articleId=103570&docType=1
好了,大概也就这些了,如果你不明白,可以加我QQ:429467768 ,记得备注:iOS相互学习