IOS开发入门之ApplePay集成教程
白羽 2018-11-23 来源 :网络 阅读 865 评论 0

摘要:本文将带你了解IOS开发入门ApplePay集成教程,希望本文对大家学IOS有所帮助。

    本文将带你了解IOS开发入门ApplePay集成教程,希望本文对大家学IOS有所帮助。


        

Apple Pay运行环境:iPhone6以上设备,操作系统最低iOS9.0以上,部分信息设置需要iOS9.2以上。目前还不支持企业证书添加。

环境搭建好后可以在模拟器上面运行,xcode7.2.1+iPhone6SP9.2系统下,系统会绑定几种虚拟的银行卡,和几个联系人,方便调试,支付也不会发生真实的付款,真的很方便。

准备工作

在接入Apple Pay之前,首先要申请MerchantID及对应证书。

 

申请MerchantID

申请对应证书

工程设置

Capability中启用Apple Pay权限,并选择merchantID。


之后项目会多一个Applepay的配置文件ApplePayDemo.entitlements

如果Steps出现那三项就证明配置正确

 

 


   

#import "ViewController.h"

#import <passkit passkit.h="">

@interface ViewController ()<pkpaymentauthorizationviewcontrollerdelegate>

{

    NSMutableArray *summaryItems;

    NSMutableArray *shippingMethods;

}

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

 

     

    UIButton *btn=[[UIButton alloc]init];

    btn.backgroundColor=[UIColor colorWithRed:0.196 green:0.371 blue:0.248 alpha:1.000];

    [btn setTitle:@"开始支付" forState:UIControlStateNormal];

    [btn addTarget:self action:@selector(buyNow) forControlEvents:UIControlEventTouchUpInside];

    btn.frame=CGRectMake(100, 100, 100, 50);

    [self.view addSubview:btn];

}

 

 

 

 

- (void)buyNow {

    if (![PKPaymentAuthorizationViewController class]) {

        //PKPaymentAuthorizationViewController需iOS8.0以上支持

        NSLog(@"操作系统不支持ApplePay,请升级至9.0以上版本,且iPhone6以上设备才支持");

        return;

    }

    //检查当前设备是否可以支付

    if (![PKPaymentAuthorizationViewController canMakePayments]) {

        //支付需iOS9.0以上支持

        NSLog(@"设备不支持ApplePay,请升级至9.0以上版本,且iPhone6以上设备才支持");

        return;

    }

    //检查用户是否可进行某种卡的支付,是否支持Amex、MasterCard、Visa与银联四种卡,根据自己项目的需要进行检测

    NSArray *supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard,PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];

    if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:supportedNetworks]) {

        NSLog(@"没有绑定支付卡");

        return;

    }

    NSLog(@"可以支付,开始建立支付请求");

    //设置币种、国家码及merchant标识符等基本信息

    PKPaymentRequest *payRequest = [[PKPaymentRequest alloc]init];

    payRequest.countryCode = @"CN";     //国家代码

    payRequest.currencyCode = @"CNY";       //RMB的币种代码

    payRequest.merchantIdentifier = @"merchant.com.kuaichengwuliu";  //申请的merchantID

    payRequest.supportedNetworks = supportedNetworks;   //用户可进行支付的银行卡

    payRequest.merchantCapabilities = PKMerchantCapability3DS|PKMerchantCapabilityEMV;      //设置支持的交易处理协议,3DS必须支持,EMV为可选,目前国内的话还是使用两者吧

     

     

    //如果需要邮寄账单可以选择进行设置,默认PKAddressFieldNone(不邮寄账单)

    //    payRequest.requiredBillingAddressFields = PKAddressFieldEmail;

     

    //楼主感觉账单邮寄地址可以事先让用户选择是否需要,否则会增加客户的输入麻烦度,体验不好,

    //送货地址信息,这里设置需要地址和联系方式和姓名,如果需要进行设置,默认PKAddressFieldNone(没有送货地址)

//    payRequest.requiredShippingAddressFields = PKAddressFieldPostalAddress|PKAddressFieldPhone|PKAddressFieldName;

     

     

    //设置两种配送方式 用户可以手动选择

    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 小时 送达";

    shippingMethods = [NSMutableArray arrayWithArray:@[freeShipping, expressShipping]];

    //shippingMethods为配送方式列表,类型是 NSMutableArray,这里设置成成员变量,在后续的代理回调中可以进行配送方式的调整。

    payRequest.shippingMethods = shippingMethods;

     

     

    //配置价格 优惠价格

    NSDecimalNumber *subtotalAmount = [NSDecimalNumber decimalNumberWithMantissa:1275 exponent:-2 isNegative:NO];   //12.75

    PKPaymentSummaryItem *subtotal = [PKPaymentSummaryItem summaryItemWithLabel:@"商品价格" amount:subtotalAmount];

     

    NSDecimalNumber *discountAmount = [NSDecimalNumber decimalNumberWithString:@"-12.74"];      //-12.74

    PKPaymentSummaryItem *discount = [PKPaymentSummaryItem summaryItemWithLabel:@"优惠折扣" amount:discountAmount];

     

    NSDecimalNumber *methodsAmount = [NSDecimalNumber zero];

    PKPaymentSummaryItem *methods = [PKPaymentSummaryItem summaryItemWithLabel:@"包邮" amount:methodsAmount];

     

    NSDecimalNumber *totalAmount = [NSDecimalNumber zero];

    totalAmount = [totalAmount decimalNumberByAdding:subtotalAmount];

    totalAmount = [totalAmount decimalNumberByAdding:discountAmount];

    totalAmount = [totalAmount decimalNumberByAdding:methodsAmount];

     

    PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"ls" amount:totalAmount];  //最后这个是支付给谁。哈哈,快支付给我

     

    summaryItems = [NSMutableArray arrayWithArray:@[subtotal, discount, methods, total]];

    //summaryItems为账单列表,类型是 NSMutableArray,这里设置成成员变量,在后续的代理回调中可以进行支付金额的调整。

    payRequest.paymentSummaryItems = summaryItems;

     

     

    //ApplePay控件

    PKPaymentAuthorizationViewController *view = [[PKPaymentAuthorizationViewController alloc]initWithPaymentRequest:payRequest];

    view.delegate = self;

    [self presentViewController:view animated:YES completion:nil];

     

}

#pragma mark - PKPaymentAuthorizationViewControllerDelegate

- (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;  //补充信息,iOS9.2及以上才有

     

    //送货信息选择回调,如果需要根据送货地址调整送货方式,比如普通地区包邮+极速配送,偏远地区只有付费普通配送,进行支付金额重新计算,可以实现该代理,返回给系统:shippingMethods配送方式,summaryItems账单列表,如果不支持该送货信息返回想要的PKPaymentAuthorizationStatus

    completion(PKPaymentAuthorizationStatusSuccess, shippingMethods, summaryItems);

}

 

- (void)paymentAuthorizationViewController:(PKPaymentAuthorization    

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程