BrainTree托管字段onPaymentMethodReceived函数无法正常返回nonce

时间:2016-04-08 15:41:55

标签: javascript braintree

我很难弄清楚为什么托管字段中的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>

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

2 个答案:

答案 0 :(得分:2)

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

使用托管字段时,表单应仅包含div container for each payment field。您的实现看起来像这样:

<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 support联系。

答案 1 :(得分:0)

In "onPaymentMethodReceived" method you need to try "nonce.nonce" var to check nonce in responce. Like -

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

Also you can check below link to get more detailed script to manipulate braintree payment gateway integration with hosted field.

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

Hope this helps you...:)