Laravel Cashier DateTime :: __ construct (): Не удалось проанализировать строку времени (@) в позиции 0 (@): - PullRequest
1 голос
/ 17 апреля 2019

У меня есть этот код при отображении списка счетов, он похож или, может быть, точно такой же, как в официальной документации Кассы Laravel. Я получаю эту странную ошибку DateTime::__construct(): Failed to parse time string (@) at position 0 (@): Unexpected character, и я не уверен, что символ @ делает вместо предполагаемой даты.

@foreach (Auth::user()->invoices() as $invoice)
    <tr>
        <td>{{ $invoice->date()->toFormattedDateString() }}</td>
        <td>{{ $invoice->total() }}</td>
        <td>
            <a href="/user/invoice/{{ $invoice->id }}">Download</a>
        </td>
    </tr>
@endforeach

У кого-нибудь есть подобный опыт? Я также пытался просто var_dump каждый $invoice->date() в контроллере, но ошибка все та же.

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Недавно у меня была такая же ошибка. Дата на этикетке: null.

Я читал Документы Stripe , и с 14 марта 2019 года они внесли некоторые изменения.

Laravel Cashier прекратит получение даты счета, потому что Stripe больше ее не предоставит.

Есть несколько изменений в объекте счета:

  • A status_transitions хеш теперь содержит временные метки при выставлении счета был завершен, оплачен, помечен как не подлежащий взысканию или аннулирован
  • Свойство date было переименовано в созданное.
  • Свойство finalized_at было перемещено в хеш status_transitions.

Теперь, как я решил это?

  1. Я изменил свою версию Laravel Cashier на 9.3 в composer.json файле.
  2. Я открыл свой терминал и запустил composer update.

Надеюсь, мое решение будет полезным для вас. Привет!

0 голосов
/ 05 мая 2019

Похоже, вы не используете самую последнюю версию Laravel Cashier. В старых версиях, если вы выполните код, вы увидите, что Laravel Cashier пытается отформатировать свойство, которое Stripe больше не возвращает.

cashier \ src \ Invoice.php, строка 48

$carbon = Carbon::createFromTimestampUTC($this->invoice->date);

Согласно Stripe "Руководство по обновлению API", вы можете видеть, что на 2019-03-14 они объявили о следующем изменении;

"Свойство date было переименовано в созданное." (Источник: https://stripe.com/docs/upgrades#2019-03-14)

В последней версии Cashier эта проблема решена путем проверки наличия свойства created.

https://github.com/laravel/cashier/blob/9.0/src/Invoice.php#L48

РЕДАКТИРОВАТЬ: Если вы не можете обновить по какой-либо причине, вместо:

$invoice->date()->toFormattedDateString()

Вы можете попробовать что-то вроде:

Carbon::createFromTimestamp($invoice->asStripeInvoice()->created)->toFormattedDateString();

...