Apple Pay--iOS開發(fā)

一魂毁、什么是Apple Pay?

  1. 概念
    Apple Pay,簡單來說, 就是一種移動支付方式声旺。通過Touch ID/ Passcode,用戶可使用存儲在iPhone 6, 6p等設(shè)備上的信用卡和借記卡支付證書來授權(quán)支付段只; 它是蘋果公司在2014蘋果秋季新品發(fā)布會上發(fā)布的一種基于NFC的手機支付功能腮猖,于2014年10月20日在美國正式上線,2016年2月18日凌晨5:00赞枕, Apple Pay 業(yè)務(wù)在中國上線澈缺。
  2. 使用前提
    (1)支持設(shè)備
Paste_Image.png

(3)銀行支持
(2)系統(tǒng)支持(iOS8.0+版本, 注意:iOS9.2才真正的支持“銀聯(lián)支付”炕婶, 意味著iOS9.2以后才可以在中國市場使用)
需要將被支持銀行的銀行卡姐赡, 添加到手機wallet應(yīng)用當(dāng)中 

1463646106122946.png

二、 應(yīng)用場景?

  1. 線下支付

除下使用前提之外柠掂, 還要求      
商家支持(要求必須有支持NFC的刷卡機)
如果發(fā)現(xiàn)以下標識项滑,就代表該商家支持Apple Pay
蘋果公開的Apple Pay商家有:


1463646216287151.png
  1. 線上支付

除下使用前提之外, 還要求
App 支持

目前支持Apple Pay支付方式的App并不多涯贞。很多公司也在集成當(dāng)中枪狂,這也是寫這篇博客的目的。
1463646348641388.png

唯品會


1463646612131578.png

大眾點評

目前宋渔, 蘋果公開的支持Apple Pay的APP列表:


1463646495715575.png

三州疾、 與微信支付以及支付寶等第三方支付平臺的區(qū)別?

  1. 硬件方面
    Apple Pay:必須是iOS設(shè)備皇拣, 而且是按照線上支付和線下支付區(qū)分不同的真機設(shè)備(具體參考表1)
    微信严蓖、支付寶: 基本跟硬件設(shè)備無關(guān), 支持大多數(shù)的只能手機
  2. 網(wǎng)絡(luò)環(huán)境要求
    Apple Pay:線上支付需要聯(lián)網(wǎng)氧急, 線下支付無需聯(lián)網(wǎng)就可以支付
    微信颗胡、支付寶: 無論是線上還是線下支付, 都需要聯(lián)網(wǎng)使用
  3. 使用技術(shù)
    Apple Pay:線下支付使用的是 基于NFC的近場通訊技術(shù)
    微信态蒂、支付寶: 線下支付使用的是 掃碼支付(條形碼杭措、二維碼)
  4. 主要功能
    Apple Pay:線上支付、線下支付钾恢、部分升級后的ATM機可以取款
    微信手素、支付寶: 線上支付、線下支付瘩蚪、轉(zhuǎn)賬泉懦、理財?shù)?/li>
  5. 安全性能
    Apple Pay:不保留銀行卡信息,并且不會暴漏給外界疹瘦、不分流銀行存款(不需要從銀行卡轉(zhuǎn)錢到另外一個平臺)崩哩、不能充值 ,安全性較高。
    微信邓嘹、支付寶: 密碼保護酣栈,身份驗證等手段保護賬戶,安全性相對稍差汹押。
  6. 支付時長
    Apple Pay:無論是線上支付矿筝,還是線下支付, 只需要驗證指紋即可支付棚贾。非常迅速
    微信窖维、支付寶: 需要掃碼支付, 流程相對繁瑣妙痹,所以時長較長
  7. 各自弊端
    Apple Pay:只適用于蘋果設(shè)備铸史, 支付場景單一,無轉(zhuǎn)賬理財?shù)葮I(yè)務(wù)
    微信怯伊、支付寶: 安全性較差琳轿, 必須聯(lián)網(wǎng)操作,需要充值到對應(yīng)平臺

四震贵、線上支付集成步驟
 1. 配置支付環(huán)境
