我正在考虑使用新的Apple Pay JS SDK 将Apple Pay集成到一个网站中.目前文档很少,仅涉及API声明以及如何实例化新ApplePaySession对象.
是否有任何示例代码可用,或者是否有人自己实现了这一点,显示了Web应用程序的典型API集成流程?
我能够找到所有内容的唯一例子似乎是第三方支付提供商自己的Apple Pay SDK集成.
使用下面的标准UIAlertView代码将在Apple Pay PKPaymentAuthorizationViewController表下方显示警报.
[[[UIAlertView alloc] initWithTitle:@"Payment Error"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"Okay"
otherButtonTitles:nil] show];
Run Code Online (Sandbox Code Playgroud)
如何在付款授权书上方显示?或者是否有不同的方式为Apple Pay显示错误消息?我想在用户输入无效的送货地址时给出特定的错误消息.
我正在使用Stripe在网上设置Apple Pay,并希望使用我们在iTunes Connect中设置的Sanbox Tester帐户在Safari中的iOS和macOS上进行测试.
在测试设备(2017 iPad)上,我使用Sandbox Tester帐户登录iCloud,并在设置应用程序中将测试卡添加到电子钱包中.在我的开发网站上,Apple Pay按钮显示,交互工作正常.
我在MacBook Pro(Retina,2015年中)创建了一个新帐户,并使用相同的Sandbox Tester帐户再次登录iCloud.但是,当我在此处查看我的开发网站时,该checkAvailability函数始终返回false:
Stripe.applePay.checkAvailability(function(available) {
alert(available);
...
}
Run Code Online (Sandbox Code Playgroud)
大概这是因为我需要进一步设置Apple Pay才能工作.但对于我的生活,我无法让macOS合作.在阅读了一些文档后,我认为这些点是相关的:
我是否可以使用切换在macOS上使用我的沙箱用户启用测试付款,如果是这样,我错过了哪些步骤?
window.ApplePaySession.canMakePayments()在控制台中运行返回false此处列出的步骤均适用于两台设备.当我在MacBook上打开Safari并导航到某个页面时,多任务屏幕上会显示切换图标,反之亦然,当我在iOS Safari中打开一个标签时,切换图标会显示在停靠栏的左侧.它似乎切换工作正常.
此外,Universal Clipboard正在双向工作.
注意:在使用不同iPad切换的同一台MacBook上的另一个(非沙盒)iCloud帐户上,付款选项会按预期显示在Safari中.
我正在启动Apple Pay集成项目,并且能够在设备上连接交易,并使用Stripe授权付款.我实际上正在努力的部分是设备测试Apple Pay是否受支持的正确方法?因此,对于较旧的Iphone型号,我会选择隐藏Apple Pay功能,即使它们安装了ios8或ios9.
我可以检查设备型号,然后忽略Apply Pay for <Iphone5S.然而,如果我还需要开始测试IPad版本等,这会变得复杂.
我想知道是否有一种方法可以测试ApplePay是否受支持?
我在网上发现这种方法是一个想法,但是它声称在Iphone5模拟器中支持苹果支付,我想这并不完全正确.不幸的是,我没有Iphone5实际设备进行测试.
- (BOOL) applePaySupported {
return [PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkAmex, PKPaymentNetworkVisa, PKPaymentNetworkMasterCard]];
}
Run Code Online (Sandbox Code Playgroud)
编辑/解决方案:
我现在使用这一行,它被验证适用于Iphone5(不支持)与Iphone6(支持); 我推测其他设备.我不完全确定它总是在模拟器中工作,但ApplePay在那里有点奇怪,测试最好在设备上完成.
- (BOOL) applePaySupported {
return [PKPaymentAuthorizationViewController canMakePayments] && [PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkAmex, PKPaymentNetworkVisa, PKPaymentNetworkMasterCard]];
}
Run Code Online (Sandbox Code Playgroud) 搜索了很多文章后,我找不到解决我的问题的方法。
我在我的网站上集成了 ApplePay 按钮,并在沙盒模式下成功进行了交易。我正在使用 authorize.net php SDK 来生成请求。当我切换到生活时,问题就开始了。来自 authorize.net 的消息是“处理付款数据时出错。解密数据中缺少必填字段”
这是我所做的:
请注意,如果我切换回沙箱模式,事务将毫无问题地通过。
请求和失败的响应如下:
要求:
{
"createTransactionRequest":{
"merchantAuthentication":{
"name":"xxxxxxxxx",
"transactionKey":"xxxxxxxxxxx"
},
"clientId":"sdk-php-2.0.0",
"refId":"ref1575669789",
"transactionRequest":{
"transactionType":"authOnlyTransaction",
"amount":"14.08",
"payment":{
"opaqueData":{
"dataDescriptor":"COMMON.APPLE.INAPP.PAYMENT",
"dataValue":"eyJ2ZXJzaW9u...Q1OSJ9fQ=="
}
},
"order":{
"invoiceNumber":"63059-191206",
"description":"xxxxxxxxx, xxxxxxxxxxxx v9.0.12 (Order# 63059-191206)"
},
"customer":{
"type":"individual",
"email":""
},
"billTo":{
"firstName":"xxxxxxx",
"lastName":"xxxxxxx",
"address":"xxxx San Remo Cir ",
"city":"Vista",
"state":"CA",
"zip":"92084",
"country":"US"
},
"retail":{ …Run Code Online (Sandbox Code Playgroud) 在尝试在iOS应用中设置Apple Pay时,我们遇到了API问题和预填充信息.我们的用户流程允许用户在使用Apple Pay付款之前手动设置他们的地址,电子邮件和电话,因此我们希望确保在他们决定的情况下使用他们的输入填写Apple Pay提示.
根据开发指南,这应该像在request.shippingContact中设置这些值一样简单.但是,当我们这样做时,将忽略这些值.
文档没有告诉我们什么吗?
PKContact *contact = [[PKContact alloc] init];
contact.emailAddress = @"john@appleseed.com";
contact.phoneNumber = [[CNPhoneNumber alloc] initWithStringValue:@"5555555"];
NSPersonNameComponents *name = [[NSPersonNameComponents alloc] init];
name.givenName = @"John";
name.familyName = @"Appleseed";
contact.name = name;
request.billingContact = contact;
request.shippingContact = contact;
request.requiredBillingAddressFields = PKAddressFieldAll;
request.requiredShippingAddressFields = PKAddressFieldEmail | PKAddressFieldPhone;
Run Code Online (Sandbox Code Playgroud)
我已经完成了ApplePay的全面工作。都可以在iOS10、11和12上正常运行。
从iOS 13和Xcode 11的第一个测试版开始至今(iOS13GM和Xcode 11GM),ApplePay授权模式不会出现。
我PKPaymentRequest应该没问题,因为它可以在以前的OS版本上运行,并且当我尝试演示时,PKPaymentAuthorizationViewController可以在控制台中找到它:
[General] Connection to remote alert view service failed
Run Code Online (Sandbox Code Playgroud)
我查看了其他问题,并尝试关闭并重新打开ApplePay功能几次,然后进行硬清理,重新启动。我什至用新的商家ID和证书创建了一个新应用,仍然得到了相同的结果-在iOS 12上可以运行,而在iOS 13GM上则不能。
更新:
使用在iOS 12.2模拟器上运行的Xcode 11GM,一切都可以正常工作。iOS 13GM模拟器上的相同代码不起作用。
这是我第一次在一个大项目中使用 PassKit 和 SwiftUI。我正在尝试实现 Apple Pay SwiftUI,并且由于还没有本地方式来实现,因此我尝试将 PKPaymentAuthorizationViewController 包装在 UIViewControllerRepresentable 中,但我不确定我是否正确执行此操作。
该视图显示正确,并且在单击它付款时似乎可以正常工作。我通过将视图绑定到 isPresentingApplePay bool 来控制显示窗口(见下文)。应该关闭窗口时会发生问题。点击cancel按钮不会关闭视图;有时它甚至不调用 paymentAuthorizationViewControllerDidFinish 委托函数。提交付款后也会发生同样的事情。有时会调用 didFinish 委托,但不会取消视图。我尝试传递绑定变量 isPresentingApplePay 并将其从 didFinish设置为false但它没有做任何事情。让视图消失的唯一方法是点击苹果支付窗口外的任何部分。
有谁知道我做错了什么?有什么我完全想念的吗?
通过将视图绑定到 if statement
这是我的 PKPaymentAuthorizationViewController 包装器:
import Foundation
import PassKit
import SwiftUI
struct ApplePayController: UIViewControllerRepresentable {
@Environment(\.presentationMode) var presentationMode
@EnvironmentObject var userData: UserData
@Binding var purchase: Purchase
@Binding var isPresenting: Bool
let items: [PKPaymentSummaryItem]
func updateUIViewController(_ uiViewController: PKPaymentAuthorizationViewController, context: Context) {
}
typealias UIViewControllerType = PKPaymentAuthorizationViewController
func makeUIViewController(context: Context) …Run Code Online (Sandbox Code Playgroud) 我正在使用PassKit实现Apple Pay,我正在以正确的方式显示对话框并处理委托方法,但每次我使用touch Id验证购买时它都显示"付款未完成"并且从未达到我的委托方法paymentAuthorizationViewController:didAuthorizePayment:completion:.我完全做了所有这些事情来设置苹果工资,但我似乎无法获得一个令牌发送到我的支付网关.
PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
self.paymentRequest = request;
request.countryCode = @"US";
request.currencyCode = @"USD";
request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa];
request.merchantCapabilities = PKMerchantCapabilityEMV;
request.merchantIdentifier = @"merchant.com.*******";
request.requiredShippingAddressFields = PKAddressFieldPostalAddress;
request.requiredBillingAddressFields = PKAddressFieldPostalAddress;
request.paymentSummaryItems = [self paymentSummaryItems];
self.paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
self.paymentPane.delegate = self;
if (self.paymentPane) {
[self presentViewController:self.paymentPane animated:TRUE completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
这就是我所看到的,屏幕就在那里,一遍又一遍地说"再试一遍":

我知道Apple支付测试我们在iOS 8中使用Apple工资存根,但是请告诉我如何在iOS 9中使用Apple Payy而不使用ApplePayStubs模拟器.
提前致谢