ApplePay初探&連連支付

說明

連連蘋果支付Demo下載地址

https://apple.lianlianpay.com/OpenPlatform/sdk_download.jsp

連連蘋果支付官方API說明(消費/預授權)

https://apple.lianlianpay.com/OpenPlatform/api_reference.jsp

說明文檔
http://open.lianlianpay.com/wp-content/uploads/2014/05/%E8%BF%9E%E8%BF%9E%E6%94%AF%E4%BB%98%E6%89%8B%E6%9C%BA%E5%BA%94%E7%94%A8SDK%E5%8D%A1%E5%89%8D%E7%BD%AE%E6%A8%A1%E5%BC%8F%E5%95%86%E6%88%B7%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E%E4%B9%A6-2015-11-27-074831.pdf

Apple Pay在連連支付支持的 消費和預授權模式有什么區(qū)別?

預授權: 指特約商戶向發(fā)卡機構取得持卡人30天內(nèi)在不超過預授權金額一定比例范圍的付款承諾,并在持卡人獲取商品或接受服務后向發(fā)卡機構進行承兌的業(yè)務。通俗講就是先凍結(jié)銀行卡內(nèi)部分資金用作押金,后按實際消費金額結(jié)算的業(yè)務。

消費: 消費者在商戶進行消費時,直接按實際消費金額進行結(jié)算的業(yè)務。

開始集成

商戶配置


static NSString *kLLOidPartner  = @"201606301000000000";    //  商戶號
static NSString *kLLPartnerKey  = @"ABCDEFG";               //  私鑰 在連連后臺配置
static NSString *signType       = @"MD5";                   //  加密方式
static NSString *kAPMerchantID  = @"merchant.com.apple.hehe";   //  與開發(fā)證書 MerchantID 保持一致

屬性 及 代理

@interface ViewController ()<LLPaySdkDelegate>

@property (weak, nonatomic) IBOutlet UIButton *payBtn;  // 支付按鈕

@property (nonatomic, retain) NSMutableDictionary *orderParam;  //  訂單配置字典

@property (nonatomic, strong) LLAPPaySDK *paySdk;   //  連連SDK

@end

點擊支付按鈕執(zhí)行支付方法

- (IBAction)toPay:(id)sender {

    [self fillOrderMethodAndUserinfo];
    self.orderParam = [self createOrder];
    
    NSDictionary *orderParam    = self.orderParam;          // 創(chuàng)建訂單
    self.paySdk                 = [LLAPPaySDK sharedSdk];   // 創(chuàng)建SDK
    self.paySdk.sdkDelegate     = self;                     // 設置回調(diào)
    
    // 連連加密訂單的方法生成sign,如果和支付寶沖突無解就翻翻我發(fā)的文章吧
    LLPayUtil *payUtil = [[LLPayUtil alloc] init];          
    orderParam = [payUtil signedOrderDic:orderParam andSignKey:kLLPartnerKey];
    
    //  彈出蘋果支付界面
    [self.paySdk payWithTraderInfo:orderParam inViewController:self];
    
}

支付按鈕的一些方法




- (NSMutableDictionary *)createOrder
{

    NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
    [dateFormater setDateFormat:@"yyyyMMddHHmmss"];
    NSString *simOrder = [dateFormater stringFromDate:[NSDate date]];
    
    NSMutableDictionary *param = [NSMutableDictionary dictionary];
         //  這里的dictionary參數(shù)全弄成字符串型,否則崩潰找不到錯在哪了,本人在這里掉了很長時間的坑。。。

    [param setDictionary:@{
                           @"sign_type"     :   signType,   //  加密方式
                           @"busi_partner"  :   @"109001",  //  虛擬商品銷售:101001 實物商品銷售:109001
                           @"dt_order"      :   simOrder,   // 訂單時間
                           @"notify_url"    :   @"http://test.yintong.com.cn:80/apidemo/API_DEMO/notifyUrl.htm",    //  回調(diào)自家后臺的stringURL
                           @"no_order"      :   @"123456",  //  訂單號
                           @"name_goods"    :   @"testName",    //  商品名
                           @"info_order"    :   simOrder,   //  備注
                           @"valid_order"   :   @"10080",   //  訂單有效時間 多長時間過期
                           @"user_id"       :   @"123",     //  用戶ID
                           }];
    
    //  風險控制參數(shù)(參數(shù)需求按照文檔表格)
    //  文檔地址 https://apple.lianlianpay.com/OpenPlatform/api_reference.jsp

    NSString *phoneNum =  @"13812345678";
    NSDictionary *riskDict = @{
                               @"user_info_mercht_userno"   : @"123",
                               @"user_info_dt_register"     : @"123",
                               @"frms_ware_category"        : @"4999",  //  官方文檔中有
                               @"user_info_bind_phone"      : phoneNum,
                               };
    
    param[@"risk_item"] = [LLPayUtil jsonStringOfObj:riskDict]; //  風控參數(shù)
    param[@"money_order"]   =   @"0.01";
    
    // 這兩項一定寫對,否則出錯,如果出錯在官方后臺檢查配置,同時檢查蘋果開發(fā)者網(wǎng)站
    param[@"ap_merchant_id"]    =   kAPMerchantID;  //  與蘋果配置保持一直
    param[@"oid_partner"]       =   kLLOidPartner;  //  商戶號
    
    
    return param;
    
}


