本文章不再赘述其他的知识点。相信大家已经有了支付宝集成的基础。官方文档已经非常详细,下面开始讲述我的集成史(谨记)。。。
步骤分为以下几步:
1.引入SDK,拖入工程;
AlipaySDK.bundle , AlipaySDK.framework , libcrypto.a , libssl.a , openssl(文件夹) , Util(文件夹) ,order.h, order.m . 如图:
2.引入必要的依赖库;
3.在工程的TARGETS---Info ,找到 URL Types ,添加 URL Schemes .假设为:@"ZJJAPP" 。 创建一个pch,在里面写上:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
4. otherlinkerflags,pch,bitcode,Header Search Paths等等...这样的配置就不在此细说,如果配置的过程中有什么问题,相信你可以解决的。
5.代码部分
在APPDelegate.m:引入头文件
#import <AlipaySDK/AlipaySDK.h>
#pragma mark - 支付宝的配置
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
if ([url.hostisEqualToString:@"safepay"]) {
// 支付跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
// 授权跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDKdefaultService]processAuth_V2Result:urlstandbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
// 解析 auth code
NSString *result = resultDic[@"result"];
NSString *authCode =nil;
if (result.length>0) {
NSArray *resultArr = [resultcomponentsSeparatedByString:@"&"];
for (NSString *subResultin resultArr) {
if (subResult.length >10 && [subResulthasPrefix:@"auth_code="]) {
authCode = [subResult substringFromIndex:10];
break;
}
}
}
NSLog(@"授权结果 authCode = %@", authCode?:@"");
}];
}
returnYES;
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*,id> *)options
{
if ([url.hostisEqualToString:@"safepay"]) {
// 支付跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
// 授权跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDKdefaultService]processAuth_V2Result:urlstandbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
// 解析 auth code
NSString *result = resultDic[@"result"];
NSString *authCode =nil;
if (result.length>0) {
NSArray *resultArr = [resultcomponentsSeparatedByString:@"&"];
for (NSString *subResultin resultArr) {
if (subResult.length >10 && [subResulthasPrefix:@"auth_code="]) {
authCode = [subResult substringFromIndex:10];
break;
}
}
}
NSLog(@"授权结果 authCode = %@", authCode?:@"");
}];
}
returnYES;
}
- (void)beginToPay {
// 配置 appid还有私钥
NSString *appID =@"支付宝分配给开发者的应用ID";
NSString *privateKey =@"私钥";
//将商品信息赋予AlixPayOrder的成员变量
Order* order = [Ordernew];
// NOTE: app_id设置
order.app_id = appID;
// NOTE: 支付接口名称
order.method =@"alipay.trade.app.pay";
// NOTE: 参数编码格式
order.charset =@"utf-8";
// NOTE: 当前时间点
NSDateFormatter* formatter = [NSDateFormatternew];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
order.timestamp = [formatterstringFromDate:[NSDatedate]];
// NOTE: 支付版本
order.version =@"1.0";
// NOTE: sign_type设置
order.sign_type =@"RSA";
// NOTE: 商品数据
order.biz_content = [BizContentnew];
// order.biz_content.body = resultProductNameStr;//非必填,在此。。。我注掉
order.biz_content.subject =@"1"; //商品数量
order.biz_content.out_trade_no = [selfgenerateTradeNO];//订单ID(由商家自行制定)
order.biz_content.timeout_express =@"30m";//超时时间设置
order.biz_content.total_amount =@"0.01";//商品价格
//将商品信息拼接成字符串
NSString *orderInfo = [orderorderInfoEncoded:NO];
NSString *orderInfoEncoded = [orderorderInfoEncoded:YES];
//NSLog(@"orderSpec = %@",orderInfo);
// NOTE: 获取私钥并将商户信息签名,外部商户的加签过程请务必放在服务端,防止公私钥数据泄露;
// 需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id<DataSigner> signer =CreateRSADataSigner(privateKey);
NSString *signedString = [signersignString:orderInfo];
// NOTE: 如果加签成功,则继续执行支付
if (signedString !=nil) {
//应用注册scheme,在AliSDKDemo-Info.plist定义URL types
NSString *appScheme =@"ZJJAPP";
// NOTE: 将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = [NSStringstringWithFormat:@"%@&sign=%@",
orderInfoEncoded, signedString];
// NOTE: 调用支付结果开始支付
[[AlipaySDKdefaultService]payOrder:orderStringfromScheme:appSchemecallback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
}
}
最后,支付宝配置就结束了。。。