前期準備
- 接入前期準備工作包括商戶簽約和密鑰配置,已完成商戶可略過。
- 下載支付寶SDK支付寶SDK下載地址
SDK集成流程
-
將支付寶SDK中以下文件拷貝到項目文件夾下,并導入開發(fā)環(huán)境中。
AlipaySDK.bundle
AlipaySDK.framework
libcrypto.a
libssl.a
AliSDKDemo\\Util 及下面所有文件
AliSDKDemo\\openssl 及下面所有文件
Order.h和Order.m -
導入系統(tǒng)依賴庫
在link Binary With Libraries 里面添加
CoreMotion.framework
CFNetwork.framework
SystemConfiguration.framework
QuartzCore.framework
CoreText.framework
CoreTelephony.framework
CoreGraphics.framework
libc++.tbd
libz.tbd加上之前導入的3個
AlipaySDK.framework
libcrypto.a
libssl.a共計12個
在需要使用SDK的文件中,增加頭文件引用。
#import <AlipaySDK/AlipaySDK.h>
#import "Order.h"
#import "DataSigner.h"
#import <AliPaySDK/AlipaySDK.h>
但是會出現(xiàn)錯誤:

這是為什么呢,原因是項目沒有找到之前導入的AliSDKDemo\\Util 及下面所有文件,AliSDKDemo\\openssl 及下面所有文件頭文件,解決方法 在項目文件夾中找到Util和openssl文件夾 ,在Header Search Paths中添加路徑

到這一步,SDK集成已經(jīng)完畢
配置代碼
- 配置alipay支付
#pragma mark ==============配置alipay支付==============
- (void)payAction
{
/*
*生成訂單信息及簽名
*/
//將商品信息賦予AlixPayOrder的成員變量
Order *order = [[Order alloc] init];
order.partner = @"";//商戶在支付寶簽約時,支付寶為商戶分配的唯一標識號(以2088開頭的16位純數(shù)字)。
order.sellerID = @"";////賣家支付寶賬號對應的支付寶唯一用戶號(以2088開頭的16位純數(shù)字),訂單支付金額將打入該賬戶,一個partner可以對應多個seller_id。
order.outTradeNO = [self generateTradeNO]; //訂單ID(由商家自行制定)
order.subject = @"測試商品"; //商品的標題/交易標題/訂單標題/訂單關鍵字等。
order.body = @"runbey商品描述"; //對一筆交易的具體描述信息。如果是多種商品,請將商品描述字符串累加傳給body。
order.totalFee = @"0.01"; //該筆訂單的資金總額,單位為RMB(Yuan)。取值范圍為[0.01,100000000.00],精確到小數(shù)點后兩位。
order.notifyURL = @"http://*****"; //支付寶服務器主動通知商戶網(wǎng)站里指定的頁面http路徑。
//實際項目開發(fā)中 訂單信息應該由服務器返回
order.service = @"mobile.securitypay.pay";
order.paymentType = @"1";
order.inputCharset = @"utf-8";
order.itBPay = @"30m";
order.showURL = @"m.alipay.com";
//應用注冊scheme 便于支付結(jié)束后重新打開客戶端
NSString *appScheme = @"";
//將商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@"orderSpec = %@",orderSpec);
//獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode
NSString * privateKey = @"";//商戶私鑰
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 ==============產(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;
}
此時運行,這2個文件:
base64.h openssl_wrapper.h
會出現(xiàn):
Cannot find interface declaration for 'NSObject', superclass of 'Base64'
那么需要打開的文件base64.h openssl_wrapper.h,頂部添加頭:
#import <Foundation/Foundation.h>
- 配置返回處理代碼
在 AppDelegate.m 文件中,增加引用代碼:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
//如果極簡 SDK 不可用,會跳轉(zhuǎn)支付寶錢包進行支付,需要將支付寶錢包的支付結(jié)果回傳給 SDK
if ([url.host isEqualToString:@"safepay"])
{
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
- 添加URL Schemes
點擊項目名稱,點擊“Info”選項卡,在“URL Types”選項中,點擊“+”, 在“URL Schemes”中輸入項目的bundleid。“bundleid”來自于 NSString *appScheme = @"****"(一般為項目的bundleid)

至此,完成了支付寶iOS客戶端的配置
微信支付撰寫中。。。。
后記:
有朋友反饋,運行時在 rsa.h中,會出現(xiàn):

解決方法:
在在項目文件夾中找到找到和項目同名的文件夾 ,在Header Search Paths中添加路徑
一樣把文件夾拖進去!