使用XCode創(chuàng)建一個工程, 并設(shè)置好對應(yīng)的BundleID

注冊并配置一個商業(yè)標示符

添加一個App ID

配置Merchant ID

為Merchant ID 配置證書, 并下載證書安裝到鑰匙串

檢查安裝到鑰匙串中的證書是否有效

綁定Merchant ID 到 APP ID

2. 配置Xcode 項目
調(diào)整系統(tǒng)最低部署版本(iOS8.0)

開啟Apple Pay功能

3. 代碼實現(xiàn)
判斷當(dāng)前設(shè)備是否可以支付

判斷"Wallet有沒有添加該支付網(wǎng)絡(luò)的儲蓄卡/信用卡"

創(chuàng)建一個支付請求, 并配置各項信息

彈出授權(quán)控制器利赋,讓用戶給支付授權(quán)

處理支付憑證

4. 服務(wù)器處理

五、 具體步驟實現(xiàn)
 1. 配置支付環(huán)境
使用XCode創(chuàng)建一個工程, 并設(shè)置好對應(yīng)的BundleID

1463647751122748.png

注冊并配置一個商業(yè)標示符

(1)添加一個App ID, 并勾選Apple Pay功能


1463647813346836.png

1463647820105539.png

(2)配置Merchant ID


1463647849472058.png

1463647859858225.png

(3)為Merchant ID 配置證書, 并下載證書安裝到鑰匙串

1463647881293562.png

1463647889569181.png

1463647896134977.png

        
(4)檢查安裝到鑰匙串中的證書是否有效
問題描述:有可能會出現(xiàn)
1463648006106391.png
提示
問題原因:系統(tǒng)根證書/中級證書頒發(fā)機構(gòu)過期
解決方案: 重新下載證書, 并安裝猩系,具體下載列表看下圖
1463648019652103.png
  
     
(5)綁定Merchant ID 到 APP ID
1463648044125583.png

1463648060105234.png

1463648072120226.png

1463648082729646.png
 
1463648130134801.png
 
        
 2. 配置Xcode 項目
調(diào)整系統(tǒng)最低部署版本(iOS8.0)

1463648171914855.png

      
開啟Apple Pay功能

1463648416102196.png

注意: 以上步驟截圖媚送,只是關(guān)鍵處截圖,如果在具體細節(jié)處遇到問題寇甸,歡迎關(guān)注公眾號(王順子)塘偎,共同探討∧妹梗或者參照具體視頻教程吟秩,鏈接地址,后續(xù)附上绽淘。
  
 3. 代碼實現(xiàn)    
(1)判斷當(dāng)前設(shè)備是否可以支付

if(![PKPaymentAuthorizationViewController canMakePayments])
{
    NSLog(@"不能支付");
    return;
}

(2)判斷"Wallet有沒有添加該支付網(wǎng)絡(luò)的儲蓄卡/信用卡"

 if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay]]) {
        NSLog(@"Wallet沒有添加該支付網(wǎng)絡(luò)的儲蓄卡/信用卡");
  
        // 創(chuàng)建一個設(shè)置按鈕
//        PKPaymentButton *button = [PKPaymentButton buttonWithType:PKPaymentButtonTypeSetUp style:PKPaymentButtonStyleWhiteOutline];
//        [button addTarget:self action:@selector(jump) forControlEvents:UIControlEventTouchUpInside];
//        button.center = self.view.center;
//        [self.view addSubview:button];
  
  
        return;
    }

(3)創(chuàng)建一個支付請求, 并配置各項信息

