【问题标题】:How to integrate Apple Pay in Xamarin Forms?如何在 Xamarin Forms 中集成 Apple Pay?
【发布时间】: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


【解决方案1】:

已解决。

一切都已正确配置。上面的代码按预期工作。唯一的问题是,我忘记在 iOS 项目设置中加载 Entitlements.plist 文件。这就是为什么我总是得到 canmakepaymentsUsingNetwork(networks) false 的主要原因。

【讨论】:

  • 感谢分享解决方案。
  • 我遵循您的代码,我有两种不同的情况:当我设置 paymentRequest.MerchantCapabilities = PKMerchantCapability.ThreeDS 时,就在我用手指授权付款后,抛出一个错误,显示“Apple Pay 是在 my_app_name 中不可用”当我设置 paymentRequest.MerchantCapabilities = PKMerchantCapability.Debit 时,付款永远不会完成。您在编码过程中是否遇到这些错误?谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-09-30
  • 2023-02-08
  • 2020-10-05
  • 2020-05-23
  • 1970-01-01
  • 2021-04-05
  • 2021-09-16
  • 2015-01-30
相关资源
最近更新 更多