苹果的Apple Pay学习

先简单介绍一下

1.首先呢来说一说Apple Pay 的使用前提

1)设备的支持(iPhone6以上版本)

    iPhone设备 支持手机app内支付 店内支付

    Apple Watch 支持店内支付

    iPad 支持app内支付

2)系统的支持(iOS8.0+版本,最好升级到当前最新版本iOS9.2)(iOS9.2,Apple Pay 增加了对银联卡的支持,此时就意味着可以在国内使用了)

    使用的时候 需要在wallet应用当中,输入银行卡信息(银行支持)

2.应用场景呢

1)线下支付 (商家支持:要求必须有支持NFC的刷卡机)

2)线上支付 

接下来要说的就是app开发集成步骤了

1.配置支付环境

1)使用XCode创建一个工程,并设置好对应的BundleID

//com.sn.ApplePay

2)注册并配置一个商业标示符

    登陆开发者中心

    进入证书配置栏目

    添加一个App ID (App Services开启Apple Pay)

    配置Merchant ID

    为Merchant ID 配置证书,并下载证书安装到钥匙串 (会有一个问题提示是否支持美国以外的地区使用,选择yes no是不同的,按照提示做就可以)

    检查安装到钥匙串中的证书是否有效

    绑定Merchant ID到App ID

3)配置XCode项目,开启Apple Pay功能

     系统版本调到最低iOS8.0

     开启Apple Pay功能


2.现在用一下代码举例实现一下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#import <PassKit/PassKit.h>//支付框架
 
- ( void )appLePayDemo {
     //PKPaymentButton//自带样式按钮 (Apple Pay)
     //判断当前设备是否支持苹果支付
     if  (![PKPaymentAuthorizationViewController canMakePayments]) {
         NSLog(@ "当前设备不支持Apply Pay" );
         return ;
     }
     //判断是否添加了银行卡
     /*
      extern NSString * const PKPaymentNetworkAmex NS_AVAILABLE(NA, 8_0);
      extern NSString * const PKPaymentNetworkChinaUnionPay NS_AVAILABLE(NA, 9_2);
      extern NSString * const PKPaymentNetworkDiscover NS_AVAILABLE(NA, 9_0);
      extern NSString * const PKPaymentNetworkInterac NS_AVAILABLE(NA, 9_2);
      extern NSString * const PKPaymentNetworkMasterCard NS_AVAILABLE(NA, 8_0);
      extern NSString * const PKPaymentNetworkPrivateLabel NS_AVAILABLE(NA, 9_0);
      extern NSString * const PKPaymentNetworkVisa NS_AVAILABLE(NA, 8_0);
      */
     // 目前判断 visa卡 银联卡 银联卡(iOS9.2)
     if  (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay]]) {
         //创建一个按钮用户点击跳转添加银行卡的界面
         PKPaymentButton * button = [PKPaymentButton buttonWithType:PKPaymentButtonTypeSetUp style:PKPaymentButtonStyleWhiteOutline];
         //添加到界面上
         
         //添加点击事件
         [button addTarget:self action:@selector(jump) forControlEvents:UIControlEventTouchUpInside];
     }
     
     //创建一个购买按钮
     PKPaymentButton * button = [PKPaymentButton buttonWithType:PKPaymentButtonTypeBuy style:PKPaymentButtonStyleBlack];
     //添加到界面上
     
     //添加点击事件
     [button addTarget:self action:@selector(buy) forControlEvents:UIControlEventTouchUpInside];
     
}
 
//跳转到添加银行卡界面
- ( void )jump {
     PKPassLibrary * pl = [[PKPassLibrary alloc] init];
     [pl openPaymentSetup];
}
 
