您的位置:首页 > 移动开发 > IOS开发

ios-支付宝支付sdk使用注意事项

2017-03-04 15:28 405 查看
最近在开发ios的手机支付,途中碰到的种种疑难杂症,现在记录一下,以免以后再重犯:

一、使用的SDK

     

以上是支付宝有介绍的,不多说,注意除了上面的sdk之外,还必须要有两个a文件支持,否则报错


linker command failed with exit code 1   

 

缺少两个A文件,项目运行会报错,这两个a文件可以在支付宝给的demo里面找到,有一点必须的说坑,你直接下载的支付宝sdk是不能用的,用了会报错,这个和其他开发者的反馈一样,只要置换demo里面的那两个framework、bundle文件就OK了,导入demo的时候可能会报一些错误,不用紧张,只是没有导入相关的头文件而已

#
import

<Foundation/Foundation.h>


9cce

第二:有关于openssl的路径地址(不配置会报错的,具体错误忘记了,以后补上):

openssl其实就是一个文件夹,放在与代码等级目录就好,然后按照支付提示的去配置路径,这里给个参考博客,我这是看着来弄的

点iOS 支付宝 ’openssl/asn1.h' file not found 的问题解决办法

第三:文件重复引用(个人的小错误,顺便记录一下,大家可以直观第四点)

在开发集成支付宝sdk的时候,因为在某个文件头引入了.m文件,导致我的项目一直都在报相同文件错误,搞了很久才发现这个的:



第四:应用注册scheme,在AliSDKDemo-Info.plist定义URL types,这一步不能忘记,不然的话是没有办法支付完之后回调到你的程序里面,贴上支付宝提供的示例代码:

// NOTE: 如果加签成功,则继续执行支付
if (signedString != nil) {
//应用注册scheme,在AliSDKDemo-Info.plist定义URL types
NSString *appScheme = @"alisdkdemo";

// NOTE: 将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@",
orderInfoEncoded, signedString];

// NOTE: 调用支付结果开始支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
}

第五:有关于回调处理:支付宝回调不会在

[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];这里得到结果的,它回调已经改变成了在appdelegate.m里面去实现,你只需要在里面加上相关代码(我从支付宝demo里面直接复制的,其实你们可以多点参考demo):
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {

if ([url.host isEqualToString:@"safepay"]) {
// 支付跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];

// 授权跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
// 解析 auth code
NSString *result = resultDic[@"result"];
NSString *authCode = nil;
if (result.length>0) {
NSArray *resultArr = [result componentsSeparatedByString:@"&"];
for (NSString *subResult in resultArr) {
if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
authCode = [subResult substringFromIndex:10];
break;
}
}
}
NSLog(@"授权结果 authCode = %@", authCode?:@"");
}];
}
return YES;
}

// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if ([url.host isEqualToString:@"safepay"]) {
// 支付跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];

// 授权跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
// 解析 auth code
NSString *result = resultDic[@"result"];
NSString *authCode = nil;
if (result.length>0) {
NSArray *resultArr = [result componentsSeparatedByString:@"&"];
for (NSString *subResult in resultArr) {
if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
authCode = [subResult substringFromIndex:10];
break;
}
}
}
NSLog(@"授权结果 authCode = %@", authCode?:@"");
}];
}
return YES;
}


第六:额~暂时没想到还缺什么,以后再补,有什么问题可以直接评论,楼主有空回复
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: