Apple Pay开发-项目集成-详细设置
2016-03-17 15:45
567 查看
今天公司的 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
接下来就是开始写相应内容:
创建两个属性:
然后我们就可以运行了~效果如下:
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>
然后我们就可以运行了~效果如下:
相关文章推荐
- android中MVP模式
- 【原创】微信支付遇到的各种坑及解决方案随笔记录,invalid signature, "errMsg":"chooseWXPay:fail"
- Android 全局异常捕获之CrashHandler
- Android APK反编译
- I.MX6 android 移除shutdown功能
- Android 5.0+ 自定义普通按钮的ripple波纹效果
- iOS 屏幕旋转 nav+tabbar+present(网页) 2016
- Parcelable encountered ClassNotFoundException reading a Serializable object bug解析
- WebView使用汇总
- 让Android Studio的智能感知不区分大小写
- Android开发实例详解之IMF(Android SDK Sample—SoftKeyboard)
- 浅谈 MVP in Android
- JNI_Android项目中调用.so动态库实现详解(初探)
- 给 Android 开发者的 RxJava 详解
- iOS 多线程编程Part 1/3 - NSThread & Run Loop
- iOS中为控件设置颜色渐变和透明度渐变
- MVP for Android: 如何组织显示层的内容
- Android 自定义权限 (<permission> <uses-permission>)
- Android事件分发机制
- Objective-C的Method Swizzle、对象模型、消息机制、消息转发的详解