braintree 中的托管字段给出错误“无法确定付款方式”PHP Laravel

问题描述 投票:0回答:2

任何人都可以解释一下我如何在 Laravel 中使用托管字段进行有效的 Braintree 付款。我尝试自己查看文档,但无法使其正常工作。

我在控制器中创建了要发送到视图的令牌,例如:

$gateway = new \Braintree\Gateway([
            'environment' => config('services.braintree.environment'),
            'merchantId' => config('services.braintree.merchantId'),
            'publicKey' => config('services.braintree.publicKey'),
            'privateKey' => config('services.braintree.privateKey')
        ]);
$paypalToken = $gateway->ClientToken()->generate();

return view('checkout')->with(['paypalToken' => $paypalToken]);

在刀片视图上我有这个 JS:

var form = document.querySelector('#payment-form');
  var submit = document.querySelector('input[type="submit"]');
 braintree.client.create({
    authorization: '{{ $paypalToken }}'
  }, function (clientErr, clientInstance) {
    if (clientErr) {
      console.error(clientErr);
      return;
    }
braintree.hostedFields.create({
  client: clientInstance,
  styles: {
    'input': {
      'font-size': '14px'
    },
    'input.invalid': {
      'color': 'red'
    },
    'input.valid': {
      'color': 'green'
    }
  },
  fields: {
    number: {
      selector: '#card-number',
      placeholder: '4111 1111 1111 1111'
    },
    cvv: {
      selector: '#cvv',
      placeholder: '123'
    },
    expirationDate: {
      selector: '#expiration-date',
      placeholder: '10/2019'
    }
  }
}, function (hostedFieldsErr, hostedFieldsInstance) {
  if (hostedFieldsErr) {
    console.error(hostedFieldsErr);
    return;
  }

  // submit.removeAttribute('disabled');

  form.addEventListener('submit', function (event) {
    event.preventDefault();

    hostedFieldsInstance.tokenize(function (tokenizeErr, payload){

      if (tokenizeErr) {
        console.error(tokenizeErr);
        return;
      }
      document.querySelector('#nonce').value = payload.nonce;
      form.submit();
    });
  }, false);
});

// Create a PayPal Checkout component.
braintree.paypalCheckout.create({
    client: clientInstance
}, function (paypalCheckoutErr, paypalCheckoutInstance) {
  if (paypalCheckoutErr) {
    console.error('Error creating PayPal Checkout:', paypalCheckoutErr);
    return;
  }

  // Set up PayPal with the checkout.js library
  paypal.Button.render({
    env: 'sandbox', // or 'production'
    commit: true,

    payment: function () {
      return paypalCheckoutInstance.createPayment({
        flow: 'checkout', // Required
        amount: '{{ presentPrice($newTotal + 5000) }}', // Required
        currency: 'USD', // Required
      });
    },

    onAuthorize: function (data, actions) {
      return paypalCheckoutInstance.tokenizePayment(data, function (err, payload) {

        // Submit `payload.nonce` to your server.
        document.querySelector('#nonce').value = payload.nonce;
        form.submit();
      });
    },

    onCancel: function (data) {
      console.log('checkout.js payment cancelled', JSON.stringify(data, 0, 2));
    },

    onError: function (err) {
      console.error('checkout.js error', err);
    }
  }, '#paypal-button').then(function () {
    // The PayPal button will be rendered in an html element with the id
    // `paypal-button`. This function will be called when the PayPal button
    // is set up and ready to be used.

  });
});

});

这是我处理付款的方法:

        $gateway = new \Braintree\Gateway([
            'environment' => config('services.braintree.environment'),
            'merchantId' => config('services.braintree.merchantId'),
            'publicKey' => config('services.braintree.publicKey'),
            'privateKey' => config('services.braintree.privateKey')
        ]);
        $nonce = $request->payment_method_nonce;

        $result = $gateway->transaction()->sale([
            'amount' => round(getNumbers()->get('newTotal') / 100, 2),
            'paymentMethodNonce' => $nonce,
            'options' => [
              'submitForSettlement' => True
            ]
          ]);


        if ($result->success) {
            $transaction = $result->transaction;
            $order = $this->addToOrdersTablesPaypal(
                $email,
                $firstName.' '.$lastName,
                null
            );

            return redirect()->route('confirmation.index')->with('success_message', 'Thank you! Your payment has been successfully accepted!');
        } else {
            $order = $this->addToOrdersTablesPaypal(
                $email,
                $firstName.' '.$firstName,
                $result->message
            );

            return back()->withErrors('An error occurred with the message: '.$result->message);
        }

任何人都可以帮助我,了解缺少什么吗?

javascript php laravel braintree
2个回答
2
投票

我解决了它,我实际上找到了一个解决方法,我必须为托管字段创建一个控制器,并且它起作用了。


0
投票

我可以看看你所说的这个控制器的样本吗?

© www.soinside.com 2019 - 2024. All rights reserved.