【发布时间】:2019-09-23 17:38:12
【问题描述】:
我正在使用 xamarin 表单开发应用程序。现在,我需要集成 Apple pay 我试图通过互联网查找内容但无法找到有效的解决方案。谁能建议我如何将 Apple pay 集成到我的应用程序中?
这是我的 Apple Pay 代码
using System;
using ApplePayTest.iOS.Dependencies;
using ApplePayTest.Services;
using Foundation;
using PassKit;
using StoreKit;
using Stripe.iOS;
using UIKit;
[assembly: Xamarin.Forms.Dependency(typeof(ApplePayAuthorizer))]
namespace ApplePayTest.iOS.Dependencies
{
public class ApplePayAuthorizer :PKPaymentAuthorizationViewControllerDelegate,IApplePayAuthorizer
{
public bool AuthorizePayment()
{
SKProductsRequest req=new SKProductsRequest(new NSSet());
NSString[] paymentNetworks = new NSString[] {
PKPaymentNetwork.Visa,
PKPaymentNetwork.MasterCard
, PKPaymentNetwork.Amex
};
var canmakepayment = PKPaymentAuthorizationViewController.CanMakePayments;
PKPaymentRequest paymentRequest = new PKPaymentRequest();
paymentRequest.MerchantIdentifier = "mymerchant code";
paymentRequest.SupportedNetworks = paymentNetworks;
paymentRequest.MerchantCapabilities = PKMerchantCapability.ThreeDS;
paymentRequest.CountryCode = "CA";
paymentRequest.CurrencyCode = "CAD";
paymentRequest.PaymentSummaryItems = new PKPaymentSummaryItem[]{
new PKPaymentSummaryItem()
{
Label = "Sample Purchase Item" ,
Amount = new NSDecimalNumber("1")
}
};
var canmakepayments = PKPaymentAuthorizationViewController.CanMakePaymentsUsingNetworks(paymentNetworks);
//can make payment is always false
if (canmakepayments)
{
PKPaymentAuthorizationViewController controller = new
PKPaymentAuthorizationViewController(paymentRequest);
controller.Delegate = (PassKit.IPKPaymentAuthorizationViewControllerDelegate)Self;
var rootController = UIApplication.SharedApplication.
KeyWindow.RootViewController;
rootController.PresentViewController(controller,
true, null);
}
return false;
}
public override void DidAuthorizePayment(PKPaymentAuthorizationViewController controller, PKPayment payment,
Action<PKPaymentAuthorizationStatus> completion)
{
completion(obj: PKPaymentAuthorizationStatus.Success);
}
public override void PaymentAuthorizationViewControllerDidFinish
(PKPaymentAuthorizationViewController controller)
{
controller.DismissViewController(true, null);
}
public override void WillAuthorizePayment(PKPaymentAuthorizationViewController controller)
{
}
}
}
预期结果:
canmakepaymentsUsingNetwork 方法应该返回 true。但是,它总是返回 false。
注意: 我在权利中添加了正确的商家 ID。在 Apple 支付文档中,CanMakePaymentsUsingnetwork() 只有在我们没有卡时才会返回 false。我也在我的测试帐户中添加了卡。
我在 xamarin 表单共享应用程序中有一个按钮,当单击该按钮时,它将触发上述代码中的 AuthorizePayment() 方法。
【问题讨论】:
-
Xamarin 在 Apple Pay (docs.microsoft.com/en-us/xamarin/ios/platform/apple-pay) 上有文档。我假设您正在寻找 PassKit 框架
PKPaymentButtonTypeInStore除非您是希望实际提供商家 ID 的商家(但文档会引导您完成与 Apple 相关的流程)然后添加按钮可以在自定义 View 渲染器或使用 PKPaymentAuthorizationController (等...) 可以通过 docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/… 完成 -
我已经完成了设置 Apple Pay 所需的所有必要更改。在模拟器中一切正常,但在真实设备中它不会显示。
-
将您执行的 A-Pay/PassKit 代码添加到您的问题中
-
添加了我使用 passkit 的 Ios 平台代码
标签: xcode xamarin xamarin.forms xamarin.ios