在 Apple Pay 流程之后,支付令牌变得未定义

Posted

技术标签:

【中文标题】在 Apple Pay 流程之后,支付令牌变得未定义【英文标题】:Payment token becomes undefined after the Apple Pay process 【发布时间】:2018-09-10 16:12:20 【问题描述】:

我正在使用 react-native 开发 Apple Pay。我配置了所有内容并使用了react-native-payment 组件。这是我的代码:

onPressApplePay=()=>
    console.log("1- start Apple Pay");
    if (!DataManager.getInstance().isConnected()) 
       this.myAlert(I18n.t("NoInternetConnectionState"));
       return;
    

    const DETAILS = 
    id: 'basic-example',

     displayItems: [
       
         label: 'items',
         amount:  currency: 'EUR', value: '2' ,
       ,
     ],
     total: 
       label: 'MyApp',
       amount:  currency: 'EUR', value: '2' ,
     ,

      ;

      const METHOD_DATA = [
         supportedMethods: ['apple-pay'],
         data: 
           merchantIdentifier: 'merchant.com.myapp',
           supportedNetworks: [ 'mastercard', 'visa'],
           countryCode: 'IT',
           currencyCode: 'EUR'
         
       ];
     const paymentRequest = new PaymentRequest(METHOD_DATA, DETAILS);

     console.log("2- paymentRequest.show", paymentRequest);
     paymentRequest.show()
     .then((paymentResponse) => 
       const  paymentToken  = paymentResponse.details; // On android, you need to invoke the `getPaymentToken` method to receive the `paymentToken`.

       paymentRequest.canMakePayments()
  .then(canMakePayments => 
    console.log("canMakePayments", canMakePayments);
      console.log("paymentToken", paymentToken);

    // Show fallback payment method
  );

     )
     .catch((err) => 
       console.log("4- err", err);
       console.log("5- paymentRequest", err);
       //alert("The apple pay cancel");
       // The API threw an error or the user closed the UI
     );

问题是,当我尝试执行 Apple Pay 时,它说“付款未完成”并且令牌变得未定义。你能告诉我问题可能隐藏在哪里吗? 我应该提一下,我在使用真实卡和沙盒的真实设备上尝试了此代码,但在所有情况下都失败了。提前致谢。

【问题讨论】:

【参考方案1】:

这个组件也适用于 stripe 和 Braintree。问题是我需要添加一个网关和一个公钥,在我的例子中它是从条带提供的。

const METHOD_DATA = [
         supportedMethods: ['apple-pay'],
         data: 
           merchantIdentifier: 'merchant.yyyy.xxxx',
           supportedNetworks: [ 'mastercard'],
           countryCode: 'IT',
           currencyCode: 'EUR',
           paymentMethodTokenizationParameters: 
            parameters: 
             gateway: 'stripe',
             'stripe:publishableKey': 'pk_test_XXXXXXX',
             'stripe:version': '5.0.0' // Only required on Android
          
        
      
   ];

然后我安装了以下插件:

yarn add react-native-payments-addon-stripe
yarn add react-native-payments-cli
yarn react-native-payments-cli -- link stripe

(您还需要那里的Carthage update 才能使它们工作)

然后我在 stripe.com 上注册了一个帐户,并使用了它的发布密钥,终于成功了!! 最后我还添加了paymentResponse.complete('success'); 以显示付款成功。没有它,它会陷入等待循环,最后显示“付款未完成”。 现在我收到了一条带有漂亮令牌的成功消息!

我应该提一下,如果您不使用 stripe 或 Braintree,您将看不到任何标记,并且它始终是未定义的。这是自然的,所以不要担心。您只需将 paymentResponse.details 作为 JSON 传递给您的银行提供商,它就会起作用。因为在这种情况下,您拥有的 transactionid 将很重要。

之后,您将通过此link 执行这些安装步骤。您还需要针对 Apple Pay 的证书执行以下步骤:

1- 首先在您的 Apple 开发者帐户中的 App ID 上,您应该使用商家 ID 启用 Apple Pay。

2- 然后您需要向您的银行索取您商家的证书,该文件如下所示: XXXXX.certSigningRequest.txt

3- 然后选择您的应用 ID 并转到在第一步中启用的 Apple Pay 部分并在那里上传证书。

完成!您的 Apple Pay 可以使用。

【讨论】:

【参考方案2】:

提及救了我!我没有意识到如果您不使用 Stripe/Braintree,令牌将为零是正常的!

【讨论】:

以上是关于在 Apple Pay 流程之后,支付令牌变得未定义的主要内容,如果未能解决你的问题,请参考以下文章

Java中的Apple Pay支付令牌解密

Apple Pay - 如何将商家公钥与支付令牌中的 publicKeyHash 进行比较?

Apple Pay支付

Apple Pay 令牌 transactionId 是全球唯一的吗?

Apple Pay,支付未完成 Web JS

谁能给我介绍下paypal的支付网关payflow的开发流程?急