【问题标题】:Braintree was unable to perform a charge: Custom field is invalid: descriptionBraintree 无法执行收费:自定义字段无效:说明
【发布时间】:2016-10-28 17:36:30
【问题描述】:

我们正在使用带有 Cashier/Braintree 的 Laravel 5.2。

我们有一个基于订阅的网站,可以找到。这些是每月定期会员套餐。

我们现在正在尝试添加单次充电几天的品尝者。似乎一切正常,直到最后一步我们收到错误说描述无效。查看文档和源代码,我们无法找到为什么这不起作用。

代码如下:

$plan = $request->get('plan');
$coupon = $request->get('coupon');
$user = $this->user;

if ( false === $user->hasBraintreeId() ){
    $customer = $user->createAsBraintreeCustomer($request->get('payment_method_nonce'), array());
    $user->setCustomerId($customer->id);
    $user->save();
} else {
    $customer = $user->asBraintreeCustomer();
}

if ( $plan == '5-day-taster' ){ // One off payment
    $this->user->invoiceFor('5-day-taster', 5.99);
} elseif ( $plan == '10-day-taster' ){ // One off payment
    $this->user->invoiceFor('10-day-taster', 9.99);
} elseif ( $plan == 'personal-standard' ){ // Subscription(s)
    if ( isset($coupon) && !empty($coupon) )
        $this->user->newSubscription($plan, $plan)
            ->withCoupon($coupon)
            ->create($request->get('payment_method_nonce'), [
                'email' => $this->user->email,
            ]);
    else
        $this->user->newSubscription($plan, $plan)
            ->create($request->get('payment_method_nonce'), [
                'email' => $this->user->email,
            ]);
} 

我们得到以下错误:

Exception in Billable.php line 41:
Braintree was unable to perform a charge: Custom field is invalid: description.

来自 Braintree 的源代码(未编辑,仅供参考):

/**
     * Make a "one off" charge on the customer for the given amount.
     *
     * @param  int  $amount
     * @param  array  $options
     * @return \Braintree\Transaction
     */
    public function charge($amount, array $options = [])
    {
        $customer = $this->asBraintreeCustomer();

        $response = BraintreeTransaction::sale(array_merge([
            'amount' => $amount * (1 + ($this->taxPercentage() / 100)),
            'paymentMethodToken' => $customer->paymentMethods[0]->token,
            'options' => [
                'submitForSettlement' => true,
            ],
            'recurring' => true,
        ], $options));

        if (! $response->success) {
            throw new Exception('Braintree was unable to perform a charge: '.$response->message);
        }

        return $response;
    }

    /**
     * Invoice the customer for the given amount.
     *
     * @param  string  $description
     * @param  int  $amount
     * @param  array  $options
     * @return \Braintree\Transaction
     */
    public function invoiceFor($description, $amount, array $options = [])
    {
        return $this->charge($amount, array_merge($options, [
            'customFields' => [
                'description' => $description,
            ],
        ]));
    }

提前感谢您提供的任何建议。

【问题讨论】:

    标签: php laravel paypal braintree


    【解决方案1】:

    全面披露:我在 Braintree 工作。如果您还有任何问题,请随时联系support

    看起来 Laravel\Cashier 对 setup a custom field in your Braintree control panel 有一个未记录的要求。它似乎正在爆炸,因为您没有此自定义字段,并且它正试图使用​​它来存储数据。

    我试图在Laravel\Cashier Documentation for Braintree configuration 中找到一些东西,但我只找到了一条关于其他方法的行,它们链接到Braintree documentation 的一些不相关部分。但是Braintree Custom Fields docs 说:

    1. 登录控制面板
    2. 导航到设置 > 处理 > 自定义字段
    3. 在字段旁边,单击所需字段
    4. 在编辑表单上,您可以更改字段的显示名称或在 Store 和 Pass Back 和 Pass Thru 之间切换
    5. 点击保存

    当您在设置了Store and Pass Back 的控制面板中添加名为description 的自定义字段时,它应该可以解决此错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-22
      • 2015-09-14
      • 1970-01-01
      • 2022-07-27
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      相关资源
      最近更新 更多