- (NSString*)fillOrderMethodAndUserinfo{
    
    
    [self.orderParam removeObjectForKey:@"acct_name"];
    [self.orderParam removeObjectForKey:@"id_no"];
    [self.orderParam removeObjectForKey:@"no_agree"];
    [self.orderParam removeObjectForKey:@"card_no"];
    
    
    return nil;
    
}




Demo中的delegate方法 剛集成時務必復制,以便查找錯誤原因



- (void)paymentEnd:(LLPayResult)resultCode withResultDic:(NSDictionary *)dic
{
    NSString *msg = @"支付異常";
    switch (resultCode) {
        case kLLPayResultSuccess:
        {
            msg = @"支付成功";
            
            NSString* result_pay = dic[@"result_pay"];
            if ([result_pay isEqualToString:@"SUCCESS"])
            {
                //
                //                NSString *payBackAgreeNo = dic[@"agreementno"];
                //_agreeNumField.text = payBackAgreeNo;
            }
            else if ([result_pay isEqualToString:@"PROCESSING"])
            {
                msg = @"支付單處理中";
            }
            else if ([result_pay isEqualToString:@"FAILURE"])
            {
                msg = @"支付單失敗";
            }
            else if ([result_pay isEqualToString:@"REFUND"])
            {
                msg = @"支付單已退款";
            }
        }
            break;
        case kLLPayResultFail:
        {
            msg = @"支付失敗";
        }
            break;
        case kLLPayResultCancel:
        {
            msg = @"支付取消";
        }
            break;
        case kLLPayResultInitError:
        {
            msg = @"sdk初始化異常";
        }
            break;
        case kLLPayResultInitParamError:
        {
            msg = dic[@"ret_msg"];
        }
            break;
        default:
            break;
    }
    
    NSString *showMsg = [msg stringByAppendingString:[LLPayUtil jsonStringOfObj:dic]];
    
    [[[UIAlertView alloc] initWithTitle:@"結(jié)果"
                                message:showMsg
                               delegate:nil
                      cancelButtonTitle:@"確認"
                      otherButtonTitles:nil] show];
}

引用官方

以下是連連官方ReadMe整理格式后

LLPaySDK iOS接入指南

文件說明


  1. 內(nèi)部包含 LLPay 的支付SDK
  2. LLPaySDK_iOS下載
  3. 連連 ? Pay SDK下載
  4. 文件夾內(nèi)文件說明
文件 文件內(nèi)容
LLPaySdk.h 頭文件,聲明接口
libPaySdkColor.a 單獨的LLPay 的 lib庫 或者 單獨的LLAPPay 的 lib庫
walletResources.bundle LianlianPay 資源包,請勿改名(如果是? Pay可不用)

