今儿的地铁里已经摆满了Apple Pay的广告.So.我也来尝试下Apple Pay的集成.
新建一个项目.暂时起名为JLLApplePayTest.
ApplePay 设计到了对Merchant ID 的使用.经过个人测试,用了两种方法.
第一是直接在Capabilities 里首先将ApplePay 选为ON.此时的Merchant ID是为空.点击+号,会出现选择开发者账号界面.选择自己的开发者账号后.会出现如下界面.
创建完成后点OK就可以在Merchant ID里进行选择.但是我并不推荐这么做.虽然也创建了Merchant ID.但是并未增改其相关属性.可行度待验证.但是如果集成demo的话.是可以成立的.
准备工作:
本地先生成一个CSR文件备用,用于申请证书。
教程:MAC下生成CSR(.certSigningRequest)文件
申请 MerchantID
登录苹果开发者中心,在Identifiers下选择Merchant IDs,点击右上角添加按钮添加Merchant ID;
输入描述信息和标识符,点击继续
这是刚才的信息的确认,没问题下一步,有问题back(返回)进行修改
MerchantID申请完成
申请证书
下面的就是创建证书了,除了下面的点击编辑进行创建证书外,还可以在Certificate 下创建一个Production-Apple Pay Certificate进行创建。
如果需要在非美国使用Apple Pay,需要打开权限
点击下一步会需要CSR文件,可以使用刚开始创建好的CSR文件。
选择CSR文件
Bundle identifier
虽然在Xcode上设置也能同步到开发者中心,但是同步过来的信息不全,最好还是我们手动添加APP ID
在APP IDS下点击创建APPID
设置APPID描述、Bundle id和服务。我用下面图片的bundle id的名字是不可以的,所以我用的是
com.ApplePayDemo.wq
这里的黄色表示没有生效,稍后我们还需要进行配置。
下一步
回到APPID列表,选择我们创建的APPID点击编辑,对Applepay进行配置
找到下面Applepay进行配置
选择应用要使用的merchantID,为什么可以多选,我也不知道,有知道的可以回复,谢谢
点击分配
后面还有一个是完成,就不上图了。
到此我们的MerchantID及对应证书,还有APPID的申请就完成了,大家可以创建工程继续接入Applepay了
OK--- 证书告一段落.
接下来进入Xcode.
继续在Capabilities 里Apple Pay里进行操作.选择刚刚创建的Merchant ID.
此时看我们的项目,会多一个这样的文件.
OK.开始代码.
由于只是个小demo.所以我直接在ViewController里进行书写
首先,导入库.
- #import <PassKit/PassKit.h>
- @interface ViewController ()<PKPaymentAuthorizationViewControllerDelegate>
然后开始我们的编码.
- - (void)ApplePayJudge{
- //检查当前设备
- if ([PKPaymentAuthorizationViewController canMakePayments]){
- NSLog(@"可以支付");
- PKPaymentRequest * request = [[PKPaymentRequest alloc]init];
- PKPaymentSummaryItem * goodsOne = [PKPaymentSummaryItem summaryItemWithLabel:@"无尽" amount:[NSDecimalNumber decimalNumberWithString:@"3000"]];
- PKPaymentSummaryItem * goodsTwo = [PKPaymentSummaryItem summaryItemWithLabel:@"三项" amount:[NSDecimalNumber decimalNumberWithString:@"3000"]];
- PKPaymentSummaryItem * goodsThree = [PKPaymentSummaryItem summaryItemWithLabel:@"电刀" amount:[NSDecimalNumber decimalNumberWithString:@"2800"]];
- PKPaymentSummaryItem * goodsFour = [PKPaymentSummaryItem summaryItemWithLabel:@"总计" amount:[NSDecimalNumber decimalNumberWithString:@"8800"]];
- request.paymentSummaryItems = @[goodsOne,goodsTwo,goodsThree,goodsFour];
- request.countryCode = @"CN";
- request.currencyCode = @"CNY";
- request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa];
- request.merchantIdentifier = @"merchant.com.JLL";
- request.merchantCapabilities = PKMerchantCapabilityEMV;
- PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
- paymentPane.delegate = self;
- [self presentViewController:paymentPane animated:TRUE completion:nil];
- }else{
- NSLog(@"不支持支付");
- }
- }
首先进行判断是否可以进行支付操作.如果可以进行支付操作.即进行操作请求.goodsOne .Two.Three 即单件商品.goodsFour即总价.
- request.countryCode = @"CN";
- request.currencyCode = @"CNY";
即为中国以及人民币的编码.相信大家会用的比较多.
此时在viewdidload 里实现这个方法.就能看到界面了.
此时.再实现协议的两个方法,来完成支付判断以及界面移除即可.
- - (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controlle didAuthorizePayment:(PKPayment *)payment
- completion:(void (^)(PKPaymentAuthorizationStatus status))completion{
- NSLog(@"Payment was authorized: %@", payment);
- BOOL asyncSuccessful = FALSE;
- if(asyncSuccessful) {
- completion(PKPaymentAuthorizationStatusSuccess);
- NSLog(@"支付成功");
- } else {
- completion(PKPaymentAuthorizationStatusFailure);
- NSLog(@"支付失败");
- }
- }
- - (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller
- {
- NSLog(@"支付完成");
- //支付完成后隐藏窗口
- [controller dismissViewControllerAnimated:TRUE completion:nil];