ApplePay支付功能出来已经很久了,看着API自己学习了一下,今天想起来总结一下,也算是在学习一下,所以写了这篇笔记,
applePay是在iphone 6以上设备才支持这个支付功能的,这一点一定要清楚,
我是简单的实现了一下功能做演示功能其他的就不说了,直接上代码,加注释
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//判断设备是否支持applePay功能
if (![PKPaymentAuthorizationViewController canMakePayments]) {
//设备不支持
//不让applePay的支付按钮显示
NSLog(@"设备不支持");
return;
}
//判断是否支持Visa和银联
if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkChinaUnionPay,PKPaymentNetworkVisa]]) {
NSLog(@"支持visa和银联");
//进入银行卡的选择
[[[PKPassLibrary alloc]init]openPaymentSetup];
return;
}
//创建支付请求
PKPaymentRequest *requ = [[PKPaymentRequest alloc]init];
//设置商户ID。这个ID就是和支付宝的商户ID意思一样
requ.merchantIdentifier = @"merchant.www.Kensence.com.ApplePay";
//设置国家代码
requ.countryCode = @"CN"; //表示中国
//设置支持卡
requ.supportedNetworks = @[PKPaymentNetworkChinaUnionPay,PKPaymentNetworkVisa];
//商户的支付标准
requ.merchantCapabilities = PKMerchantCapability3DS;
//设置货币单位
requ.currencyCode = @"CNY";
//设置商品
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:@"4"];
PKPaymentSummaryItem *item = [PKPaymentSummaryItem summaryItemWithLabel:@"毛巾" amount:number];
//多种商品最后一个item是商品的总价,这个一定要搞清楚,最后一个应该传商品的总价,
requ.paymentSummaryItems = @[item];
//设置收据必填内容
requ.requiredBillingAddressFields = PKAddressFieldAll;
//设置送货地址
requ.requiredShippingAddressFields = PKAddressFieldAll;
//设置送货方式
PKShippingMethod *meth = [PKShippingMethod summaryItemWithLabel:@"顺风" amount:[NSDecimalNumber decimalNumberWithString:@"8"]];
meth.identifier = @"shunfeng";
meth.detail = @"24小时之内到达";
requ.shippingMethods = @[meth];
//显示支付界面
PKPaymentAuthorizationViewController *payVC = [[PKPaymentAuthorizationViewController alloc]initWithPaymentRequest:requ];
payVC.delegate = self;
[self presentViewController:payVC animated:YES completion:nil];
}
//使用密码支付
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
didAuthorizePayment:(PKPayment *)payment
completion:(void (^)(PKPaymentAuthorizationStatus status))completion
{
//把支付信息发送给服务器处理
//支付结果,显示不同的显示(调用block,穿不同的枚举)
completion(PKPaymentAuthorizationStatusSuccess);
}
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller
{
//把支付的界面关闭
[self dismissViewControllerAnimated:YES completion:nil];
}