BrainTree Hosted Fields onPaymentMethodReceived函数不工作,返回nonce

BrainTree Hosted Fields onPaymentMethodReceived function not working returning nonce

本文关键字:工作 返回 nonce 函数 Hosted Fields onPaymentMethodReceived BrainTree      更新时间:2024-04-05

我很难弄清楚为什么托管字段中的onPaymentMethodReceived没有返回任何值。`

  <form action="" id="my-form" method="post">
      <label for="a">Amount</label>
      <div id="amount"> 
          <input type="text" name="amount" value="400" id="amount" />
      </div>
      <label for="card-number">Card Number</label>
      <div id="card-number"> 
          <input type="text" name="cardNumber" value="4111111111111111" id="cardNumber" />
      </div>
      <label for="cvv">CVV</label>
      <div id="cvv">
          <input type="text" name="CVV" value="020" id="cv-v" />
       </div>
      <label for="expiration-month">Expiration Month</label>
      <div id="expiration-month">
          <input type="text" name="expirMonth" value="10" id="expirMonth" />
       </div>
      <label for="expiration-year">Expiration Year</label>
      <div id="expiration-year">
          <input type="text" name="expirYear" value="20" id="expirYear" />
      </div>
      <input type="submit" value="Pay" id="btn_submit"/>
  </form>
 <script>
  var nonce0 ;
  braintree.setup(clientToken, "custom", 
    {
      id: "my-form",
      hostedFields: {
            number: {
              selector: "#card-number"
            },
            cvv: {
              selector: "#cvv"
            },
            expirationMonth: {
              selector: "#expiration-month"
            },
            expirationYear: {
              selector: "#expiration-year"
            },
      },
      onPaymentMethodReceived:function(nonce){
          console.log("in onPaymentMethodReceived");
          console.log(nonce);
          nonce0 = nonce;
          alert('OnPaymentMR');
          console.log(JSON.stringify(nonce));
          return false;
      },
      onError :function(obj){
          alert('onError');
          console.log(JSON.stringify(obj));
     }
   }); 
    console.log('BTree = '+ nonce0);
  </script>

`我想存储返回的nonce,但什么也没发生,console.log没有显示任何值。甚至onError也没有做任何事情
使用断点,我可以判断隐藏的nonce正在返回,但回调函数没有被触发
我在Dropin UI中尝试过,它确实有效,我可以从onPaymentMethodReceived中获得nonce。不确定我做错了什么。

全面披露:我是Braintree的开发人员

当使用Hosted Fields时,表单应该只为每个支付字段包含一个div容器。您的实现看起来像这样:

<form action="" id="my-form" method="post">
  <label for="a">Amount</label>
  <div id="amount"></div>
  <label for="card-number">Card Number</label>
  <div id="card-number"></div>
  <label for="cvv">CVV</label>
  <div id="cvv"></div>
  <label for="expiration-month">Expiration Month</label>
  <div id="expiration-month"></div>
  <label for="expiration-year">Expiration Year</label>
  <div id="expiration-year”></div>
  <input type="submit" value="Pay" id="btn_submit"/>
</form>

Braintree设置脚本将呈现iframe以处理支付字段输入。如果你仍然有问题,你可以随时联系Braintree的支持。

在"onPaymentMethodReceived"方法中,您需要尝试"nonce.nonce"var来检查响应中的nonce。类似-

 onPaymentMethodReceived:function(obj) {
  var nonce_from_braintree = obj.nonce                
}

您也可以查看下面的链接,以获得更详细的脚本来操作braintree支付网关与托管字段的集成。

http://www.ilovephp.net/php/simple-braintree-paypal-payment-gateway-integration-in-php-with-demo-examples/

希望这能帮助你…:)