支付宝

iOS 支付宝登录

2017-05-17  本文已影响458人  当慧星降临的时刻

    因需求所以要弄一个支付宝登录功能,但是看了支付宝的开发文档之后,比不看之前更懵逼了,写的太乱了,所以遇到很多坑,但是最后还是解决了(不过不是看支付宝的开发文档解决的),不多说,剧情开始了。

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相互学习

上一篇下一篇

猜你喜欢

热点阅读