Apple Pay的使用

1. 配置支付環境

使用XCode創建一個工程, 并設置好對應的BundleID

注冊并配置一個商業標示符

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

(2)配置Merchant ID

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

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

問題描述: 有可能會出現

提示

問題原因:?系統根證書/中級證書頒發機構過期

解決方案: ??重新下載證書, 并安裝,具體下載列表看下圖

(5)綁定Merchant ID 到 APP ID

2. 配置Xcode 項目

調整系統最低部署版本(iOS8.0)

開啟Apple Pay功能

注意: 以上步驟截圖, 只是關鍵處截圖, 如果在具體細節處遇到問題, 歡迎關注公眾號(王順子),共同探討。或者參照具體視頻教程, 鏈接地址, 后續附上。

3.?代碼實現

(1)判斷當前設備是否可以支付

1

5if(![PKPaymentAuthorizationViewController canMakePayments])

{

NSLog(@"不能支付");

return;

}

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

1

12if(![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay]]) {

NSLog(@"Wallet沒有添加該支付網絡的儲蓄卡/信用卡");

// 創建一個設置按鈕

//??????? 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)創建一個支付請求, 并配置各項信息

// 1. 創建一個支付請求

51// 1. 創建一個支付請求

PKPaymentRequest *request = [[PKPaymentRequest alloc] init];

// 2. 參數配置

// 2.1 商店標識

request.merchantIdentifier = @"merchant.520it.com";

// 2.2 貨幣代碼

request.currencyCode = @"CNY";

// 2.3 國家編碼

request.countryCode = @"CN";

// 2.4 支持的支付網絡(PKPaymentNetworkChinaUnionPay iOS9.2開始支持)

request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay];

// 2.5 支付請求包含一個支付摘要項目的列表

NSDecimalNumber*price1 = [NSDecimalNumberdecimalNumberWithString:@"2"];

PKPaymentSummaryItem *item1 = [PKPaymentSummaryItem summaryItemWithLabel:@"手榴彈"amount:price1];

NSDecimalNumber*price2 = [NSDecimalNumberdecimalNumberWithString:@"6"];

PKPaymentSummaryItem *item2 = [PKPaymentSummaryItem summaryItemWithLabel:@"炸彈"amount:price2 type:PKPaymentSummaryItemTypePending];

NSDecimalNumber*totalAmount = [NSDecimalNumberzero];

totalAmount = [totalAmount decimalNumberByAdding:price1];

totalAmount = [totalAmount decimalNumberByAdding:price2];

PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"小碼哥財務中心"amount:totalAmount type:PKPaymentSummaryItemTypePending];

// 注意: 數組最后一個是總價格

request.paymentSummaryItems = @[item1, item2, total];

// 2.6 運輸方式

NSDecimalNumber*shippingPrice = [NSDecimalNumberdecimalNumberWithString:@"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屬性來存儲一些在你的應用中關于這次支付請求的唯一標識信息,比如一個購物車的標識符。在用戶授權支付之后,這個屬性的哈希值會出現在這次支付的token中。

request.applicationData = [@"購物車ID: 123456"dataUsingEncoding:NSUTF8StringEncoding];

(4)彈出授權控制器,讓用戶給支付授權

// 3. 開始支付

8// 3. 開始支付

PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];

if(paymentPane ==nil) {

NSLog(@"授權控制器創建失敗");

return;

}

paymentPane.delegate =self;

[selfpresentViewController:paymentPane animated:YEScompletion:nil];

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

/**

*? 當授權成功之后會調用這個代理方法

*/

- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller

didAuthorizePayment:(PKPayment *)payment

completion:(void(^)(PKPaymentAuthorizationStatus status))completion;

{

//??? PKPayment *temp = payment;

NSLog(@"驗證授權---%@", payment.token);

NSLog(@"驗證通過后, 需要開發者繼續完成交易");

// 它需要你連接服務器并上傳支付令牌和 其他信息,以完成整個支付流程。

BOOLisSuccess =YES;

if(isSuccess) {

completion(PKPaymentAuthorizationStatusSuccess);

}else

{

completion(PKPaymentAuthorizationStatusFailure);

}

}

(6)關閉授權控制器

/**

*? 當授權成功之后或者取消授權之后會調用這個代理方法

*/

- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller

{

NSLog(@"取消或者交易完成");

[selfdismissViewControllerAnimated:YEScompletion:nil];

}

*?支付授權的流程:

框架發送支付請求給安全模塊,只有安全模塊可以訪問存儲在設備上的標記化的卡信息。

安全模塊把特定的卡和商家等支付數據加密,以保證只有蘋果可以讀取,然后發送給框架??蚣軙⑦@些數據發送給蘋果。

蘋果服務器再次加密這些支付數據,以保證只有商家可以讀取。然后服務器對它進行簽名,生成支付token,然后發送給設備。

框架調用相應的代理方法并傳入這個token,然后你的代理方法傳送token給你的服務器。

4. 服務器接收到token后的一般處理流程

驗證支付數據的哈希表和簽名

為加密過的支付數據解碼

向支付處理系統提交支付數據

向訂單追蹤系統提交訂單

處理支付請求時,你有兩個選擇;你既可以利用支付平臺處理支付請求,也可以自己實現支付請求處理流程。一個常用的支付平臺可以完成上述大部分操作。

關于支持Apple Pay支付平臺的更多信息,請參考developer.apple.com/apple-pay/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 轉載自:Apple Pay的使用 Apple Pay的使用 關于Apple Pay 具體繼承步驟也可參考: 網址配...
    John_LS閱讀 1,034評論 5 0
  • 蘋果支付(Apple Pay): Apple Pay,簡單來說, 就是一種移動支付方式。通過Touch ID/ P...
    西風頌閱讀 3,807評論 6 19
  • 步驟1:創建請求文件 步驟2:打開開發者中心 ,找到Merchant IDs,點擊加號,創建一個Merchant ...
    CoderZb閱讀 559評論 0 0
  • Apple Pay運行環境:iPhone6以上設備,操作系統最低iOS9.0以上,部分信息設置需要iOS9.2以上...
    cym_bj閱讀 5,145評論 3 7
  • Apple Pay 一個方便 & 安全的移動支付技術,讓用戶完成他們的支付環節并把支付相關的信息告訴你 只可以購買...
    skingtree閱讀 2,152評論 0 4