iOS支付寶支付

支付寶支付 -- 適配iOS9
首先咱們一塊兒看一下,最終調起支付寶完成支付的必要參數和方法(Order類由支付寶demo中提供)html

 1  Order *order = [Order new];
 2     order.partner = kAliPayPartner;
 3     order.seller = kAliPaySeller;
 4     order.tradeNO = @"111";
 5     order.productName = @"阿里支付test商品"; //商品標題
 6     order.productDescription = @"阿里支付test商品描述"; //商品描述
 7     order.amount = @"0.01"; //商品價格
 8     order.notifyURL =  @"http://www.xxx.com"; //回調URL
 9     
10     order.service = @"mobile.securitypay.pay";
11     order.paymentType = @"1";
12     order.inputCharset = @"utf-8";
13     order.itBPay = @"30m";
14     order.showUrl = @"m.alipay.com";
15 
16     // 應用註冊scheme
17     NSString *appScheme = @"aliPay";
18     
19     //將商品信息拼接成字符串
20     NSString *orderSpec = [order description];
21     NSLog(@"orderSpec = %@",orderSpec);
22     
23     //獲取私鑰並將商戶信息簽名,外部商戶能夠根據狀況存放私鑰和簽名,只須要遵循RSA簽名規範,並將簽名字符串base64編碼和UrlEncode
24     id<DataSigner> signer = CreateRSADataSigner(kAliPayPrivateKey);
25     NSString *signedString = [signer signString:orderSpec];
26     
27     //將簽名成功字符串格式化爲訂單字符串,請嚴格按照該格式
28     NSString *orderString = nil;
29     if (signedString != nil) {
30         orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
31                        orderSpec, signedString, @"RSA"];
32         
33         [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
34             NSLog(@"reslut = %@",resultDic);
35         }];
36         
37     }

1.到支付寶開放平臺申請移動支付資質,並建立應用,獲得c++

partner : 2088121154111111 (參考格式)api

seller:即支付寶帳號,例如郵箱號手機號等app

支付寶開放平臺:https://open.alipay.com/platform/home.htm dom

2.下載demo,並將下列類庫文件等加入工程ide

AlipaySDK.bundleui

AlipaySDK.framework編碼

Order類url

openssl文件夾spa

Util文件夾

3.在buildPhases選項卡的LinkBinaryWithLibraries中,添加系統依賴庫

  • 若是是Xcode 7.0以後的版本,須要添加libc++.tbd、libz.tbd;
  • 若是是Xcode 7.0以前的版本,須要添加libc++.dylib、libz.dylib
    添加URLScheme 
    identifier 必須爲 alipayShare 
    URL Scheme爲 ap+pid

    4.製做密鑰,請看另外一篇隨筆 
    iOS支付寶支付--密鑰製做: http://www.cnblogs.com/aaalice/p/5078534.html 
  • 5.將本文第一段貼出的代碼貼進工程須要支付的響應事件中,在appdelegate中增長以下代碼
     1 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
     2 {
     3  
     4     //若是極簡開發包不可用,會跳轉支付寶錢包進行支付,須要將支付寶錢包的支付結果回傳給開發包
     5     if ([url.host isEqualToString:@"safepay"]) {
     6         [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
     7     //【因爲在跳轉支付寶客戶端支付的過程當中,商戶app在後臺極可能被系統kill了,因此pay接口的callback就會失效,請商戶對standbyCallback返回的回調結果進行處理,就是在這個方法裏面處理跟callback同樣的邏輯】
     8             NSLog(@"result = %@",resultDic);
     9         }];
    10     }
    11     if ([url.host isEqualToString:@"platformapi"]){//支付寶錢包快登受權返回authCode
    12   
    13         [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
    14             //【因爲在跳轉支付寶客戶端支付的過程當中,商戶app在後臺極可能被系統kill了,因此pay接口的callback就會失效,請商戶對standbyCallback返回的回調結果進行處理,就是在這個方法裏面處理跟callback同樣的邏輯】
    15             NSLog(@"result = %@",resultDic);
    16         }];
    17     }
    18     return YES;
    19 }
    運行!
    //--------------------------------------------------------------------------------
    在2015.12.25日前作完這幾步後,若是你的工程沒有爆紅,那麼你確定哪一步作錯了.
  • 我遇到的第一個問題是:

    這個問題真心花了點時間,這是由於工程中缺乏了兩個.a庫致使的,將demo中libcrypto.a和libssl.a添加進工程,直接拖進工程中,我嘗試從setting中添加,錯誤依然存在,以下圖

    第二個問題比較好解決:
    控制檯輸出: URL:"This app is not allowed to xxx" 這個是iOS9後,應用跳轉須要添加白名單形成的
    在info plist中 添加 LSApplicationQueriesSchemes 下添加item,item1爲alipay item2爲alipayshare
    第三個問題
    iOS9對https的處理
    兩種case:
    1.工程使用https 則在info.plist中 App Transport Security下作以下配置,以xml形式展示
     1 <key>NSAppTransportSecurity</key>
     2     <dict>
     3         <key>NSExceptionDomains</key>
     4         <dict>
     5             <key>alipay.com</key>
     6             <dict>
     7                 <key>NSIncludesSubdomains</key>
     8                 <true/>
     9                 <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
    10                 <true/>
    11                 <key>NSTemporaryExceptionMinimumTLSVersion</key>
    12                 <string>TLSv1.0</string>
    13                 <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
    14                 <false/>
    15             </dict>
    16             <key>alipayobjects.com</key>
    17             <dict>
    18                 <key>NSIncludesSubdomains</key>
    19                 <true/>
    20                 <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
    21                 <true/>
    22                 <key>NSTemporaryExceptionMinimumTLSVersion</key>
    23                 <string>TLSv1.0</string>
    24                 <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
    25                 <false/>
    26             </dict>
    27         </dict>
    28     </dict>

    2.工程未使用https,並對NSAppTransportSecurity下NSAllowsArbitraryLoads設置爲true

    再次運行. 支付一個試試 呵呵. 應該成功瞭如遇問題歡迎加個人qq 343381934 一塊兒交流 
相關文章
相關標籤/搜索