Apple Pay开发-项目集成-详细设置
来源:互联网 发布:手机不能用数据上网 编辑:程序博客网 时间:2024/05/18 02:56
今天公司的 WeChatpay and QQWallet 迎来了新的兄弟:Apple Pay
o(╯□╰)o好累啊,都说好不做钱包支付的,结果还是硬做了。
ps:确实比蓝牙控制机器人好做
简单介绍一下:2月18日,苹果公司移动支付服务Apple Pay正式登陆中国。 Apple Pay是苹果公司在2014年发布的一种基于NFC(近距离无线通信)技术的移动支付服务。
话不多说啦,进入正题:
①Apple Pay运行环境:操作系统最低iOS9.0以上,iPhone6以上设备。
②用开发者账号申请MerchantID和证书
③开始创建工程并设置:
起名的时候随意,但是要记住的是你的证书和你的bundleID是要对应的
然后在Capability开启Apple Pay(如图)
然后工程中会有配置文件Japan-ApplePay.entitlements
然后开始添加framework
工程配置完了,现在开始进入码代码阶段,直接进入ViewController.m
接下来就是开始写相应内容:
创建两个属性:
<span style="font-size:14px;">@property (nonatomic)NSMutableArray * accountlist;// 账户的账单@property (nonatomic)NSMutableArray * shopway;// 购买的方式</span>写一个判断方法:
<span style="font-size:14px;">// 开始之前对设备进行判断- (BOOL)AccessApplePay{ // 判断当前设备支持支付或否 if (![PKPaymentAuthorizationViewController class]) { // 为No的时候,主要是系统不支持,需要在9.0的环境以及iphone6以上机型 return NO; } if (![PKPaymentAuthorizationViewController canMakePayments]) { // 原因同上 return NO; } // 判断用户是否可进行四种卡片的支付,分别是Amex、MasterCard、Visa与Union四种卡 NSArray *cardkind = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard,PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay]; // 下面这步判断的是有没有绑定银行卡 if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:cardkind]) { NSLog(@"没有绑定卡"); return NO; } NSLog(@"判断完成"); return YES;}</span><span style="font-size: 14px;"></span>在判断方法结束之后执行这个:
<span style="font-size:14px;">// 对手机进行判定以后开始支付流程 if ([self AccessApplePay]) { [self BeginProcess]; }</span>已经很详细的设置了每一个参数
<span style="font-size:14px;">// 达到允许条件之后开始进入流程- (void)BeginProcess{ // 支付卡片的四种选项 NSArray *cardkind = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard,PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay]; // 设置基本信息 PKPaymentRequest *payRequest = [[PKPaymentRequest alloc]init]; payRequest.countryCode = @"CN"; // 国家代码 payRequest.currencyCode = @"CNY"; // 币种 payRequest.merchantIdentifier = @"merchant.Japan-ApplePay"; // 申请的merchantID payRequest.supportedNetworks = cardkind; // 用于支付的卡的种类 payRequest.merchantCapabilities = PKMerchantCapability3DS|PKMerchantCapabilityEMV; // 设置支持的交易处理协议 payRequest.requiredShippingAddressFields = PKAddressFieldPostalAddress|PKAddressFieldPhone|PKAddressFieldName; // 送货的信息,设置地址,电话,姓名 // 设置送货方式 // 免费的快递 PKShippingMethod *freeShipping = [PKShippingMethod summaryItemWithLabel:@"EMS包邮" amount:[NSDecimalNumber zero]]; freeShipping.identifier = @"freeshipping"; freeShipping.detail = @"4-6 天"; // 需要加钱的快递 PKShippingMethod *expressShipping = [PKShippingMethod summaryItemWithLabel:@"顺丰速运" amount:[NSDecimalNumber decimalNumberWithString:@"10.00"]]; expressShipping.identifier = @"expressshipping"; expressShipping.detail = @"2-3 天"; // 在这里使用到了_shopway的数组 _shopway = [NSMutableArray arrayWithArray:@[freeShipping, expressShipping]]; //shippingMethods为配送方式列表,类型是 NSMutableArray,这里设置成成员变量,在后续的代理回调中可以进行配送方式的调整。 payRequest.shippingMethods = _shopway; NSDecimalNumber *subtotalAmount = [NSDecimalNumber decimalNumberWithMantissa:10000 exponent:-2 isNegative:NO];// 小数点后两位1000.00 PKPaymentSummaryItem *subtotal = [PKPaymentSummaryItem summaryItemWithLabel:@"商品价格" amount:subtotalAmount]; NSDecimalNumber *discountAmount = [NSDecimalNumber decimalNumberWithString:@"-10"]; // 折扣10 PKPaymentSummaryItem *discount = [PKPaymentSummaryItem summaryItemWithLabel:@"折扣" amount:discountAmount]; NSDecimalNumber *methodsAmount = [NSDecimalNumber zero]; PKPaymentSummaryItem *methods = [PKPaymentSummaryItem summaryItemWithLabel:@"EMS包邮" amount:methodsAmount]; NSDecimalNumber *totalAmount = [NSDecimalNumber zero]; totalAmount = [totalAmount decimalNumberByAdding:subtotalAmount]; totalAmount = [totalAmount decimalNumberByAdding:discountAmount]; totalAmount = [totalAmount decimalNumberByAdding:methodsAmount]; PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"喵喵的账户~" amount:totalAmount];// 收款方名字,账户 _accountlist = [NSMutableArray arrayWithArray:@[subtotal, discount, methods, total]]; //_accountlist是存放账单的可变数组,后续的代理中可以进行支付金额的调整。 payRequest.paymentSummaryItems = _accountlist; // 启用ApplePay的页面控件 PKPaymentAuthorizationViewController *view = [[PKPaymentAuthorizationViewController alloc]initWithPaymentRequest:payRequest]; view.delegate = self; [self presentViewController:view animated:YES completion:nil];}</span><span style="font-size: 14px;"></span>最后不要忘记协议代理:
<span style="font-size:14px;">#pragma mark 支付的代理设置- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didSelectShippingContact:(PKContact *)contact completion:(void (^)(PKPaymentAuthorizationStatus, NSArray<PKShippingMethod *> * _Nonnull, NSArray<PKPaymentSummaryItem *> * _Nonnull))completion{ //contact送货地址信息,PKContact类型 NSPersonNameComponents *name = contact.name; //联系人 姓名 CNPostalAddress *postalAddress = contact.postalAddress; //联系人 地址 NSString *emailAddress = contact.emailAddress; //联系人 邮箱 CNPhoneNumber *phoneNumber = contact.phoneNumber; //联系人 手机 NSString *supplementarySubLocality = contact.supplementarySubLocality; completion(PKPaymentAuthorizationStatusSuccess, _shopway, _accountlist);}- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didSelectShippingMethod:(PKShippingMethod *)shippingMethod completion:(void (^)(PKPaymentAuthorizationStatus, NSArray<PKPaymentSummaryItem *> * _Nonnull))completion{ // 送货方式回调,如果需要根据不同的送货方式进行支付金额的调整,比如EMS包邮和付费顺丰配送,可以实现该代理 PKShippingMethod *oldShippingMethod = [_accountlist objectAtIndex:2]; PKPaymentSummaryItem *total = [_accountlist lastObject]; total.amount = [total.amount decimalNumberBySubtracting:oldShippingMethod.amount]; total.amount = [total.amount decimalNumberByAdding:shippingMethod.amount]; [_accountlist replaceObjectAtIndex:2 withObject:shippingMethod]; [_accountlist replaceObjectAtIndex:3 withObject:total]; completion(PKPaymentAuthorizationStatusSuccess, _accountlist);}// 支付银行卡回调,看情况根据不同的银行调整,然后付费金额-(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didSelectPaymentMethod:(PKPaymentMethod *)paymentMethod completion:(void (^)(NSArray<PKPaymentSummaryItem *> * _Nonnull))completion{ completion(_accountlist);}// 送货地址的回调-(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didSelectShippingAddress:(ABRecordRef)address completion:(void (^)(PKPaymentAuthorizationStatus, NSArray<PKShippingMethod *> * _Nonnull, NSArray<PKPaymentSummaryItem *> * _Nonnull))completion{ }- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus status))completion { // 支付验证 PKPaymentToken *payToken = payment.token; // 与服务器验证支付是否有效 PKContact *billingContact = payment.billingContact; //账单信息 PKContact *shippingContact = payment.shippingContact; //送货信息 PKContact *shippingMethod = payment.shippingMethod; //送货方式 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ completion(PKPaymentAuthorizationStatusSuccess); }); }- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller{ [controller dismissViewControllerAnimated:YES completion:nil];}</span><span style="font-size:18px;"></span>
然后我们就可以运行了~效果如下:
0 0
- Apple Pay开发-项目集成-详细设置
- iOS 集成apple Pay 接入详细教程
- Apple Pay接入详细教程 - iOS开发
- Apple Pay开发 申请MerchantID详细介绍
- Apple Pay 详细教程
- ios开发——iOS App集成Apple Pay教程
- 浅谈Apple Pay开发
- Apple Pay开发详解
- APP集成Apple Pay指南
- Apple Pay接入详细教程
- Apple Pay接入详细教程
- Apple Pay接入详细教程
- Apple Pay接入详细教程
- Apple Pay接入详细教程
- Apple Pay接入详细教程
- Apple Pay接入详细教程
- Apple Pay接入详细教程
- Apple Pay接入详细教程
- gdb 多线程调试
- ElasticSearch实战-日志监控平台架构方案
- C++面向对象编程分享03----20160317_李楚煌
- “人脸识别”在未来的一些可能方向
- Operating Systems: Three Easy Pieces(操作系统:三个简单方面)4.3进程创建的更多细节
- Apple Pay开发-项目集成-详细设置
- android开发之当设置textview多少字后以省略号显示。限制TextView的字数
- 浅谈LAMP平台的构建
- MySQL学习(二)
- 如何使用Hive集成Solr?
- T-SQL注意事项(1)——SET NOCOUNT ON的去与留
- enumerateObjectsUsingBlock
- doxygen 配置说明
- SQL自动备份 备份到本地或者远程服务器