導(dǎo)入支付寶所需要的SDK和文件
編譯之后會報錯
這個坑,坑死N多猿
選擇Show in Finder
Paste_Image.png
Paste_Image.png
如果拉進去還是報一個錯,試多幾次,或者重啟Xcode ,看見報30個錯就成功了..........
Paste_Image.png
這30個錯誤是因為沒有導(dǎo)入支付寶依賴的庫
Paste_Image.png
方便大家copy
libc++.tbd
libz.tbd
Foundation.framework
UIKit.framework
CoreGraphics.framework
CoreText.framework
QuartzCore.framework
CoreTelephony.framework
CFNetwork.framework
CoreMotion.framework
SystemConfiguration.framework
在info里面的URL Types的配置,配置了才能讓支付寶跳轉(zhuǎn)回到你的APP,代碼里面也要設(shè)置
Paste_Image.png
Paste_Image.png
下面是我的代碼
ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button1 = [[UIButton alloc]initWithFrame:CGRectMake(20, 20, 200, 44)];
[button1 setTitle:@"0.01" forState:UIControlStateNormal];
button1.backgroundColor = [UIColor redColor];
[button1 addTarget:self action:@selector(click1) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button1];
UIButton *button2 = [[UIButton alloc]initWithFrame:CGRectMake(20, 120, 200, 44)];
[button2 addTarget:self action:@selector(click2) forControlEvents:UIControlEventTouchUpInside];
[button2 setTitle:@"0.02" forState:UIControlStateNormal];
button2.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:button2];
}
- (void)click1
{
[self pushAliPay:@"0.01"];
}
- (void)click2
{
[self pushAliPay:@"0.02"];
}
- (void)pushAliPay:(NSString *)str_price
{
/*============================================================================*/
/*=======================需要填寫商戶app申請的===================================*/
/*============================================================================*/
NSString *partner = @"";
NSString *seller = @"";
NSString *privateKey = @"";
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
//partner和seller獲取失敗,提示
if ([partner length] == 0 ||
[seller length] == 0 ||
[privateKey length] == 0)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"缺少partner或者seller或者私鑰。"
delegate:self
cancelButtonTitle:@"確定"
otherButtonTitles:nil];
[alert show];
return;
}
/*
*生成訂單信息及簽名
*/
//將商品信息賦予AlixPayOrder的成員變量
Order *order = [[Order alloc] init];
order.partner = partner;
order.sellerID = seller;
order.outTradeNO = [self generateTradeNO]; //訂單ID(由商家自行制定)
order.subject = @"商品標題"; //商品標題
order.body = @"我是商品描述"; //商品描述
order.totalFee = [NSString stringWithFormat:@"%.2f",[str_price doubleValue]]; //商品價格
order.notifyURL = @"http://www.xxx.com"; //回調(diào)URL.問后臺要
order.service = @"mobile.securitypay.pay";
order.paymentType = @"1";
order.inputCharset = @"utf-8";
order.itBPay = @"30m";
order.showURL = @"m.alipay.com";
//應(yīng)用注冊scheme,在AlixPayDemo-Info.plist定義URL types
NSString *appScheme = @"alisdkdemo";//這里設(shè)置支付寶回調(diào)
//將商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@"orderSpec = %@",orderSpec);
//獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode
id<DataSigner> 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 = %@",resultDic);
}];
}
}
pragma mark -
pragma mark ==============產(chǎn)生隨機訂單號==============
- (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;
}
記得填寫商戶ID/賬號ID/私鑰,不然肯定報錯的
Paste_Image.png
Paste_Image.png