“ payment_method_nonce”在PHP中返回一个空字符串

时间:2019-06-11 05:53:49

标签: javascript php html braintree braintree-sandbox

我正在尝试在沙盒模式下使用Braintree创建一个简单的交易。它要求我从页面上进行POST请求,以便继续进行交易。但是,开发人员文档没有告诉我成功呈现Drop-in UI后应该怎么做。

据我所知,为了成功进行POST请求,输入的HTML代码中必须具有“ name”属性。逻辑上,它在输入之一中应具有名称“ payload_method_nonce”。但是由于它不存在,所以一些用户建议添加这样的代码:

<input type="hidden" name="payment_method_nonce">

为了在PHP中执行此操作:

$nonceFromTheClient = $_POST["payment_method_nonce"]

并添加以下几行代码:

var form = document.querySelector('#payment_form');
form.addEventListener('submit', function (event) {
event.preventDefault();
hostedFieldsInstance.tokenize(function (tokenizeErr, payload) {
document.querySelector('input[name="payment_method_nonce"]').value = 
payload.nonce;
  form.submit();
});
}, false);

我已经做过,但是它什么也没返回。

我该怎么办?

完整代码:

HTML

<form id="payment-form">
<div id="dropin-container"></div>
      <input type="hidden" name="payment_method_nonce">
      <button id="submit-button" class="w3-theme-action submit-btn" 
style="width: 27.5%; margin-bottom: 16px; margin-left: 0;">Request 
payment method</button>
</form>
<script>
var button = document.querySelector('#submit-button');

braintree.dropin.create({
  authorization: 'xxxxxx',
  container: '#dropin-container'
}, function (createErr, instance) {
  button.addEventListener('click', function () {
    instance.requestPaymentMethod(function (err, payload) {
      // Submit payload.nonce to your server
var form = document.querySelector('#payment_form');
form.addEventListener('submit', function (event) {
event.preventDefault();
hostedFieldsInstance.tokenize(function (tokenizeErr, payload) {
  document.querySelector('input[name="payment_method_nonce"]').value = 
payload.nonce;
  form.submit();
});
}, false);
    });
  });
});
</script>

PHP

$nonceFromTheClient = $_POST["payment_method_nonce"]
echo $nonceFromTheClient;

1 个答案:

答案 0 :(得分:0)

HTML表单的默认方法是GET

请更改您的表单方法:

<form id="payment-form" method="POST"> ... </form>

或访问$_GET中的数据:

$nonceFromTheClient = $_GET["payment_method_nonce"];