php - 使用 laravel/cashier-braintree/Laravel 5.2 在 Braintree 中订阅

标签 php laravel-5 subscription braintree laravel-cashier

需要将 laravel/cashier-braintree 集成到我的 Laravel 应用程序中。由于几乎没有 Braintree 集成经验,因此很难使其发挥作用。有人可以分步解释它是如何工作的,或者一些对此有帮助的教程吗?尝试跟踪 Stripe 的集成,因为它们很相似,但没有成功。

这就是我的代码现在的样子

SubscriptionController.php

public function createToken()
    {
        $clientToken = \Braintree_ClientToken::generate(array('customerId' => ""));
        return $clientToken;
    }

    public function checkout()
    {
        $creditCardToken = $this->createToken();
        $data = [
            'paymentMethodNonce' => $creditCardToken,
            'creditCard' => [
                'number' => Input::get('number'),
                'expirationDate' => Input::get('expiration_date'),
                'cvv' => Input::get('cvv')
            ],
        ];
        $this->user->newSubscription(Input::get('plan'), Input::get('plan'))->create($creditCardToken, $data);

        if ($this->user->subscribed('Small')) {
            return 'Done!';
        }

        var_dump($this->user);
    }

所以,我得到

Unable to create Braintree customer: Unknown payment_method_nonce.
Expiration date is required.
Credit card number is required.
Credit card must include number, payment_method_nonce, or venmo_sdk_payment_method_code.

如果我输入表单name="",我会收到无法创建 Braintree 客户:未知 payment_method_nonce。 因此,名称可以通过,但 payment_method_nonce 出现问题。无法理解为什么付款不适用于 data-braintree-name,因为出于安全考虑,仅使用 name 不是选项。如果有人知道为什么我收到未知的 payment_method_nonce?

最佳答案

解决方案:

订阅.blade.php

{!! Form::open(['route' => 'subscription', 'method' => 'post', 'id' => 'checkout'])!!}

<h5>Choose:</h5>

<select name="plan" id="plan" class="form-control">
    <option value="sm">Small</option>
    <option value="lg">Large</option>
</select>

<div class="form-group">
    <h5>Card number:</h5>

    <div id="number" class="form-control"></div>

</div>

<div class="row">
    <div class="col-md-6 col-sm-6">
        <div class="form-group">
            <h5>Date:</h5>

            <div id="expiration-date" class="form-control"></div>

        </div>
    </div>

    <div class="col-md-6 col-sm-6">
        <div class="form-group">

            <div id="cvv" class="form-control"></div>

        </div>
    </div>
</div>

{!! Form::close() !!}

SubscriptionsController.php

public function join()
    {
        $data = [
            'paymentMethodNonce' => Input::get('payment_method_nonce'),
        ];
        $this->user->newSubscription('main', Input::get('plan'))->create(Input::get('payment_method_nonce'), $data);

        return redirect('/');
    }

脚本

<script src="https://js.braintreegateway.com/v2/braintree.js"></script>
<script>
    var colorTransition = 'color 100ms ease-out';

    braintree.setup("@braintreeClientToken", "custom", {
        id: "checkout",
        hostedFields: {

            number: {
                selector: "#number"
            },

            expirationDate: {
                selector: "#expiration-date"
            },

            cvv: {
                selector: "#cvv"
            }
        }
    });
</script>

关于php - 使用 laravel/cashier-braintree/Laravel 5.2 在 Braintree 中订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36529224/

相关文章:

php - 使用特定日期更新数据库

css - Laravel - 在 auth blade 模板上使用 css

jquery - Laravel Blade 使用 $(document).ready 函数

azure - 同一消息的多个订阅者 Rebus Azure 服务总线

python - 拒绝订阅 Google App Engine 上具有不同域的用户

php - 计算时间粒度

php - 如何使用php根据mysql表中的数据自动创建div?

PHP函数: the html did not display

php - laravel 5.2 不同任务的自定义日志文件

angular - 我需要监听表单中是否有任何更改,如果有更改则启用/禁用“保存”按钮 | Angular