iOS-iOS 支付 [支付寶、銀聯、微信](轉)

支付寶iOSsdk官方下載sdk地址:https://b.alipay.com/order/productDetail.htm?productId=2013080604609654&tabId=4#ps-tabinfo-hashphp

快捷支付(無線)是一種程序式的支付方式,在手機、掌上電腦等無線設備的應用程序內,買家可經過支付寶進行付款購買特定服務或商品,資金即時到帳。java

第一步:c++

1 公司帳戶:企業支付寶帳號就申請 註冊企業帳號,若是是我的帳戶,就申請個體工商戶api

接入前準備階段

    1. 商戶簽約審覈
      簽約審覈具體步驟請參見簽約與審覈
    2. 商戶密鑰管理
      密鑰做用
      1. 生成步驟
      2. 上傳步驟

正式接入階段

服務端 負責生成訂單及簽名,及接受支付異步通知。
客戶端 負責使用服務端傳來的訂單信息調用支付寶支付接口,及根據SDK同步返回的支付結果展現結果頁。服務器

服務端接入

私鑰必須放在服務端,簽名過程必須放在服務端。微信

  1. 準備
    1. 肯定開發語言
    2. 肯定編碼格式
    3. 肯定簽名方式(PID + 密鑰)
    4. 肯定服務器配置
  2. 支付訂單參數拼裝及加簽
  3. 通知處理何時會通知?收到通知時注意驗籤。

客戶端接入

    1. iOS接入
      1. 接口說明
      2. Demo示例(爲了demo方便請求參數拼裝和加簽都放在了客戶端, 應該都放服務端
    2. Android接入
      1. 接口說明
      2. Demo示例(爲了demo方便請求參數拼裝和加簽都放在了客戶端, 應該都放服務端
    3. 請求參數說明
    4. 結果參數說明

 

導入代碼

更新時間:2015/11/05 訪問次數:58075
 

步驟1:啓動IDE(如Xcode),把iOS包中的壓縮文件中如下文件拷貝到項目文件夾下,並導入到項目工程中。app

1
2
AlipaySDK.bundle
AlipaySDK.framework

在Build Phases選項卡的Link Binary With Libraries中,增長如下依賴:dom

image

其中,須要注意的是:異步

  • 若是是Xcode 7.0以後的版本,須要添加libc++.tbd、libz.tbd;
  • 若是是Xcode 7.0以前的版本,須要添加libc++.dylib、libz.dylib(以下圖)。
    image

步驟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.notifyURL = @ "http://www.xxx.com" ; //回調URL
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中示例文件

  • AliSDKDemo\APViewController.h
  • AliSDKDemo\APViewController.m
  • AliSDKDemo\Order.h
  • AliSDKDemo\Order.m

步驟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、銀聯支付UPPay
 
銀聯sdk下載網址:https://open.unionpay.com/upload/download/Development_kit85427986.rar

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 對接

  1. 在須要調用支付控件的源文件內引用頭文件 UPPayPlugin.h 或 UPPayPluginPro.h(注意:若是工程的 compile source as 選項的值不是 Objective–C++,則引用此頭文件的文件類型都要改成.mm)

  2. 經過調用一下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方法中接收返回支付狀態。

但願各位多多指教。

相關文章
相關標籤/搜索