// 1. 創(chuàng)建一個支付請求
    PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
  
  
    // 2. 參數(shù)配置
    // 2.1 商店標識
    request.merchantIdentifier = @"merchant.520it.com";
  
    // 2.2 貨幣代碼
    request.currencyCode = @"CNY";
  
    // 2.3 國家編碼
    request.countryCode = @"CN";
  
    // 2.4 支持的支付網(wǎng)絡(luò)(PKPaymentNetworkChinaUnionPay iOS9.2開始支持)
    request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay];
  
    // 2.5 支付請求包含一個支付摘要項目的列表
    NSDecimalNumber *price1 = [NSDecimalNumber decimalNumberWithString:@"2"];
    PKPaymentSummaryItem *item1 = [PKPaymentSummaryItem summaryItemWithLabel:@"手榴彈" amount:price1];
  
    NSDecimalNumber *price2 = [NSDecimalNumber decimalNumberWithString:@"6"];
    PKPaymentSummaryItem *item2 = [PKPaymentSummaryItem summaryItemWithLabel:@"炸彈" amount:price2 type:PKPaymentSummaryItemTypePending];
  
    NSDecimalNumber *totalAmount = [NSDecimalNumber zero];
    totalAmount = [totalAmount decimalNumberByAdding:price1];
    totalAmount = [totalAmount decimalNumberByAdding:price2];
    PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"小碼哥財務(wù)中心" amount:totalAmount type:PKPaymentSummaryItemTypePending];
    // 注意: 數(shù)組最后一個是總價格
    request.paymentSummaryItems = @[item1, item2, total];
  
  
    // 2.6 運輸方式
    NSDecimalNumber *shippingPrice = [NSDecimalNumber decimalNumberWithString:@"18.0"];
    PKShippingMethod *method = [PKShippingMethod summaryItemWithLabel:@"順豐快遞" amount:shippingPrice];
    method.detail = @"24小時送到涵防!";
    method.identifier = @"shunfeng";
    request.shippingMethods = @[method];
    request.shippingType = PKShippingTypeServicePickup;
  
  
    // 2.7 通過指定merchantCapabilities屬性來指定你支持的支付處理標準,3DS支付方式是必須支持的沪铭,EMV方式是可選的壮池,
    request.merchantCapabilities = PKMerchantCapability3DS | PKMerchantCapabilityEMV | PKMerchantCapabilityCredit | PKMerchantCapabilityDebit;
      
    // 2.8 需要的配送信息和賬單信息
    request.requiredBillingAddressFields = PKAddressFieldAll;
    request.requiredShippingAddressFields = PKAddressFieldAll;
  
    // 2.9 存儲額外信息
    // 使用applicationData屬性來存儲一些在你的應(yīng)用中關(guān)于這次支付請求的唯一標識信息,比如一個購物車的標識符杀怠。在用戶授權(quán)支付之后椰憋,這個屬性的哈希值會出現(xiàn)在這次支付的token中。
    request.applicationData = [@"購物車ID: 123456" dataUsingEncoding:NSUTF8StringEncoding];

(4)彈出授權(quán)控制器赔退,讓用戶給支付授權(quán)

// 3. 開始支付
    PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
    if (paymentPane == nil) {
        NSLog(@"授權(quán)控制器創(chuàng)建失敗");
        return;
    }
    paymentPane.delegate = self;
    [self presentViewController:paymentPane animated:YES completion:nil];

(5)處理支付憑證(token)

 *  當(dāng)授權(quán)成功之后會調(diào)用這個代理方法
 */
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                       didAuthorizePayment:(PKPayment *)payment
                                completion:(void (^)(PKPaymentAuthorizationStatus status))completion;
{
//    PKPayment *temp = payment;
    NSLog(@"驗證授權(quán)---%@", payment.token);
    NSLog(@"驗證通過后, 需要開發(fā)者繼續(xù)完成交易");
    // 它需要你連接服務(wù)器并上傳支付令牌和 其他信息橙依,以完成整個支付流程证舟。
    BOOL isSuccess = YES;
    if (isSuccess) {
        completion(PKPaymentAuthorizationStatusSuccess);
    }else
    {
        completion(PKPaymentAuthorizationStatusFailure);
    }
      
}

(6)關(guān)閉授權(quán)控制器

/**
 *  當(dāng)授權(quán)成功之后或者取消授權(quán)之后會調(diào)用這個代理方法
 */
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller
{
    NSLog(@"取消或者交易完成");
    [self dismissViewControllerAnimated:YES completion:nil];
}
  • 支付授權(quán)的流程:
    框架發(fā)送支付請求給安全模塊,只有安全模塊可以訪問存儲在設(shè)備上的標記化的卡信息窗骑。