下面是基本的接入指南:


  1. 導入文件
  2. 添加頭文件引用 #import "LLPaySdk.h"
  3. 設置link標志
    • Target->Build Setting ,Other Linker Flags 設置為 -all_load
    • 可能添加-all_load以后和其他庫沖突,可以嘗試使用 -force_load 單獨load庫, force_load后面跟的是 lib庫的完整路徑```
      -force_load $(SRCROOT)/***/libPaySdkColor.a (****需要按照你的庫放置的路徑?jīng)Q定)

4. 調(diào)用sdk顯示,注意retain修飾,自動釋放以后,調(diào)用后會導致程序崩潰或者有些圖片會消失(如導航欄返回圖片等)

    ```
    NSDictionary *orderParam = @{*****}; // 創(chuàng)建訂單
    self.sdk = [LLPaySdk sharedSdk]; // 創(chuàng)建SDK
    self.sdk.sdkDelegate = self;  // 設置回調(diào)
    NSDictionary* signedDic = [payUtil signedOrderDic:orderParam andSignKey:md5key_or_rsakey] // 加過簽名的訂單字典
    [self.sdk presentLLPaySDKInViewController: rootVC withPayType: LLPayTypeQuick andTraderInfo: signedDic];
    
    ```
    > 接入什么類型的支付產(chǎn)品就傳什么類型的payType,如果**LLPayType傳錯就會提示無此支付產(chǎn)品權限**
    
    > 假如是ApplePay, 使用LLAPPaySDK,并在orderParam中設置**ap_merchant_id**

    ```
    // 消費
    - (void)payWithTraderInfo:(NSDictionary *)traderInfo
         inViewController:(UIViewController *)viewController;
    ```


5. 編寫結(jié)果回調(diào)

    ```
    // 訂單支付結(jié)果返回,主要是異常和成功的不同狀態(tài)
    - (void)paymentEnd:(LLPayResult)resultCode withResultDic:(NSDictionary *)dic
    ```

### LLPaySDK可配置部分
---


> iOS SDK可以通過修改資源bundle進行定制, 因為是在bundle里面,請在修改好以后 **clean proj**,這樣才會生效。

1. 圖片的替換,在內(nèi)部的圖片可以替換修改為自己的樣式
2. 顏色等的修改,可以修改default.css文件,支持#abcdef,123,123,123兩種顏色表示
3. 修改值意義列表



修改的對象 |修改方法
---|---
導航欄顏色   |替換ll_nav_bg3.png文件,以及修改css文件中NavBar字段(后面只表示字段,都是在default.css文件中)中的background-color
導航欄標題   |NavBar字段中的titleIconName; titleText
確認按鈕        |#a-button
取消按鈕        |#b-button
文本框     |UITextField


4. 參數(shù)字段部分
    - 參數(shù)說明在demo中有,可以參考。字段名和wap不一致,請參考[demo(點擊下載)](http://open.lianlianpay.com/wp-content/uploads/2014/08/LLPayDemo1230-2015-12-30-031859.zip)中的參數(shù)說明,參數(shù)中的user_id 不是商戶號,是商戶自己體系中的用戶編號,前置卡輸入時,no_agree是通過API查詢得到的綁卡序號
  
5. 使用部分
    - Demo中的輸入項,是用來測試各種支付條件,包括認證支付(輸入姓名,身份證),前置支付(輸入卡號,協(xié)議號)。不是必須,請根據(jù)自己的支付方式測試。
    - 支持銀行數(shù)量,是根據(jù)支付類型以及商戶來,可以配置,請聯(lián)系運營。


### 常見問題
---

> **簽名請盡量使用服務器端簽名,假如使用客戶端簽名,請使用Demo中的payutil**

[連連支付對接常見問題](http://test.yintong.com.cn/asklianlian/)

1. **運行直接崩潰**

    - 1、sdk沒有retain保管。
    - 2、sdk中使用了類擴展,請在other Linker Flags中添加 -all_load        

2. **提示初始化錯誤**

    - 1、檢查環(huán)境和商戶號等是否匹配;
    - 2、檢查簽名方法是否正確(參考簽名工具);
    - 3、訂單信息是否有遺漏項;

3. 所傳的類型**不是NSString**
    - 解釋:連連的訂單需要傳入的訂單格式為{“strkey”: “strvalue”, “strkey1″ : “strvalue2“},請不要傳遞 {“key”: [v1, v2]} 或者 {“key”: {“ikey”:”v”}} 這種
    - 應對,修改訂單內(nèi)值的格式,特別是risk_item,需要變成 {“risk_item”:”{\”r_key\”:\”v\”}”}這樣,由于有些信息商戶是由后臺傳入,請*保證使用后臺傳給客戶端的值也是NSString類型*

4. 商戶**無此支付產(chǎn)品權限**

    - 解釋:我們的產(chǎn)品分為認證支付、快捷支付等多種支付方式。一種支付方式對應的包、支付調(diào)用方法、商戶號都有所不同。
    - 應對:先檢查商戶號是否是正確的商戶號,比如   <認證支付測試商戶號  201408071000001543>  <快捷支付測試商戶號  201408071000001546>
        然后檢查所對應的包或者調(diào)用方法對不對。

5. 商戶**無此支付權限**
    
    - 解釋:一個商戶號對應的商品業(yè)務類型是有限的。
    - 應對:修改  商戶業(yè)務類型 busi_partner 是 String(6) 
        - 虛擬商品銷售:101001
        - 實物商品銷售:109001
        - 外部賬戶充值:108001

6. 簽名驗證不對
    - [簽名驗證錯誤解決](http://test.yintong.com.cn/asklianlian/?cat=10)
    - 解釋:簽名有特定規(guī)則,訂單里面的特定參數(shù)參與簽名。
    - 應對:ios最新的Demo中提供了payUtil函數(shù),直接調(diào)用,就能生成簽名正確的訂單。然后再次提醒,我們**強烈建議商戶在服務器端完成簽名操作**。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內(nèi)容

  • "最近由于公司項目需要集成連連支付,文檔寫的不是很清楚,遇到了一些坑,因此記錄一下,希望能幫到有需要的人。" 前面...
    Bison閱讀 2,025評論 10 14
  • ¥開啟¥ 【雷霆戰(zhàn)機】 〖http://pan.baidu.com/s/1kVstszX〗 《解壓源碼后直接用AI...
    小菜c閱讀 3,745評論 0 5
  • ¥開啟¥ 【雷霆戰(zhàn)機】 〖http://pan.baidu.com/s/1kVstszX〗 《解壓源碼后直接用AI...
    小菜c閱讀 3,565評論 1 10
  • ¥關閉¥ 【雷霆戰(zhàn)機】 〖http://pan.baidu.com/s/1kVstszX〗 《解壓源碼后直接用AI...
    小菜c閱讀 9,487評論 0 19
  • 夏悠然俏臉冰冷的望著不遠處那面帶微笑的柳影,周身有著強大的靈力在鼓蕩,令得空氣都是發(fā)出了嘎吱之聲,對于這柳影,她素...
    混沌天書閱讀 163評論 0 0