gpt4 book ai didi

php - Laravel 收银台 : Trouble Updating Card (Fatal Error)

转载 作者:可可西里 更新时间:2023-11-01 13:24:13 26 4
gpt4 key购买 nike

我已经在我的项目中安装了 Laravel Cashier (v3.0.4) 并允许用户更新他们的信用卡,但是当我尝试这样做时遇到了问题。这是我的 Controller 处理它的相关部分:

public function __construct() {
$this->user = Auth::user();
}

/**
* Update credit card
* @return \Illuminate\Http\RedirectResponse
*/
public function updateCardPost() {
$this->user->updateCard(Input::get('stripe-token'));

session()->flash('flash_message', 'You have updated your credit card');
return redirect()->route('dashboard.index');
}

我已经验证了完整性检查项目:

  1. 实际发布到这个 Controller
  2. 成功传入token

但是每次我尝试提交它时,我都会在 Cashier 中遇到错误:

FatalErrorException in StripeGateway.php line 454:
Call to a member function create() on null

我已经对此进行了调查,看起来它正在将 $token 传递给以下内容:$card = $customer->cards->create(['card' => $ token ]);

然后,我在该方法中通过 dd($token) 进行了另一次健全性检查,并返回了我的表单所提供的内容。看起来这个区 block 最近没有太大变化——但是有一些 PSR-2 和一次性购买更新;这两者似乎都与这里发生的事情无关。所以我对这里的内容一无所知,但任何线索都会有很大的帮助。谢谢!

更新

已验证在 updateCard() 方法中运行 dd($customer->cards) 返回 null —— 可能是因为它从未将最后四个保存到创建订阅时的数据库。努力查看如何创建订阅(在 Stripe 上验证)、取消和恢复,但我的卡详细信息未在本地更新,我也无法换卡。

我用了https://www.youtube.com/watch?v=iPaKX7aPczQ作为“应该”做到这一点的灵感,并在这方面取得了成功,但不是我的。

更新2

如果有帮助的话,这是我的整个用户 Controller 和 Coffee 实现:

<?php namespace App;

use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Laravel\Cashier\Billable;
use Laravel\Cashier\Contracts\Billable as BillableContract;

class User extends Model implements AuthenticatableContract, CanResetPasswordContract, BillableContract {

use Authenticatable, CanResetPassword, Billable;

/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';

/**
* Laravel Cashier
*
* @var array
*/
protected $dates = ['trial_ends_at', 'subscription_ends_at'];

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'email',
'password',
'first_name',
'last_name',
'phone',
'biography',
'twitter',
'facebook',
'linkedin'
];

/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = ['password', 'remember_token'];

/**
* A user can have many listings
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function listings() {
return $this->hasMany('App\Models\Dashboard\Listing');
}
}

Stripe .咖啡

(($) ->
'use strict'

StripeBilling =
init: ->
@form = $('.js-subscription__create')
@submitButton = @form.find '.js-subscription__create__submit'
@submitButtonText = @submitButton.text()

stripeKey = $('meta[name="publishable_key"]').attr 'content'
Stripe.setPublishableKey stripeKey

@bindEvents()
return

bindEvents: ->
@form.on('submit', $.proxy(@sendToken, @))
return

sendToken: (event) ->
event.preventDefault()
@submitButton.attr("disabled", true).text 'One Moment'

Stripe.createToken(@form, $.proxy(@stripeResponseHandler, @))
return

stripeResponseHandler: (status, response) ->
if response.error
@form.find('.js-form__errors').removeClass("uk-hidden").text response.error.message
return @submitButton.text(@submitButtonText).attr('disabled', false)

$('<input>'
type: 'hidden'
name: 'stripe-token'
value: response.id
).appendTo @form

@form[0].submit()
return

StripeBilling.init()

return
) jQuery

最佳答案

我认为这是由于 Stripe 端的 API 更改所致。如果你看看他们的 changelog您会注意到“cards”属性最近已更改为“sources”。

更新

您可以使用以下静态方法选择 Stripe 自己的 PHP 框架正在使用的 API 版本:

Stripe::setApiVersion("2015-02-10");

(那个版本号对我有用,但可能我们需要一个旧版本。)

关于php - Laravel 收银台 : Trouble Updating Card (Fatal Error),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28735182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com