支付寶iOSsdk官方下載sdk地址:https://b.alipay.com/order/productDetail.htm?productId=2013080604609654&tabId=4#ps-tabinfo-hashphp
快捷支付(無線)是一種程序式的支付方式,在手機、掌上電腦等無線設備的應用程序內,買家可經過支付寶進行付款購買特定服務或商品,資金即時到帳。java
第一步:c++
1 公司帳戶:企業支付寶帳號就申請 註冊企業帳號,若是是我的帳戶,就申請個體工商戶。api
服務端 負責生成訂單及簽名,及接受支付異步通知。
客戶端 負責使用服務端傳來的訂單信息調用支付寶支付接口,及根據SDK同步返回的支付結果展現結果頁。服務器
私鑰必須放在服務端,簽名過程必須放在服務端。微信
步驟1:啓動IDE(如Xcode),把iOS包中的壓縮文件中如下文件拷貝到項目文件夾下,並導入到項目工程中。app
1
2
|
AlipaySDK.bundle
AlipaySDK.framework
|
在Build Phases選項卡的Link Binary With Libraries中,增長如下依賴:dom
其中,須要注意的是:異步
步驟2:在須要調用AlipaySDK的文件中,增長頭文件引用。測試
1
|
#
import
<AlipaySDK/AlipaySDK.h>
|
若是你的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能夠不配置。
步驟3:對接,對接以前,須要索取後臺的不少信息
//合做身份者id,以2088開頭的16位純數字
#define PartnerID @"2088一串數字"
//收款支付寶帳號/接口名稱
#define SellerID @"2944983890@qq.com"
//支付寶公鑰
#define AlipayPubKey @"MIGf一串很長很長信息"
//商戶私鑰,自助生成
#define PartnerPrivKey @"很長很長很長"
//服務器異步通知頁面路徑/支付結果,支付寶會通知服務器
alipayNotifServerURL = @
"一個網址"
;
步驟4:配置請求信息。
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
29
30
31
32
33
34
35
36
37
38
|
Order *order = [[Order alloc] init];
order.partner = partner;
order.seller = seller;
order.tradeNO = [self generateTradeNO];
//訂單ID(由商家?自?行制定)
order.productName = product.subject;
//商品標題
order.productDescription = product.body;
//商品描述
order.amount = [NSString stringWithFormat:@
"%.2f"
,product.price];
//商
品價格
order.service = @
"mobile.securitypay.pay"
;
order.paymentType = @
"1"
;
order.inputCharset = @
"utf-8"
;
order.itBPay = @
"30m"
;
//應用註冊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 *orderString = nil;
if
(signedString != nil) {
orderString = [NSString stringWithFormat:@
"%@&sign=\"%@\"&sign_type=\"%@\""
,
orderSpec, signedString, @
"RSA"
];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
//【callback處理支付結果】
NSLog(@
"reslut = %@"
,resultDic);
}];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
|
詳細可參見Demo中示例文件
步驟5:調用支付寶
1
2
3
4
5
6
7
8
9
10
11
12
|
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@
"reslut = %@"
,resultDic);
if
([resultDic[@
"resultStatus"
] intValue]==9000) {
//進入充值列表頁面
NSLog(@
"支付成功"
);
}
else
{
NSString *resultMes = resultDic[@
"memo"
];
resultMes = (resultMes.length<=0?@
"支付失敗"
:resultMes);
NSLog(@
"%@"
,resultMes);
}
}];
|
你可能會發現回調不行->設置回調shema
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//上面支付時已經傳給了支付寶客戶端回調shema名稱
NSString *appScheme = URLScheme;
//具體設置shema方法此處就再也不累贅,這兒須要處理來自支付寶shema回調,才能完成上面方法的block回調
在APPDelegate -
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
//跳轉支付寶錢包進行支付,處理支付結果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@
"result = %@"
,resultDic);
}];
return
YES;
}
|
2.1 請去看銀聯文檔和demo
2.2 導入對應的庫
SDK說明
SDK分爲如下兩個版本:
① 支持純無卡交易靜態庫,如下簡稱UPPayPlugin,包含文件:
1
2
3
|
UPPayPlugin.h
UPPayPluginDelegate.h
libUPPayPlugin.a
|
② 支持純無卡交易和VIPOS音頻口支付靜態庫,如下簡稱UPPayPluginPro,包含文件:
1
2
3
|
UPPayPluginPro.h
UPPayPluginDelegate.h
libUPPayPluginPro.a
|
大概這兩個庫就是上述那樣(嗯,裝懂了),具體問商務/後者後臺,咱們只須要知道
②須要將.m改爲.mm (應該是用c++封裝的音頻...??)
添加SDK包
a) 根據商戶選擇的SDK版本,將sdk/inc目錄和sdk/libs目錄下對應版本的三個文件添加到UPPayDemo工程中;
b) 若是你選擇的是UPPayPlugin版本,添加QuartzCore.framework、Security.framework到工程中;
c) 若是你選擇的是UPPayPluginPro版本,添加QuartzCore.framework、AudioToolbox.framework, CoreAudio.framework、 MediaPlayer.framework, AVFoundation.framework和Security.framework到工程中;
d) 在工程的Build Settings中找到Other Linker Flags中添加-ObjC宏;
導入到工程
2.3 對接
在須要調用支付控件的源文件內引用頭文件 UPPayPlugin.h 或 UPPayPluginPro.h(注意:若是工程的 compile source as 選項的值不是 Objective–C++,則引用此頭文件的文件類型都要改成.mm)
經過調用一下startPay方法
1
2
3
4
|
+ (BOOL)startPay:(NSString*)tn
mode:(NSString*)mode
viewController:(UIViewController*)viewController
delegate:(id)delegate;
|
-------------2個參數說明(必填)-------------------
1
2
3
4
|
tn NSString* 交易流水號信息,銀聯後臺生成,經過商戶後臺返回到客戶端並傳入支付控件;
mode NSString* 接入模式設定,兩個值:@
"00"
:表明接入生產環境(正式版本須要);@
"01"
:表明接入開發測試環境(測試版本須要);
viewController UIViewController* 商戶應用程序調用銀聯手機支付的當前UIViewController;
delegate id 實現UPPayPluginDelegate方法的UIViewController;
|
嗯,這些都是文檔中的,請仔細看看[上線的時候必定要修改mode模式]。
mode在測試環境下,銀聯給的測試號 tn=@"01" 測試環境
測試使用卡號、手機號信息(此類信息僅供測試,不會發生正式交易)招商銀行預付費卡:
銀行卡號:6216261000000000018
身份證號:341126197709218366
手 機 號 :13552535506
驗 證 碼 :123456 【要點擊獲取驗證碼,否則提交會報錯】
viewcontroller須要幹這些事情
*引入頭文件 \
#import "UPPayPluginPro.h"
*調用接口
[UPPayPluginPro startPay:tn mode:self.tnMode viewController:self delegate:self];
*實現對應代理方法
\
#pragma mark UPPayPluginResult
- (void)UPPayPluginResult:(NSString \*)result
{
NSString\* msg = [NSString stringWithFormat:@
"%@"
, result];
NSLog(@
"msg%@"
,msg);
if
([result isEqualToString:@
"msgcancel"
]) {
NSLog(@
"取消銀聯支付..."
);
}
else
if
([result containsString:@
"success"
]){
NSLog(@
"支付成功"
);
}
}
3、微信支付
微信sdk下載網址:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1
3.1 請去看微信文檔和demo
微信支付工做以前的流程:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317780&token=ac5f0fd38fc8821171addbfdf5cc7d3af93cb305&lang=zh_CN
微信支付文檔地址:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_1
3.2 導入對應的庫
1.開發微信APP支付,須要先去微信開放平臺申請移動應用,並開通微信支付功能,經過審覈後方可進行開發;
2.用XCode打開項目,【項目屬性】-【Info】-【URL Schemes】設置微信開放平臺申請的應用APPID,如圖文件夾下"設置appid.jpg"所示。若是這的APPID設置不正確將沒法調起微信支付;
3.須要調用代碼註冊APPID:[WXApi registerApp:APP_ID withDescription:@"demo 2.0」];項目該APPID需與步驟2中APPID保持一致;
4.支付請求:WXApiRequestHandler.m中的jumpToBizPay方法實現了喚起微信支付;
5.支付完成回調:WXApiManager.m中的onResp方法中接收返回支付狀態。
但願各位多多指教。