ios 支付宝支付
来源:互联网 发布:程序员的分支种类 编辑:程序博客网 时间:2024/06/10 09:10
https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.GOAs0g&treeId=59&articleId=103676&docType=1
步骤1:启动IDE(如Xcode),把iOS包中的压缩文件中以下文件拷贝到项目文件夹下,并导入到项目工程中。
1
2
AlipaySDK.bundle
AlipaySDK.framework
在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:
其中,需要注意的是:
- 如果是Xcode 7.0之后的版本,需要添加libc++.tbd、libz.tbd;
- 如果是Xcode 7.0之前的版本,需要添加libc++.dylib、libz.dylib(如下图)。
步骤2:在需要调用AlipaySDK的文件中,增加头文件引用。
1
#
import
<AlipaySDK/AlipaySDK.h>
步骤3:如果你的app基于9.0编译,那么为了适配iOS9.0中的App Transport Security(ATS)对http的限制,这里需要对支付宝的请求地址alipay.com、alipayobjects.com做例外,在app对应的info.list中添加如下配置(文中以XML格式描述)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>alipay.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<
true
/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<
true
/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.
0
</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<
false
/>
</dict>
<key>alipayobjects.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<
true
/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<
true
/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.
0
</string>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<
false
/>
</dict>
</dict>
</dict>
说明:
如果商户配置了如下的配置:
1
2
3
4
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><
true
/>
</dict>
则上述的NSAppTransportSecurity可以不配置。
步骤4配置请求信息:#import <AlipaySDK/AlipaySDK.h>
#import "Order.h"
#import "DataSigner.h"
/** * URl types 添加一项必须和以下appScheme字段一样 导入支付宝sdk(AlipaySDK.bundle和AlipaySDK.framework)时一定导入官方demo里的库,下载的sdk包导入会报错。这是个坑 如果是前台生成签名和预订单,导入oppenssl和Util可能会报错,#include <openssl/asn1.h> 头文件找不到等-检查路劲Build setting中Header Search Paths 和Library Search Paths --$(PROJECT_DIR)/支付宝 可能然并卵,改为这种格式即可#include <asn1.h>,所以带openssl都要删,改为绝对路劲即可 */ #pragma mark - 服务器生成预订单返回参数 NSString * path = @"http://guofang.tunnel.qydev.com/videoApp/aliPay/aliOrde/"; NSString * params =[NSString stringWithFormat:@""]; NSMutableURLRequest *request= [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:request]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil]; NSLog(@"-----%@",json); /** 此为打印的json * -----{ "PAY_ORDER_ID" = 74116464d54842e893813d9b3a328000; "_input_charset" = "utf-8"; body = 74116464d54842e893813d9b3a328000; "it_b_pay" = 30m; msg = "\U9884\U652f\U4ed8\U8ba2\U5355\U751f\U6210\U6210\U529f"; "notify_url" = "http://guofang.tunnel.qydev.com/videoApp/aliPay/aliBack"; "out_trade_no" = 050910423796064; partner = 2088221663575744; "payment_type" = 1; "seller_id" = "zhangfantuoba@163.com"; service = "mobile.securitypay.pay"; sign = "vAQdpw7zVTx8nnItXsBwhUSR8ziDRDcizvup1iG5ANhVhzPG52%2BFf61vcAmcbFSbqu6Agg9pDQ%2F4dUcjYt7X8xVPkGOPhl8nDbL5LJU8nivzqKhsRHdZyMLiKB7n0VqF%2FeET%2BiALV9Vy9xwgJKjQ1xDQr588INhV8LuPzf4w9pc%3D"; "sign_type" = RSA; status = success; subject = "\U6d4b\U8bd5\U5546\U54c1"; "total_fee" = "0.01"; } */ PAY_ORDER_ID = json[@"PAY_ORDER_ID"]; _input_charset = json[@"_input_charset"]; body = json[@"body"]; it_b_pay = json[@"it_b_pay"]; notify_url = json[@"notify_url"]; out_trade_no = json[@"out_trade_no"]; partner = json[@"partner"]; payment_type = json[@"payment_type"]; seller_id = json[@"seller_id"]; service = json[@"service"]; sign = json[@"sign"]; sign_type = json[@"sign_type"]; subject = json[@"subject"]; total_fee = json[@"total_fee"]; showURL = @"m.alipay.com";//这个参数一定要拼 NSString * zhifu = [NSString stringWithFormat:@"partner=\"%@\"&seller_id=\"%@\"&out_trade_no=\"%@\"&subject=\"%@\"&body=\"%@\"&total_fee=\"%@\"¬ify_url=\"%@\"&service=\"%@\"&payment_type=\"%@\"&_input_charset=\"%@\"&it_b_pay=\"%@\"&show_url=\"%@\"",partner,seller_id,out_trade_no,subject,body,total_fee,notify_url,service,payment_type,_input_charset,it_b_pay,showURL];//应用注册scheme,在AlixPayDemo-Info.plist定义URL types NSString *appScheme = @"alisdkdemo"; NSString * orderSpec = zhifu;//AL164 参数为空或密钥错误,或签名失败 NSString * orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderSpec,sign,sign_type];//sign 为:商品信息和密钥 签名而得,服务器生成返回的。前台生成如下发示例 [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) { NSLog(@"reslut = %@",resultDic); }]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"请求失败"); }]; [operation start];#pragma mark - 以下为本地生成预订单信息 - 本地生成时官方demo里文件都需导入。libcryto.a libssl.a Order.h 和.m openssl文件和util文件,demo运行是可能报错,私钥找不到什么的, 修改 在RSADataSigner.m文件中 搜索代码 [result appendString:@"-----BEGIN PRIVATE KEY-----\n"]; 将其改成 [result appendString:@"-----BEGIN RSA PRIVATE KEY-----\n"];在RSADataSigner.m文件中 搜索代码 [result appendString:@"\n-----END PRIVATE KEY-----"]; 将其改成 [result appendString:@"\n-----END RSA PRIVATE KEY-----"];
#warning 这三个参数打死也不能告诉别人哦。// NSString *partners = @"商户号";//必填// NSString *seller = @"付款账号";//必填// NSString *privateKey = @"私钥";//必填//// /*// *生成订单信息及签名// */// //将商品信息赋予AlixPayOrder的成员变量// Order *order = [[Order alloc] init];// order.partner = partners;// order.sellerID = seller;// order.outTradeNO = @"S3M7GI9K2EGYCV7"; //订单ID(由商家自行制定)// order.subject = @"测试"; //商品标题// order.body = @"不要钱"; //商品描述// order.totalFee = [NSString stringWithFormat:@"0.01"]; //商品价格// order.notifyURL = @"http://www.xxx.com"; //回调URL// // order.service = @"mobile.securitypay.pay";// order.paymentType = @"1";// order.inputCharset = @"utf-8";// order.itBPay = @"30m";// 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 * signedString = privateKey;// //将签名成功字符串格式化为订单字符串,请严格按照该格式// NSString *orderString = nil;// if (signedString != nil) {// orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",// orderSpec, signedString,@"RSA"];// // [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {// NSLog(@"reslut = %@",resultDic);// }];// }
步骤5,设置支付成功回调:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ // 可通过url.host 来判断支付宝返回的回调 或微信等 if ([url.host isEqualToString:@"safepay"]) { //跳转支付宝钱包进行支付,处理支付结果 [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) { NSString * strTitle = @"支付结果"; // NSLog(@"result = %@----%@",resultDic,[resultDic objectForKey:@"resultStatus"]); if ([[resultDic objectForKey:@"resultStatus"] isEqualToString:@"9000"]) { alipay = @"成功"; aliMsg = @"您已支付成功,若还提示您付费,请使用自助激活功能。"; }else{ alipay = @"失败"; aliMsg = @"支付结果:失败!"; } UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:aliMsg delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; alert.delegate = self; alert.tag = 1; [alert show]; }]; } return YES;}
1 0
- iOS 支付宝支付
- ios 支付宝支付
- iOS 支付宝支付
- IOS支付宝支付
- iOS 支付宝支付
- 支付宝支付iOS
- iOS 支付宝支付
- ios 支付宝支付
- iOS支付宝支付
- iOS支付宝支付
- iOS- 支付宝支付
- ios支付宝支付
- iOS 支付宝支付
- 支付宝支付iOS
- iOS 支付宝支付
- iOS 第三方支付 支付宝支付
- 微信支付,支付宝支付 iOS
- iOS支付宝支付步骤
- Windows server 2012r2 更改盘符
- iOS开发之基础视图——UIImageView
- android 和 phonegap(Cordova)交互使用Zxing二维码扫描
- 关于mysql遇到Cannot create PoolableConnectionFactory (Access denied for user 'root'@'localhost' (using p
- 设计模式——观察者模式——初步
- ios 支付宝支付
- Android自定义控件(特效三) 自定义View实现图片验证码
- pat 列车厢调度
- invocationHandler动态代理的使用
- Android-SIM卡信息相关
- 统计Xcode工程代码量
- Loadrunner11.0 录制手机App脚本的方法
- 关于django migrations的使用
- 欢迎使用CSDN-markdown编辑器