安全模塊把特定的卡和商家等支付數(shù)據(jù)加密女责,以保證只有蘋果可以讀取,然后發(fā)送給框架慧域±鹬瘢框架會將這些數(shù)據(jù)發(fā)送給蘋果。

蘋果服務(wù)器再次加密這些支付數(shù)據(jù)昔榴,以保證只有商家可以讀取。然后服務(wù)器對它進行簽名碘橘,生成支付token互订,然后發(fā)送給設(shè)備。

框架調(diào)用相應(yīng)的代理方法并傳入這個token痘拆,然后你的代理方法傳送token給你的服務(wù)器仰禽。

Paste_Image.png

  
  4. 服務(wù)器接收到token后的一般處理流程
驗證支付數(shù)據(jù)的哈希表和簽名

為加密過的支付數(shù)據(jù)解碼

向支付處理系統(tǒng)提交支付數(shù)據(jù)

向訂單追蹤系統(tǒng)提交訂單

處理支付請求時,你有兩個選擇纺蛆;你既可以利用支付平臺處理支付請求吐葵,也可以自己實現(xiàn)支付請求處理流程。一個常用的支付平臺可以完成上述大部分操作桥氏。
  關(guān)于支持Apple Pay支付平臺的更多信息温峭,請參考developer.apple.com/apple-pay/

視頻獲取鏈接:
http://pan.baidu.com/s/1mhzzqic 提取碼回復(fù)后可見捏境。

來源:
http://bbs.520it.com/forum.php?mod=viewthread&tid=254&extra=page%3D1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雪位,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叠殷,更是在濱河造成了極大的恐慌堕伪,老刑警劉巖揖庄,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異欠雌,居然都是意外死亡蹄梢,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門富俄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來禁炒,“玉大人,你說我怎么就攤上這事蛙酪∑肟粒” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵桂塞,是天一觀的道長凹蜂。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么玛痊? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任汰瘫,我火速辦了婚禮,結(jié)果婚禮上擂煞,老公的妹妹穿的比我還像新娘混弥。我一直安慰自己,他們只是感情好对省,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布蝗拿。 她就那樣靜靜地躺著,像睡著了一般蒿涎。 火紅的嫁衣襯著肌膚如雪哀托。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天劳秋,我揣著相機與錄音仓手,去河邊找鬼。 笑死玻淑,一個胖子當(dāng)著我的面吹牛嗽冒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播补履,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼添坊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了干像?” 一聲冷哼從身側(cè)響起帅腌,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎麻汰,沒想到半個月后速客,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡五鲫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年溺职,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片位喂。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡浪耘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出塑崖,到底是詐尸還是另有隱情七冲,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布规婆,位于F島的核電站澜躺,受9級特大地震影響蝉稳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掘鄙,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一耘戚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧操漠,春花似錦收津、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嚣鄙,卻和暖如春部服,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拗慨。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奉芦,地道東北人赵抢。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像声功,于是被迫代替她去往敵國和親烦却。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

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

  • 一先巴、什么是Apple Pay? 概念 Apple Pay其爵,簡單來說, 就是一種移動支付方式。通過Touch ID/...
    Jack_Baiyx閱讀 12,034評論 0 3
  • 蘋果支付(Apple Pay): Apple Pay伸蚯,簡單來說, 就是一種移動支付方式摩渺。通過Touch ID/ P...
    西風(fēng)頌閱讀 3,701評論 6 19
  • Apple Pay 一個方便 & 安全的移動支付技術(shù),讓用戶完成他們的支付環(huán)節(jié)并把支付相關(guān)的信息告訴你 只可以購買...
    skingtree閱讀 1,777評論 0 4
  • 1.About Apple Pay Apple Pay是一種移動支付技術(shù)剂邮,讓使用者把它們對真實的物品和服務(wù)的支付信...
    NEWWORLD閱讀 5,175評論 14 51
  • 山村夜深摇幻, 蟲鳴嚶嚶,蟋蟀唧唧挥萌,聲響清晰绰姻,就在窗外------屋后山坡。蛙聲咕咕變奏引瀑,不太容易聽清狂芋,來自遠處田地池...
    caa45b5096fb閱讀 129評論 0 0