Apple Pay接入详细教程

作者: Yasin的简书 | 来源:发表于2016-02-24 14:47 被阅读19898次

    Apple Pay运行环境:iPhone6以上设备,操作系统最低iOS9.0以上,部分信息设置需要iOS9.2以上。目前还不支持企业证书添加。
    环境搭建好后可以在模拟器上面运行,xcode7.2.1+iPhone6SP9.2系统下,系统会绑定几种虚拟的银行卡,和几个联系人,方便调试,支付也不会发生真实的付款,真的很方便。
    [TCO]

    业务方面

    首先你要明白,ApplePay和支付宝、微信支付最大的不同点:用户的资金不存放在ApplePay。
    支付宝、微信支付把用户的钱从银行卡里面拿出来放到阿里腾讯公司,ApplePay没有,钱还是在银行卡里面,所以说ApplePay相当于只是一个卡包,帮你存放实体卡而已。
    ApplePay里面的Pay,其实并不属于苹果的业务,只是苹果公司和银行合作产生的一种业务,如果没有银行就没有ApplePay,和银行是强关联的,和苹果公司是弱关联的。

    • 银行会喜欢ApplePay而不是喜欢支付宝、微信,为什么?
      互联网金融时代,支付宝、微信等网络支付渠道把用户的资金从银行卡拿到自己的公司账户里面,导致了银行只看到一条的资金流向是支付宝、微信,但是并不清楚用户把这些钱干嘛了,是投资了还是买买奶粉了。大数据时代这些信息是很珍贵的,(我知道一个做安全的专家从来不在网上购物,即使网上购物已经成了我们生活不可缺少的一部分,知道他怎么做吗,他让自己的秘书去网上帮自己买想要的东西,然后付现金给秘书,注意是现金,不是转账,扯远了)。通过ApplePay银行就可以了解到用户的资金流向了

    • 钱支付成功后去哪了?
      这个问题主要是因为我们没有签约之前发生了虚拟交易,客户端签约方式是和第三方支付平台签约,实体店接入ApplePay的方式是升级POS机,支持NFC的POS机,就是和银行更新合约。
      ApplePay完全不中转用户的资金,只是一个保存信用卡、借记卡信息的钱包,并且省去了用户签名的过程。所以你除了支持用户使用这种支付方式,关键还是要和银行签约。
      客户端方面,苹果目前建议是和第三方合作接入Applepay,比如银联等等,省去了一家家银行签约的过程,由第三方和一家家银行沟通事项,商户之和第三方沟通。所以签约部分就是和第三方支付平台签约了,钱会进入和第三方签约的银行卡内。
      苹果目前提供以下几个第三方平台签约
      中国银联
      连连支付
      首信易支付
      易宝支付
      银联商务

    一般来说银联这些第三方支付会把ApplePay的流程代码写入到他们的SDK里面,如果说你不想了解Applepay的内部怎么实现的,就没有必要继续阅读了,你只需要去阅读第三方SDK的接入文档就行了。

    准备工作

    在接入Apple Pay之前,首先要申请MerchantID及对应证书。
    请移步我写的申请MerchantID及对应证书详细图文教程

    工程设置

    bundleID设置


    Applepay Setting1.png

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


    Applepay Setting2.png

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


    Applepay Setting3.png

    需要引用的库

    Xcode7.0以上不需要再手动添加需要引用的库了,只需要导入头文件就可以了

    #import <PassKit/PassKit.h>                                 //用户绑定的银行卡信息
    #import <PassKit/PKPaymentAuthorizationViewController.h>    //Apple pay的展示控件
    #import <AddressBook/AddressBook.h>                         //用户联系信息相关
    

    设备Applepay权限检测

        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;
        }
    

    创建支付请求PKPaymentRequest

    • 初始化PKPaymentRequest
      这里需要注意RMB的币种代码是CNY
    //设置币种、国家码及merchant标识符等基本信息
        PKPaymentRequest *payRequest = [[PKPaymentRequest alloc]init];
        payRequest.countryCode = @"CN";     //国家代码
        payRequest.currencyCode = @"CNY";       //RMB的币种代码
        payRequest.merchantIdentifier = @"merchant.ApplePayDemoYasin";  //申请的merchantID
        payRequest.supportedNetworks = supportedNetworks;   //用户可进行支付的银行卡
        payRequest.merchantCapabilities = PKMerchantCapability3DS|PKMerchantCapabilityEMV;      //设置支持的交易处理协议,3DS必须支持,EMV为可选,目前国内的话还是使用两者吧
    
    • 设置发票配送信息和货物配送地址信息,用户设置后可以通过代理回调代理获取信息的更新
    //    payRequest.requiredBillingAddressFields = PKAddressFieldEmail;   
    //如果需要邮寄账单可以选择进行设置,默认PKAddressFieldNone(不邮寄账单)
    //楼主感觉账单邮寄地址可以事先让用户选择是否需要,否则会增加客户的输入麻烦度,体验不好,
        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];
    
    ApplePayiPhone2.png ApplePayiPhone3.png
    • 账单信息的设置
    • 每条账单的设置
      账单列表使用PKPaymentSummaryItem添加描述和价格,价格使用NSDecimalNumber
      PKPaymentSummaryItem初始化:
      label为商品名字或者是描述,amount为商品价格,折扣为负数,type为该条账单为最终价格还是估算价格(比如出租车价格预估)
      + (instancetype)summaryItemWithLabel:(NSString *)label amount:(NSDecimalNumber *)amount;
      + (instancetype)summaryItemWithLabel:(NSString *)label amount:(NSDecimalNumber *)amount type:(PKPaymentSummaryItemType)type NS_AVAILABLE(NA, 9_0);
    • NSDecimalNumber初始化:
      NSDecimalNumber可以使用数字初始化,也可以使用字符串。
      使用方法请移步我写的NSDecimalNumber--十进制数
    • 添加账单列表:
        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:@"Yasin" 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];
    

    PKPaymentAuthorizationViewControllerDelegate代理

    • 这里还有两个类要介绍
    • PKPayment 支付成功信息
        PKPaymentToken *payToken = payment.token;
        //支付凭据,发给服务端进行验证支付是否真实有效
        PKContact *billingContact = payment.billingContact;     //账单信息
        PKContact *shippingContact = payment.shippingContact;   //送货信息
        PKContact *shippingMethod = payment.shippingMethod;     //送货方式
    
    • PKContact 联系人信息
        NSPersonNameComponents *name = contact.name;                //联系人姓名
        CNPostalAddress *postalAddress = contact.postalAddress;     //联系人地址
        NSString *emailAddress = contact.emailAddress;              //联系人邮箱
        CNPhoneNumber *phoneNumber = contact.phoneNumber;           //联系人手机
        NSString *supplementarySubLocality = contact.supplementarySubLocality;  //补充信息,地址详细描述,其他备注等等,iOS9.2及以上才有
    
    • 代理说明
      送货地址回调
    -(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                      didSelectShippingContact:(PKContact *)contact
                                    completion:(void (^)(PKPaymentAuthorizationStatus, NSArray<PKShippingMethod *> * _Nonnull, NSArray<PKPaymentSummaryItem *> * _Nonnull))completion{
        //contact送货地址信息,PKContact类型
        //送货信息选择回调,如果需要根据送货地址调整送货方式,比如普通地区包邮+极速配送,偏远地区只有付费普通配送,进行支付金额重新计算,可以实现该代理,返回给系统:shippingMethods配送方式,summaryItems账单列表,如果不支持该送货信息返回想要的PKPaymentAuthorizationStatus
        completion(PKPaymentAuthorizationStatusSuccess, shippingMethods, summaryItems);
    }
    

    送货方式回调

    -(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                       didSelectShippingMethod:(PKShippingMethod *)shippingMethod
                                    completion:(void (^)(PKPaymentAuthorizationStatus, NSArray<PKPaymentSummaryItem *> * _Nonnull))completion{
        //配送方式回调,如果需要根据不同的送货方式进行支付金额的调整,比如包邮和付费加速配送,可以实现该代理
        PKShippingMethod *oldShippingMethod = [summaryItems objectAtIndex:2];
        PKPaymentSummaryItem *total = [summaryItems lastObject];
        total.amount = [total.amount decimalNumberBySubtracting:oldShippingMethod.amount];
        total.amount = [total.amount decimalNumberByAdding:shippingMethod.amount];
        
        [summaryItems replaceObjectAtIndex:2 withObject:shippingMethod];
        [summaryItems replaceObjectAtIndex:3 withObject:total];
        
        completion(PKPaymentAuthorizationStatusSuccess, summaryItems);
    }
    

    支付卡选择回调

    -(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didSelectPaymentMethod:(PKPaymentMethod *)paymentMethod completion:(void (^)(NSArray<PKPaymentSummaryItem *> * _Nonnull))completion{
        //支付银行卡回调,如果需要根据不同的银行调整付费金额,可以实现该代理
        completion(summaryItems);
    }
    

    送货地址回调,已弃用

    -(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;     //送货方式
        //等待服务器返回结果后再进行系统block调用
        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];
    }
    

    demo的话因为证书问题可能会报错,不过大家可以看看代码。
    demo下载

    著作权归作者所有。
    商业转载请联系作者获得授权,非商业转载请注明出处。
    作者:Yasin

    相关文章

      网友评论

      • 天下林子:问下大神,那个支付的账号是怎么设置的?谢谢~
      • 瓜而不皮很灵性:请问支付完成之后的支付凭证服务器需要receipt-data这个数据,我怎么给到他?我这边返回的数据没有这个字段
        瓜而不皮很灵性:@玩魅无限 不是的,使用原生写的
        JackyL90:你接入的第三方吗
      • 瓜而不皮很灵性:当调用到授权完成之后就相当于是支付完成了吗?- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
        didAuthorizePayment:(PKPayment *)payment
        completion:(void (^)(PKPaymentAuthorizationStatus))completion
        08db3aa26f93:@瓜而不皮很灵性 :kissing_heart:
      • 瓜而不皮很灵性:请问如果不集成三方SDK可以实现Apple Pay吗?
      • e0e2e85955d9:楼主了解既支付国内applepay又支持港澳台applepay吗,用2个第三方支付:sweat: ,感觉有点坑
        Yasin的简书:@lcsimon applepay支付貌似只有第三方,我觉得应该是这样的:就像接入支付宝、微信一样,接入国内的applepay支付第三方和国外applepay支付第三方。不知道这个猜错对不对,你可以查查
        e0e2e85955d9:@Yasin的简书 公司要搞applepay支付,只能接三方了,那个貌似不支持applepay
        Yasin的简书:@lcsimon 没做个,试过paypal吗?
      • d4253fc61e9b:楼主,可以问一下服务端如何验证的流程么?我对这个也不了解。不懂如何推进apple pay功能添加。
      • cj2527:项目会多一个Applepay的配置文件ApplePayYasin.entitlements,请问下,我的xcode8勾选了,但是还是不会出现。
      • 怪咖ZH:楼主,苹果支付需要开发者账号(企业或者个人)吗?
      • 0fce2d850900:您好,请问下楼主有没有遇到过模拟器可以跳出界面,但是真机就跳不出,反馈的错误是<private>。这个问题搞了我一个小时了。
      • a81cabd0288b:Applepay接入第三方平台是的通过第三方平台来支付?
        Yasin的简书:去银联的官网,应该有Demo
        a81cabd0288b:那你有接过银联的applepay?有没案例可以看看??
        Yasin的简书:现在是这个意思,没有开放给普通开发者
      • 30baf1b4df5c:个问题想咨询下博主,PKAddPaymentPassViewController要怎么初始化,没找到什么资料,求助博主
        30baf1b4df5c:@Yasin的简书 可就是找不到资料,想在app里添加卡而不是在钱包里
        30baf1b4df5c:@Yasin的简书 不行哦,missing entitlement: com.apple.developer.payment-pass-provisioning 提示需要授权
        Yasin的简书:```
        - (nullable instancetype)initWithRequestConfiguration:(PKAddPaymentPassRequestConfiguration *)configuration
        delegate:(nullable id<PKAddPaymentPassViewControllerDelegate>)delegate NS_DESIGNATED_INITIALIZER;
        ```
        不行吗
      • 李国安:这个需要咱一个, 写的非常详细, 谢谢
      • 阿斯顿卡卡:你好 apple Pay是不是还得server开发,如果支持银联支付的话,是不是还得继承银联sdk
        阿斯顿卡卡:@Yasin的简书 我们准备接银联的
        Yasin的简书:@阿斯顿卡卡 :joy: 我们没有接入apple Pay,据说是因为收费太贵,你可以选择银联,也可以选择其他的第三方,反正不能自己直接接入
      • c18b8d3c1110:你好,工程中AppID的ID和MerchantID的ID不一样,xcode中选择ApplePay证书时报错怎么办?
      • c18b8d3c1110:为什么我的手机绑卡了,那个方法返回的是没有绑卡。
        Yasin的简书:@安_心 我用的招商银行的银联卡是没有问题的,你看看证书什么的对不对,另外可以用模拟器试下
        c18b8d3c1110:银行卡换了几张了,应该不是卡的问题。
        NSArray *supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard,PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];
        if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:supportedNetworks]) {
        }
        就是这个判断返回没有绑定银行卡!
        Yasin的简书:@安_心 在确认一下是不是代码写错了,或者卡没绑定对
      • iEason_:你好,我想问下如果付款操作失败的时候它是如何回调的呢?或者说如何判断.
        d4253fc61e9b:@iEason_ 你这个应该是服务端与app store内购app的支付回调,而不是apple pay的吧?apple pay是购买内购以外的东西,我也不懂服务端怎么回调的。
        iEason_:@Yasin的简书 恩,已经搞懂了。这个还是需要服务器端配合或者自己去调用苹果的验证接口https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1
        Yasin的简书:@17e3e8486985 每一步操作回调都会回传PKPaymentAuthorizationStatus,所以这个中间步骤的失败都是你在控制的,最后付款失败或者用户取消的话paymentAuthorizationViewController:didAuthorizePayment:completion:方法里面可以进行验证吧,这个我也没试过,文档里面这样写的,PKPayment的token字段你看看
      • 豆小兽:我是来学习的!
      • 顺其自然JX:请问下有什么地方可以设置商品描述信息啊,名字什么的
        Yasin的简书:@顺其自然jx 这个是账单,是没有商品描述的,只有价格的描述,比如“牙膏10元”这样的信息
      • 十方树:楼主您好,麻烦问一下PassKit可以通过什么方法获取到绑定银行卡的虚拟卡号吗?求教。。。
        Yasin的简书:@十方树 支付银行卡回调里面有一个paymentPass,你看看里面有你需要的信息没有,如果没有的话就是获取不到
      • 380ad0f2110c:楼主,跟着你2个博客来操作,现在UI是搞掂了,现在支付都是假的,怎么绑真实的收款银行卡的?
        380ad0f2110c:@Yasin的简书 :joy: 非常感谢
        Yasin的简书:@不锈钢小猪 因为整个支付是从银行卡出的,收也是银行卡收,要和银联合作,给银行掏钱,苹果会从银行拿提成,我大概咨询了一下,外卖类的每单是千分之7左右的手续费
        Yasin的简书:@不锈钢小猪 要接入第三方平台
      • zhiyi:请问 点击用密码支付后,立即提示支付未完成 有遇到过这种情况吗?
      • zhiyi:请问下楼主,如果这样用PassKit接入apple pay 应用内支付,支付流程不需要后端配合进行私钥解密的使用吗?仅仅在代码中使用PassKit API就能完成整个支付流程?
      • 9f4c4a41ffde:请教你一个问题
        支付成功后,返回支付凭证,如何可以查询到订单的状态呢?如有人过一段时间退款,是否可以查询到订单状态改变了?
      • 孤独感爆棚:demo很好,好人一生平安
      • 孤独感爆棚:还真的以为不收费呢。搞了半天还要接入第三方收费




      • _YZG_:楼主:支付凭据,发给服务端进行验证支付是否真实有效,1. 发给服务器是苹果的服务器还是自己的服务器啊?
        2.集成Pay要服务器端做什么啊,
        菜鸟一只,求解
        Yasin的简书:@Yasin的简书 实际应用中大多数公司都是接入第三方的吧
        Yasin的简书:@iOS_NSObject 1.支付凭据发给自己的服务器,自己的服务器再向苹果的服务发起验证
        2.服务端不会啊 :joy: :joy:
      • Raybon_lee:技术的东西还是值得学习一下的,跟进一下知识 :joy:
      • SAW_:感谢分享,亲测可用,有个问题不太明白,银行是如何把支付的钱给自己的公司?通过那个支付商家ID?那是不是自己的公司还要跟银联(银行)绑定相关的商家账号?(反正就是自己公司怎最后怎么收钱?) :smile:
        Yasin的简书:@SAW 嗯,我也搜索了一下,确实是这样,要和第三方合作
        SAW_:@Yasin的简书 谢谢,刚稍微搜索了相关内容,苹果建议是直接接入认证的第三方SDK,比如银联apply pay SDK等。
        Yasin的简书:@SAW 这个问题上面回复过了,这属于业务方面的问题,不属于技术的
      • ea3e92de4dc0:paymentAuthorizationViewControllerWillAuthorizePayment这个代理方法也没有见调用过,请问是什么时候调用的
        ea3e92de4dc0:@Yasin的简书 哦,上面那个会不会因为是模拟器所有无法返回所选支付方式的值呢
        Yasin的简书:@Dongf 这个方法是真机调试使用touchid的时候才会调用,模拟器不会调用
      • ea3e92de4dc0:1.在didSelectShippingContact方法中,无法获取送货的联系人姓名及电话
        2.在didSelectPaymentMethod方法中,无法获取支付方式的信息,paymentMethod是null
        Yasin的简书:@Dongf 确实现在只有一个支付卡type可以获取到,本来说支付完成后会有二次回调的也没出现,不知道是不是和测试环境有关。
        ea3e92de4dc0:@Yasin的简书 我把值都打印出来了,没有才问的,因为你写的是 支付银行卡回调,如果需要根据不同的银行调整付费金额,可以实现该代理,
        Yasin的简书:@Dongf 你看下PKPaymentRequest有没有正确设置,demo在文章的最下方,描述也很详细,你可以参考下
      • EchoZuo:提示支付成功后。。。
        这钱应该去哪儿了?支付给谁了?
        侠客行1024:@Yasin的简书 你好。你既然是使用的真实环境的银行卡,那你是使用哪个第三方平台呢。如果不是的话,那你的银行卡是在哪里添加的呢?
        EchoZuo:好的了解啦 谢谢哈。:smile:
        Yasin的简书:@EchoZuo 这个属于业务方面了,我没有了解,理论上来说首先是要和苹果进行签约,钱是进入签约绑定的银行卡,整个过程可以向苹果咨询一下,这里只是提供技术的接入,后端的支付成功的验证也没有。不过目前我在开发环境下使用真实的银行卡是没有发生真实付款的,就像系统有判断模拟了整个流程
      • 春田花花幼儿园:楼主,不知道你有没有遇到创建调试描述文件的时候,就是创建允许applepay的 bunle ID 的描述文件额时候,描述文件刚创建是 activity 的状态,但是一会儿自己就变成了 invild 的状态了,或者刚创建的调试描述文件最好直接就是 invild的了。 我现在是Payment request is invalid: check your entitlements,Connection to remote alert view service failed 说我没有权限
        Yasin的简书:@春田花花幼儿园 我刚才试了一下创建出来的就是activity的,你确保按照步骤进行merchant IDS->certificates->app ids->provisioning profiles。前面三个都要有,xcode里面也要设置,你再看下是不是使用xcode自动设置造成的
        春田花花幼儿园:@爆发吧小宇宙 是创建描述文件有问题,不是创建budnle ID,和merchant ID那里没有问题.我是昨天早上弄的,就是可以的,但是再次配置这些ID和描述文件的时候,就出现了上边我说的情况
        Yasin的简书:@春田花花幼儿园 invild?appid创建的时候勾选Applepay后是configurable状态,创建后需要进行配置,配置后就是Enabled状态.你可以参考我的MerchantID申请那篇文章,从MerchantID申请到证书到appid和bunle ID创建都有详细的步骤。
      • 春田花花幼儿园:楼主,看了你的文章。很详细,今天我也是弄了一天。开始是可以显示出支付界面,但是应该不是是进入- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion 这个方法中吗???
        Yasin的简书:@春田花花幼儿园 didAuthorizePayment这个是用户付款成功的回调,目前测试环境下好像不会发生金额划扣,我测试后查看银行账单没发现有扣款。

      本文标题:Apple Pay接入详细教程

      本文链接:https://www.haomeiwen.com/subject/vinbkttx.html