未知的付款方式Nonce

bar*_*oos 4 payment-gateway braintree laravel-4

我的设置是:

我尝试添加一个新客户,如教程显示的那样正常.但是当我尝试使用JavaScript SDK中的给定代码从前端添加付款方式时.我使用了Drop-In-UI,它生成了一个付款方式Nonce,这是我的问题的一部分.

我使用Sandbox凭据配置了PHP后端,并粘贴了文档中给出的示例代码.

当我尝试创建用户时,一切都很好:

$result = Braintree_Customer::create(array(
    'id' => Auth::id(),
    'firstName' => 'Mike',
    'lastName' => 'Jones',
    'company' => 'Jones Co.',
    'email' => 'mike.jones@example.com',
    'phone' => '281.330.8004',
    'fax' => '419.555.1235',
    'website' => 'http://example.com'
));
Run Code Online (Sandbox Code Playgroud)

一旦付款nonce,没有任何作用:

$result = Braintree_Transaction::sale(array(
    'amount' => '10.00',
    'paymentMethodNonce' => Input::get('payment_method_nonce'),
    'customer' => array(
        'id' => Auth::id()
    ),
    'options' => array(
        'storeInVaultOnSuccess' => true,
    )
));
Run Code Online (Sandbox Code Playgroud)

服务器一直在说93108: Unknown paymentMethodNonce.这似乎有点令人困惑和奇怪,因为它Input::get('payment_method_nonce')代表一个有效的字符串.

bar*_*oos 5

经过漫长的一天,对文档的深入研究,我终于找到了问题.

您需要将由PHP库生成的客户端令牌(不是Sandbox中的CSE令牌!)传递到Braintree提供的JavaScript代码段中:

braintree.setup(
        "{{ Braintree_ClientToken::generate(['customerId' => Auth::id()]) }}",
        'dropin', {
            container: 'dropin'
        }
);
Run Code Online (Sandbox Code Playgroud)

Drop-In-UI代码是来自doc的复制+粘贴.

<form id="checkout" method="post" action="/checkout">
    {!! csrf_field() !!}
    <div id="dropin"></div>
    <input type="submit" value="Pay $10">
</form>
Run Code Online (Sandbox Code Playgroud)

希望有人通过提供的答案节省了大量时间.

编辑: 在Laravel 5中你需要手动添加csrf-field(我已经更新了代码),否则你TokenMismatchException将从Laravel 获得一个.