ios集成支付寶

1.iOS 集成流程

主要按照官方文檔設置便可:ios

1:關於openssl/asn.h file not found的問題express

可能會遇到這個問題:數組

#include <openssl/asn.h> 找不到 也就是路徑沒有引入xcode

解決方法以下:服務器

在xcode 的build setting --> header searchPaths裏 添加支付寶openssl/asn.h的文件路徑app

格式: $(PROJECT_DIR)/文件夾路徑(能夠直接選中openssl,show in finder),注意:路徑爲OpenSSL上層文件夾函數

支付寶配置文件:libcrypto.a  libssl.a   openssl   util 四個文件,一個都不能少測試

2.支付寶sdk使用流程

第一步:須要服務器端配置,步驟以下:ui

/*
   步驟:
            1.設置商品信息
            2.將商品信息按要求拼接成字符串
            3.用私鑰將商品信息簽名 .
            4.將加簽成功後的字符串格式化成訂單字符串,返回給客戶端
            5.客戶端獲取後臺返回的訂單字符串,調用支付寶支付接口發起支付請求
            6.處理支付寶返回的支付結果  
前4步須要在服務端進行處理,客戶端只需獲取字符串調用支付接口發送支付請求
*/
//生成訂單信息及簽名
//將商品信息賦予AlixPayOrder的成員變量
Order* order = [Order new];
// NOTE: app_id設置
order.app_id = appID;
// NOTE: 支付接口名稱
order.method = @"alipay.trade.app.pay";
// NOTE: 參數編碼格式
order.charset = @"utf-8";
// NOTE: 當前時間點
NSDateFormatter* formatter = [NSDateFormatter new];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
order.timestamp = [formatter stringFromDate:[NSDate date]];
// NOTE: 支付版本
order.version = @"1.0";
// NOTE: sign_type設置
order.sign_type = @"RSA";

// NOTE: 商品數據
/*商品信息=======================
total_amount:商品價格(支付金額)
out_trade_no:訂單ID(商戶訂單號)--這個地方用了隨機的。正常狀況下,服務器端會給!
seller_id:收款商戶號
timeout_express:超時時間設置
subject:主題(顯示的數據,本身寫,不影響支付)
body:內容對一筆交易的具體描述信息(本身寫就能夠)
===================================*/
order.biz_content = [BizContent new];
order.biz_content.body = @"abc";
order.biz_content.subject = @"1";
order.biz_content.out_trade_no = [self generateTradeNO]; //訂單ID(由商家自行制定)
order.biz_content.timeout_express = @"30m"; //超時時間設置
order.biz_content.total_amount = [NSString stringWithFormat:@"%.2f", 0.01]; //商品價格
order.biz_content.seller_id =@"收款商戶號";// 收款商戶號
/*將訂單信息拼接成字符串=========================================
訂單信息串中的各個value是否encode
非encode訂單信息串,用於生成簽名
encode訂單信息串 + 簽名,用於最終的支付請求訂單信息串===================================*/
NSString *orderInfo = [order orderInfoEncoded:NO];
NSString *orderInfoEncoded = [order orderInfoEncoded:YES];
/*
  
使用類CreateRSADataSigner(獲取私鑰),
  調用signString簽名函數作簽名(並將商戶信息簽名)須要遵循RSA簽名規範,
  並將簽名字符串base64編碼和UrlEncode================================
*/ id<DataSigner> signer = CreateRSADataSigner(privateKey); NSString *signedString = [signer signString:orderInfo]; // NOTE: 若是加簽成功,則繼續執行支付 if (signedString != nil) { NSString *appScheme = @"alisdkdemo";//url types設置 /*把簽名結果賦值給參數sign,並把sign加入以前的待簽名數組中,此時獲得的即是要請求給支付寶的所有數據(訂單字符串)。*/ NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@", orderInfoEncoded, signedString]; NSLog(@"orderString%@",orderString);

 

注意點:須要對訂單字符串進行base64和urlEncode處理編碼

坑點:若是服務端沒有對訂單字符串進行處理,須要移動端進行處理,若是不處理,支付寶會報錯,系統繁忙

一、須要在URL Scheme進行設置:

TARGETS --> Info --> URL Types -->URL Schemes

二、須要設置頭文件路徑:點擊「Build Settings」選項卡,在搜索框中,以關鍵字「search」搜索,對「Header Search Paths」增長頭文件路徑:$(SRCROOT)/項目名稱。若是頭文件信息已增長,可沒必要再增長。

三、官方的demo中會報一個錯誤,私鑰爲空
檢查私鑰的正確性後,若是還不能解決,嘗試使用如下方法修改:
對私鑰樣式的拼接中進行修改
-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----
修改爲
-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----

四、支付寶打開失敗,ALI40247錯誤
這個錯誤的緣由通常是支付寶的應用配置有問題,解決方法:
4.一、檢查使用的APPID 私鑰是否正確
4.二、檢查支付寶中應用是否添加APP支付功能
4.三、檢查APP支付功能是否已經簽約
若是以上都沒問題,能夠在支付寶刪除應用,再從新建立一個新應用進行測試

客戶端調用支付寶支付

 

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
   // 支付寶支付時會走appdelegate裏面的方法
    [[AlipaySDK defaultService] processOrderWithPaymentResult:url standByCallback:^(NSDictionary *resultDic){
    
    NSLog(@"%@", resultDic);

}]

    
    return YES;
}    

 

若是客戶端沒有安裝支付寶,那麼支付時會走調用支付方法的那個地方

- (void)payButtonClick:(UIButton *)button
{
     NSString *appScheme = @"alipaydemo.com";
     // orderString 就是訂單字符串,須要從後臺獲取,前提是後臺已經處理完成(base64和urlEncode)
     [[AlipaySDK defaultService]  payOrder:OrderString fromeScheme:appScheme callback:^(NSDictionary *resultDic){

    // 若是客戶端沒有安裝支付寶,支付時會用網頁端的支付寶進行支付,完成後會調用這裏的callback
    NSLog(@"%@", resultDic);
}
}        

其他的問題都尚未遇到

相關文章
相關標籤/搜索