//购买商品
- ( void )buy {
     //创建一个支付请求
     PKPaymentRequest * request = [[PKPaymentRequest alloc] init];
     //配置支付请求
     //配置商家ID
     request.merchantIdentifier = @ "Merchant ID" ; //商家ID
     //配置货币代码 以及国家代码 (中国的)
     request.currencyCode = @ "CNY" ;
     request.countryCode = @ "CN" ;
     //配置请求支持的支付网络//与上面判断最好一致
     request.supportedNetworks = @[PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];
     //配置商户处理方式
     /*
      PKMerchantCapability3DS                                 = 1UL << 0,   // Merchant supports 3DS
      PKMerchantCapabilityEMV                                 = 1UL << 1,   // Merchant supports EMV
      PKMerchantCapabilityCredit NS_ENUM_AVAILABLE_IOS(9_0)   = 1UL << 2,   // Merchant supports credit
      PKMerchantCapabilityDebit  NS_ENUM_AVAILABLE_IOS(9_0)   = 1UL << 3    // Merchant supports
      
      PKMerchantCapability3DS | PKMerchantCapabilityEMV...
      */
     request.merchantCapabilities = PKMerchantCapability3DS;
     //配置购买的商品列表
     /*
      + (instancetype)summaryItemWithLabel:(NSString *)label amount:(NSDecimalNumber *)amount;
      + (instancetype)summaryItemWithLabel:(NSString *)label amount:(NSDecimalNumber *)amount type:(PKPaymentSummaryItemType)type NS_AVAILABLE(NA, 9_0);
      
      PKPaymentSummaryItemTypeFinal,      // The payment summary item's amount is known to be correct 确定的
      PKPaymentSummaryItemTypePending     // The payment summary item's amount is estimated or unknown - e.g, a taxi fare 不确定的
 
      */
     //注意: 支付列表最后一个代表汇总
     NSDecimalNumber * price1 = [NSDecimalNumber decimalNumberWithString:@ "10.00" ];
     PKPaymentSummaryItem * item1 = [PKPaymentSummaryItem summaryItemWithLabel:@ "商品名称"  amount:price1];
     NSDecimalNumber * price2 = [NSDecimalNumber decimalNumberWithString:@ "10.00" ];
     PKPaymentSummaryItem * item2 = [PKPaymentSummaryItem summaryItemWithLabel:@ "商品名称"  amount:price2];
     //汇总以上两个商品
     NSDecimalNumber * price3 = [NSDecimalNumber decimalNumberWithString:@ "20.00" ];
     PKPaymentSummaryItem * item3 = [PKPaymentSummaryItem summaryItemWithLabel:@ "某某公司或者商城"  amount:price3];
 
     request.paymentSummaryItems = @[item1,item2,item3];
     
     //配置请求的附加项
     /*
      PKAddressFieldNone                              
      PKAddressFieldPostalAddress                    
      PKAddressFieldPhone
      PKAddressFieldEmail
      PKAddressFieldName
      PKAddressFieldAll
      */
     //是否显示 invoice 收货地址 显示哪些选项
     request.requiredBillingAddressFields = PKAddressFieldAll;
     //是否显示快递地址 显示哪些选项
     request.requiredShippingAddressFields = PKAddressFieldAll;
     //配置快递方式 NSArray <PKShippingMethod>
     NSDecimalNumber * p1 = [NSDecimalNumber decimalNumberWithString:@ "18.00" ];
     PKShippingMethod * method1 = [PKShippingMethod summaryItemWithLabel:@ "顺风快递"  amount:p1];
     method1.identifier = @ "shunfeng" ;
     //详细描述
     method1.detail = @ "24小时送到" ;
     
     NSDecimalNumber * p2 = [NSDecimalNumber decimalNumberWithString:@ "10.00" ];
     PKShippingMethod * method2 = [PKShippingMethod summaryItemWithLabel:@ "申通快递"  amount:p2];
     method2.identifier = @ "shentong" ;
     method2.detail = @ "送货上门" ;
 
     request.shippingMethods = @[method1,method2];
     //配置快递的类型 自取 等
     /*
      PKShippingTypeShipping,
      PKShippingTypeDelivery,
      PKShippingTypeStorePickup,
      PKShippingTypeServicePickup
      */
     request.shippingType = PKShippingTypeStorePickup;
     //添加一些附加的数据
     request.applicationData = [@ "buyID=12345"  dataUsingEncoding:NSUTF8StringEncoding];
     
     
     //验证用户的支付授权
     PKPaymentAuthorizationViewController * avc = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
     [self presentViewController:avc animated:YES completion:nil];
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值