1. 环境配置
1). 从支付宝官网下载demo,新建文件夹“AliSDK”。把demo中的下列文件(AlipaySDK.bundle AlipaySDK.framework openssl Util Order.h Order.m libcrypto.a libssl.a)复制到“AliSDK”文件中。
2). 新建一个工程,把AliSDK 添加到工程内。
3). 新建pch文件并添加如下信息。
4). 添加pch文件路径
5). 添加依赖库
6). 添加openssl路径
到此为止 编译运行 没问题 开始敲代码
二. 编写代码
在ViewController.m中
#import "ViewController.h"#import "Order.h"#import#import "DataSigner.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIButton*button=[UIButton buttonWithType:UIButtonTypeCustom]; button.frame=CGRectMake(100, 200, 200, 50); button.backgroundColor=[UIColor lightGrayColor]; [button setTitle:@"支付宝支付" forState:UIControlStateNormal]; [button addTarget:self action:@selector(btClick:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; }-(void)btClick:(id)sender{/* *商户的唯一的parnter和seller。 *签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。 */ /*============================================================================*/ /*=======================需要填写商户app申请的===================================*/ /*============================================================================*/ NSString*partner=@"000000000000";//合作商户ID NSString*seller=@"";//支付宝账户 NSString*privateKey=@"";//PKCS8格式的私钥 /*============================================================================*/ /*============================================================================*/ /*============================================================================*/ //partner和seller获取失败,提示 if (partner.length==0||seller.length==0||privateKey.length==0) { UIAlertController*alertController=[UIAlertController alertControllerWithTitle:@"提示" message:@"缺少partner或者seller或者私钥" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction*sureAction=[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil]; [alertController addAction:sureAction]; [self presentViewController:alertController animated:NO completion:nil]; } /* *生成订单信息及签名 */ //将商品信息赋予AlixPayOrder的成员变量 Order*order=[[Order alloc]init]; order.partner=partner; order.sellerID=seller; order.outTradeNO=[self generateTradeNO];//订单ID(由商家自定义) order.subject=@"支付宝测试支付";//商品标题 order.body=@"支付宝测试支付数据";//商品描述 order.totalFee=@"0.01";//商品价格 // order.notifyURL = @"http://www.baidu.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=@"paypast"; //将商品信息拼接成字符串 NSString*orderSpec=[order description]; //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode id signer = CreateRSADataSigner(privateKey); NSString *signedString = [signer signString:orderSpec]; //将签名成功字符串格式化为订单字符串,请严格按照该格式 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 = %@\n",resultDic); }]; }}#pragma mark -#pragma mark ==============产生随机订单号==============- (NSString *)generateTradeNO{ static int kNumber = 15; NSString *sourceStr = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; NSMutableString *resultStr = [[NSMutableString alloc] init]; srand((unsigned)time(0)); for (int i = 0; i < kNumber; i++) { unsigned index = rand() % [sourceStr length]; NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)]; [resultStr appendString:oneStr]; } return resultStr;}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
4. 设置回调
5. 回调在AppDelegate.m中
// NOTE: 9.0以后使用新API接口- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options{ if ([url.host isEqualToString:@"safepay"]) { //跳转支付宝钱包进行支付,处理支付结果 [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) { NSLog(@"*result = *%@",resultDic); }]; } return YES;}