Apple Pay
公司在2014苹果秋季新品发布会上发布的一种基于NFC近距离无线通讯技术的手机支付功能,于2014年10月20日在美国正式上线。
2016年2月18日凌晨5:00, Apple Pay 业务在中国上线。
支持系统和机型
操作系统最低iOS9.0以上,部分信息设置需要iOS9.2以上
App接入Apple Pay
- 基于iOS的PassKitFramework:
需要对Payment Sheet的逻辑和异常情况做好相应的UI处理。同时在后台也需要做好支付信息解密、银联接口的交互以及订单状态处理。 - 使用第三方SDK接入
- 中国银联
- 连连支付
- 首信易支付
-
易宝支付
苹果目前建议国内和第三方合作接入ApplePay,能够省去了一家家银行签约的过程,由第三方和一家家银行沟通事项,商户和第三方沟通。所以签约部分就是和第三方支付平台签约了,钱会进入和第三方签约的银行卡内。
基于基于iOS PassKit Framework 接入Apple Pay
- 申请Merchant ID以及证书
-
工程中Capbility 启用ApplePay权限
集成
- 导入头文件
#import<PassKit/PassKit.h>用户绑定的银行卡信息
#import<PassKit/PKPaymentAuthorizationViewController.h>Apple pay的展示控件
- 系统检测
if (![PKPaymentAuthorizationViewController class]) {
PKPaymentAuthorizationViewController需iOS8.0以上支持
return;
}
- 设备检测
if (![PKPaymentAuthorizationViewController canMakePayments]) {
支付需iOS9.0以上支持
如果当前设备不支持ApplePay需要隐藏ApplePay支付按钮
return;
}
- 检测用户可进行支付卡的类型
是否支持Amex、MasterCard、Visa与银联四种卡,根据自己项目的需要进行检测
NSArray *supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard,PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];
if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:supportedNetworks])
{
如果当前设备未设置/当前设备设置的支付银行卡无法在商户提供的支付平台支付,则隐藏ApplePay支付按钮,可以显示SetApple Pay按钮(可选),提醒用户进行设置ApplePay。
return;
}
- 创建支付请求
PKPaymentRequest
Ø//设置币种、国家码及merchant标识符等基本信息
PKPaymentRequest *payRequest = [[PKPaymentRequest alloc]init];
payRequest.countryCode = @"CN"; //国家代码
payRequest.currencyCode = @“CNY”; //RMB的币种代码payRequest.merchantIdentifier = @“merchant.ApplePayAiitecDemo”; //申请的merchantID
payRequest.supportedNetworks = supportedNetworks; //用户可进行支付的银行卡
payRequest.merchantCapabilities = PKMerchantCapability3DS|PKMerchantCapabilityEMV;
- 送货地址
需要根据不同的商品类型来设置requiredShippingAddressFields
Ø如果使电子/虚拟商品(一般为提取/下载链接),则显示联系人邮箱。
Ø如果为实物,则显示联系人地址、手机号以及邮箱
payRequest.requiredShippingAddressFields = PKAddressFieldPostalAddress|PKAddressFieldPhone|PKAddressFieldName;
//送货地址信息,这里设置需要地址和联系方式和姓名,如果需要进行设置,默认PKAddressFieldNone(没有送货地址)
- 配送方式
//设置商品的配送方式
PKShippingMethod *freeShipping = [PKShippingMethod summaryItemWithLabel:@"包邮" amount:[NSDecimalNumber zero]];
freeShipping.identifier = @"freeshipping";
freeShipping.detail = @"6-8 天 送达";
PKShippingMethod *expressShipping = [PKShippingMethod summaryItemWithLabel:@"极速送达" amount:[NSDecimalNumber decimalNumberWithString:@"10.00"]];
expressShipping.identifier = @"expressshipping";
expressShipping.detail = @"2-3 小时 送达”;
payRequest.shippingMethods = @[freeShipping, expressShipping];
- 账单信息
账单列表使用PKPaymentSummaryItem添加描述和价格,价格使用NSDecimalNumber。
PKPaymentSummaryItem初始化:
label为商品名字或者是描述,amount为商品价格,折扣为负数,type为该条账单为最终价格还是估算价格
NSDecimalNumber*subtotalAmount= [NSDecimalNumber decimalNumberWithMantissa:1275 exponent:-2isNegative:NO]; //12.75
PKPaymentSummaryItem *subtotal =[PKPaymentSummaryItem summaryItemWithLabel:@"商品价格"amount:subtotalAmount];
NSDecimalNumber*discountAmount = [NSDecimalNumber decimalNumberWithString:@"-12.74"]; //-12.74
PKPaymentSummaryItem *discount =[PKPaymentSummaryItem summaryItemWithLabel:@"优惠折扣"amount:discountAmount];
- 显示Apple Pay 控件
PKPaymentAuthorizationViewController *viewController = [[PKPaymentAuthorizationViewController alloc]initWithPaymentRequest:payRequest];
viewController.delegate= self;
[self presentViewController:viewController animated:YES completion:nil];
代理方法
Apple Pay UI强制要求
官方文档