无法在 Braintree 结帐按钮中获得响应

Posted

技术标签:

【中文标题】无法在 Braintree 结帐按钮中获得响应【英文标题】:Not able to get response in braintree checkout button 【发布时间】:2018-03-01 01:14:24 【问题描述】:

我正在使用braintree paypal 结帐付款,付款工作正常,但无法得到响应,这是我的代码

<script type="text/javascript">
var form = document.querySelector('#payment-form');
var client_token = "<?php echo \Braintree\ClientToken::generate(); ?>";
braintree.dropin.create(
    authorization: client_token,
    selector: '#bt-dropin',
    paypal: 
        flow: 'vault',
        onSuccess: function (nonce, email) 
            alert('sdsdsd123');
            console.log(JSON.stringify(nonce));
        ,
    ,

, function (createErr, instance) 
    if (createErr) 
        console.log('Error', createErr);
        return;
    
    form.addEventListener('submit', function (event) 
        event.preventDefault();

        instance.requestPaymentMethod(function (err, payload) 
            if (err) 
                console.log('Error', err);
                return;
             else 
                console.log("Payment confirmation");
                console.log(payload);
            

            // Add the nonce to the form and submit
            document.querySelector('#nonce').value = payload.nonce;
            form.submit();
        );
    );
,
);
var checkout = new Demo(
    formID: 'payment-form'
);

但无法在 onsuccess 函数中得到响应,谁能告诉我如何才能得到这个成功响应,

【问题讨论】:

【参考方案1】:

全面披露:我在 Braintree 工作。如果您还有任何问题,请随时联系support。

您似乎将Braintree JSv2 Drop-In UI 中的PayPal 实现与Braintree JSv3 Drop-In UI 混淆了。 JSv3 不支持 onSuccess 选项。 JSv3 中 PayPal 对象的完整配置选项列表是available here。

根据您提供的代码,我建议您删除您的 onSuccess 回调函数。您应该仍然可以通过将该代码放在您的 instance.requestPaymentMethod 回调函数中来实现您想要的结果,如下所示:

<script type="text/javascript">
  var form = document.querySelector('#payment-form');
  var client_token = "<?php echo \Braintree\ClientToken::generate(); ?>";

  braintree.dropin.create(
      authorization: client_token,
      selector: '#bt-dropin',
      paypal: 
          flow: 'vault'
      
  , function (createErr, instance) 
      if (createErr) 
          console.log('Error', createErr);
          return;
      
      form.addEventListener('submit', function (event) 
          event.preventDefault();

          instance.requestPaymentMethod(function (err, payload) 
              if (err) 
                  console.log('Error', err);
                  return;
              

              console.log("Payment confirmation");
              console.log(payload);
              alert('sdsdsd123');
              console.log(payload.nonce);

              // Add the nonce to the form and submit
              document.querySelector('#nonce').value = payload.nonce;
              form.submit();
          );
      );
  );
</script>

【讨论】:

感谢您的帮助,requestPaymentMethod 仅在我们使用信用卡付款时有效,它不适用于贝宝结帐 @NikulPanchal 你能用脚本发布你的完整 html 表单,以便我可以在本地运行它吗?是否记录了任何错误?提交表单后,上面的代码对我有效。

以上是关于无法在 Braintree 结帐按钮中获得响应的主要内容,如果未能解决你的问题,请参考以下文章

Braintree嵌入式贝宝结帐

Braintree PayPal 结帐组件抛出“e.client.getVersion 不是函数”

Braintree 替代方案或任何好的嵌入式结帐?

Braintree 中的 PayPal 按钮无法使用定期付款

Braintree 自定义贝宝按钮

如何在flutter中获得braintree支付网关的nonce?