因为项目中需要用到支付,所以这一周就开始集成支付,因为微信支付貌似需要缴纳200元才能使用微信第三方登陆,支付等功能,所以公司先要求集成支付宝,百度了一下,集成支付宝的过程,很多人都说集成支付宝太坑了,但我觉的前端还好,坑的是后台,后台天天吆喝着支付宝官方的文档和demo太坑了,如果是后台的话,不要太相信支付宝官方文档和demo,话不多说,集成开始!!!!!
<br />
微信扫一扫
<br />
https://github.com/chenyang-ios/alipay.git
里面有官方demo和sdk,下这个就行,在一起呢!!!
<br />
<br />
<br />
<br />
在info.plist里面添加
<br />
增加一个预编译头文件,导入
import <Foundation/Foundation.h>
import <UIKit/UIKit.h>
<br />
解决办法:Targets->Build Settings->Header Search Path中添加AliPaySDK文件夹的路径
<br />
"
//1. partnerID
NSString *partnerID = @"2088421512225446";
//2. sellerID
NSString *sellerId = @"miracle@mcqiji.com";
//3. 私钥
NSString *privatekey = @"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALvqLWelnudXoSuEWXS+8RUMiTg0qrFWP2PrDFg9Keb9DyiCJbabZp7eoX1EJxETWuoXsNpmTS0IkYG5GSMdEcf1kFYR8XRr4dkFsXv+cOd0i+uXm26/IlYm48jX6VANtQBqESbv+7vYQoPeCD6fPh2bqD9BLaRtyGs10bGBm0GFAgMBAAECgYBT6K19qqbaBnchR2fqiZh9HavoPRw7M5f6teo9PJKJYlZycCsG7z1Tk3XoyZXoOgxOm2WNIEE16q2Oj2h6FXDqY7n17bw64lxERpFIMzuKEqVSGeDqHaVEFtN1EE1XRH04DY00UQEaIEpdX0FeRkxzpHWeRVQUpPreX0wT3ENBwQJBAPZSRBjrhPlO8xRhq4uGBp4bejNbYilgIhkkCC5/qYIBUxwoW4kSYvsJ/8tywYQ5I8I6Py1bRBBocyUFNe2yhvMCQQDDTGcBZv9Gs5etGWC3MFNYwQXDip3iL6R7Rv8xuD70N9YUneVPxP+Nikb2dihbuvyAMIfjyt70rwVp3c+gBiOnAkAHl5mJuxiqJojPhAMplcP2c5pcouBvrgrfA4FNDZpH64qIP6Yyn2J1omVD/BGC5c/4WJtB5qI+bzm9Vl/HJ82JAkEAgLzfdbQweKmwRUHiWD954ZqzsvewJcakFUNyu5KppREdhM+ktpW0o9fP+W1gIz+6bMIRAd7cY8zvs56s297QJwJAFSROxXaKUTQJ2DPrDL6YPE+7QjuS31KJMhJXWs7XPWWELigdHYrhCDPO5BQb7Vkz9p5prZRUDIINZbqJA7qSHQ==";
/*
*生成订单信息及签名
*/
//将商品信息赋予AlixPayOrder的成员变量
Order *order = [[Order alloc] init];
order.partner = partnerID;
order.sellerID = sellerId;
order.outTradeNO = _num; //订单ID(由商家自行制定)
order.subject = _titl; //商品标题
order.body = _cont; //商品描述
order.totalFee = [NSString stringWithFormat:@"%@",jiage]; //商品价格
order.notifyURL = huiURL; //回调URL
order.service = @"mobile.securitypay.pay";
order.paymentType = @"1";
order.inputCharset = @"utf-8";
order.itBPay = min;
order.showURL = @"m.alipay.com";
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types
NSString *appScheme = @"alisdkdemo";
//将商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@"orderSpec = %@",orderSpec);
// //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
// id<DataSigner> signer = CreateRSADataSigner(privatekey);
//
// NSString *signedString = [signer signString:orderSpec];
//将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = nil;
if (qianming != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec,qianming, @"RSA"];
NSLog(@"%@",orderString);
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
} ```
####为了安全订单信息都是后台给你的

####这个官方签名订单信息,官方demo把订单号和签名都放在前端了,但是实际开发是签名订单号都是后台做的,让后台给你就行,到时候这两句话屏蔽,将

####将官方的画框的直接替换成从后台获取的的签名就行
<br />
####在appdelegate.m文件的代码,有两个方法,一个是9.0之后的,一个是9.0之前的,为了安全我都写了
导入头文件
import <AlipaySDK/AlipaySDK.h>
<br />
//9.0之后的
(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
//如果极简开发包不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给开发包
if ([url.host isEqualToString:@"alisdkdemo"]) {
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
NSLog(@"result = %@",resultDic);
NSInteger orderState=[resultDic[@"resultStatus"] integerValue];
if (orderState==9000) {
NSString *allString=resultDic[@"result"];
NSString * FirstSeparateString=@"\"&";
NSString * SecondSeparateString=@"=\"";
NSMutableDictionary *dic=[NSMutableDictionary dictionaryWithDictionary:[UserInfo VEComponentsStringToDic:allString withSeparateString:FirstSeparateString AndSeparateString:SecondSeparateString]] ;
NSLog(@"ali=%@",dic);
if ([dic[@"success"]isEqualToString:@"true"]) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"AliPaySucceed" object:nil userInfo:dic];
NSLog(@"支付成功");
[[NSNotificationCenter defaultCenter] postNotificationName:@"result" object:nil userInfo:resultDic];
}
}else{
NSString *returnStr;
switch (orderState) {
case 8000:
returnStr=@"订单正在处理中";
break;
case 4000:
returnStr=@"订单支付失败";
break;
case 6001:
returnStr=@"订单取消";
break;
case 6002:
returnStr=@"网络连接出错";
break;
default:
break;
}
}
}];
}
if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回authCode
[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
//9.0之前的方法
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
NSInteger orderState=[resultDic[@"resultStatus"] integerValue];
if (orderState==9000) {
NSString *allString=resultDic[@"result"];
NSString * FirstSeparateString=@"\"&";
NSString * SecondSeparateString=@"=\"";
NSMutableDictionary *dic=[NSMutableDictionary dictionaryWithDictionary:[UserInfo VEComponentsStringToDic:allString withSeparateString:FirstSeparateString AndSeparateString:SecondSeparateString]] ;
NSLog(@"ali=%@",dic);
if ([dic[@"success"]isEqualToString:@"true"]) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"AliPaySucceed" object:nil userInfo:dic];
NSLog(@"支付成功");
[[NSNotificationCenter defaultCenter] postNotificationName:@"result" object:nil userInfo:resultDic];
}
}else{
NSString *returnStr;
switch (orderState) {
case 8000:
returnStr=@"订单正在处理中";
break;
case 4000:
returnStr=@"订单支付失败";
break;
case 6001:
returnStr=@"订单取消";
break;
case 6002:
returnStr=@"网络连接出错";
break;
default:
break;
}
}
}];
return YES;
} ```
在appdelegate里面
在点击支付的里面
相关推荐