一,配置支付证书

1,创建 AppID 时记得勾选 Apple Pay service

OC(七)-Apple-Pay-的集成 - 图1

2,创建完成后可以看到如下图,为 Configurable状态,点击编辑

OC(七)-Apple-Pay-的集成 - 图2

3,再次点击编辑

OC(七)-Apple-Pay-的集成 - 图3

4,选择 MerchantIDs

OC(七)-Apple-Pay-的集成 - 图4

5,如果没有MerchantIDs进行创建

OC(七)-Apple-Pay-的集成 - 图5

6,创建 Merchant 的步骤, 需要上传本机的 csr 文件,完成后下载证书到本地,添加到 KeyChains.

二,代码开发

开发结果示意图

OC(七)-Apple-Pay-的集成 - 图6
OC(七)-Apple-Pay-的集成 - 图7
OC(七)-Apple-Pay-的集成 - 图8

代码如下:

  1. //
  2. // ViewController.m
  3. // ApplePay
  4. //
  5. // Created by HMC on 16/10/9.
  6. // Copyright © 2016年 SKing. All rights reserved.
  7. //
  8. #import "ViewController.h"
  9. #import <PassKit/PassKit.h>
  10. @interface ViewController ()<PKPaymentAuthorizationViewControllerDelegate>
  11. @property (strong, nonatomic) IBOutlet UIView *bgview;
  12. @end
  13. @implementation ViewController
  14. - (void)viewDidLoad {
  15. [super viewDidLoad];
  16. //检测设备是否支持 ApplePay
  17. if (![PKPaymentAuthorizationViewController canMakePayments]) {
  18. NSLog(@"设备不支持 Apple Pay");
  19. }//检测 wallet 是否添加银行卡
  20. else if(![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkChinaUnionPay]]) {
  21. NSLog(@"wallet 中未添加银行卡");
  22. PKPaymentButton * payButton = [PKPaymentButton buttonWithType:PKPaymentButtonTypeSetUp style:PKPaymentButtonStyleWhite ];
  23. [payButton addTarget:self action:@selector(setWallet) forControlEvents:UIControlEventTouchUpInside];
  24. //payButton.center = self.bgview.center;
  25. [self.bgview addSubview:payButton];
  26. }//正常支付
  27. else {
  28. PKPaymentButton * payButton = [PKPaymentButton buttonWithType:PKPaymentButtonTypeBuy style:PKPaymentButtonStyleWhiteOutline ];
  29. [payButton addTarget:self action:@selector(payWallet) forControlEvents:UIControlEventTouchUpInside];
  30. //payButton.center = self.bgview.center;
  31. [self.bgview addSubview:payButton];
  32. }
  33. }
  34. /**
  35. * 设置 wallet 的银行卡
  36. */
  37. -(void)setWallet
  38. {
  39. PKPassLibrary * setLib = [PKPassLibrary new];
  40. //跳转设置界面
  41. [setLib openPaymentSetup];
  42. }
  43. /**
  44. * 支付
  45. */
  46. -(void)payWallet
  47. {
  48. NSLog(@"开始支付订单");
  49. PKPaymentRequest * request = [PKPaymentRequest new];
  50. //商家 id
  51. request.merchantIdentifier = @"merchant.hmc.com";
  52. //国家代码
  53. request.countryCode = @"CN";
  54. //国家货币代码
  55. request.currencyCode = @"CNY";
  56. //支付网络
  57. request.supportedNetworks = @[PKPaymentNetworkChinaUnionPay];
  58. //支付类型
  59. request.merchantCapabilities = PKMerchantCapability3DS;
  60. NSDecimalNumber * countNum = [[NSDecimalNumber alloc] initWithString:@"0.11"];
  61. PKPaymentSummaryItem * item = [PKPaymentSummaryItem summaryItemWithLabel:@"中国美术学院" amount:countNum];
  62. request.paymentSummaryItems = @[item];
  63. PKPaymentAuthorizationViewController * authorViewController = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
  64. authorViewController.delegate = self;
  65. [self presentViewController:authorViewController animated:YES completion:nil];
  66. }
  67. /**
  68. * 授权成功会调用
  69. *
  70. * @param controller 控制器
  71. * @param payment 支付对象
  72. * @param completion 完成代码块
  73. */
  74. -(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion
  75. {
  76. // 支付的过程:
  77. // 1,使用商家公钥加密付款信息和客户信息
  78. // 2,发送客户的支付信息到商家的系统
  79. // 3,商家系统使用商家的私钥解密,生成支付状态返回客户端
  80. // 返回payment 的支付信息,获取服务器的支付状态
  81. BOOL paymenyOfStatus = YES;
  82. if (paymenyOfStatus) {
  83. completion(PKPaymentAuthorizationStatusSuccess);
  84. }else{
  85. completion(PKPaymentAuthorizationStatusFailure);
  86. }
  87. }
  88. -(void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller
  89. {
  90. NSLog(@"支付成功");
  91. [self dismissViewControllerAnimated:YES completion:nil];
  92. }
  93. @end

代码地址: 点这里