本文Demo地址
1.下載支付寶SDK以及Demohttps://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1
2.解壓下載的.zip包,選擇iOS客戶端,看到的目錄結(jié)構(gòu)如下

3.導(dǎo)入AliSDKDemo中的AliAlipaySDK.bundle AlipaySDK.framework libcrypto.a libssl.a四個文件到工程中

4.導(dǎo)入demo中相關(guān)文件到項目中

5.導(dǎo)入后項目結(jié)構(gòu)應(yīng)該是這樣的 其中AliPaySDK是筆者新建的文件夾用于存放支付寶項目文件的,你們可以自己創(chuàng)建文件夾

6.導(dǎo)入系統(tǒng)依賴庫

7.此時如果編譯的話,會報錯

解決方法 在
Header Search Paths中添加AliPaySDK路徑
注意 AliPaySDK為筆者自己創(chuàng)建的文件目錄 ,你們可以自行創(chuàng)建,然后換成自己的路徑就可以了

8.客戶端調(diào)用支付寶SDK
#import "ViewController.h"
#import "Order.h"
#import "APAuthV2Info.h"
#import "DataSigner.h"
#import <AliPaySDK/AlipaySDK.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIButton *payButton = [UIButton buttonWithType:UIButtonTypeCustom];
payButton.frame = CGRectMake(10, 100, self.view.frame.size.width-20, 40);
[payButton setTitle:@"pay 0.01元" forState:UIControlStateNormal];
[payButton setTitle:@"pay 0.01元" forState:UIControlStateSelected];
[payButton setBackgroundColor:[UIColor orangeColor]];
[payButton addTarget:self action:@selector(payAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:payButton];
}
/**
* 支付按鈕
*/
- (void)payAction
{
/*============================================================================*/
/*=======================需要填寫商戶app申請的===================================*/
/*============================================================================*/
NSString *partner = @"2088*********"; /** 合作商戶ID PID */
NSString *seller = @"填寫支付寶賬號"; /** 支付寶賬號ID */
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.seller = seller;
order.tradeNO = [self generateTradeNO]; //訂單ID(由商家自行制定)
order.productName = @"runbey測試商品"; //商品標題
order.productDescription = @"runbey商品描述"; //商品描述
order.amount = @"0.01"; //商品價格
order.notifyURL = @"http://*****"; //回調(diào)URL 異步通知服務(wù)器支付結(jié)果,便于服務(wù)器更新訂單狀態(tài)
//實際項目開發(fā)中 訂單信息應(yīng)該由服務(wù)器返回
order.service = @"mobile.securitypay.pay";
order.paymentType = @"1";
order.inputCharset = @"utf-8";
order.itBPay = @"30m";
order.showUrl = @"m.alipay.com";
//應(yīng)用注冊scheme 便于支付結(jié)束后重新打開客戶端
NSString *appScheme = @"ybpaydemo";
//將商品信息拼接成字符串
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"];
NSLog(@"簽名字符串:%@",orderString);
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"支付結(jié)果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;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
9.針對以上代碼做幾點說明
-
如何獲取商戶私鑰
privateKey鏈接地址
1.Mac終端中輸入
openssl進入Openssl程序
- 生成私鑰 命令
genrsa -out rsa_private_key.pem 1024
3.iOS客戶端需要將生成的私鑰轉(zhuǎn)換成PKCS8格式 命令pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
獲取到pkcs8格式的字符串就是項目中需要的privatekey,取-----BEGIN PRIVATE KEY-----和 -----END PRIVATE KEY-----
中間的部分 切記!?。。?/em>
4.生成公鑰 命令 rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
-
支付寶集成出現(xiàn)“系統(tǒng)繁忙,請稍后重試(ALI64)”錯誤的解決辦法
1.用記事本打開上面第四步生成的公鑰 rsa_public_key.pem,并將里面的密鑰拷貝出來,粘貼到
合作伙伴密鑰管理中得RSA加密里,特別需要注意的是,需要將密鑰中的空格、回車等刪除,使該密鑰為一行字符串。
2.用記事本打開上面第四步生成的公鑰 rsa_public_key.pem,并將里面的密鑰拷貝出來,粘貼到開放平臺密鑰管理中得RSA加密里,特別需要注意的是,需要將密鑰中的空格、回車等刪除,使該密鑰為一行字符串。
至此,完成了支付寶iOS客戶端的集成。
記錄點滴,與君共勉。