Я пытаюсь добавить в свою подписку записи об использовании. используя полосу создания конечной точки записи об использовании (https://stripe.com/docs/api#usage_record_create).
выполняя свою функцию, я получаю сообщение об ошибке: Class 'Stripe\UsageRecord' not found in file Я не определил пространство имен, потому что я обращался к нему напрямую, ссылаясь на полосу, используя \Stripe\, который я ввел с помощью composer. Я пробовал composer update, но, похоже, это не помогло. Я предполагаю, что отсутствует файл UsageRecord.php из composer install, но я не знаю, где добавить копию файла в пакет полосы.
public function stripeUsageRecord()
{
$authUser = auth()->user();
$business = $authUser['business_id'];
$user_amount = Transactions::select("user_id")
->where("business_id", " = ", $business)
->groupBy("user_id")->count();
$current_time = Carbon::now()->toDateTimeString();
\Stripe\Stripe::setApiKey(env("STRIPE_SECRET"));
\Stripe\UsageRecord::create(array(
"quantity" => $user_amount,
"timestamp" => $current_time,
"subscription_item" => 'sub_DnAKVwNY2Sc4zf',
"action" => 'set'
));
}
Да я была. Моя проблема заключалась в том, что в полосе пакета буквально отсутствовал UsageRecord.php.






Похоже, мне не хватало части пакета с полосами.
Я нашел копию UsageRecord.php в Интернете и создал файл по пути vendor\stripe\stripe-php\lib\UsageRecord.php
Затем я добавил содержимое кода, который нашел в Интернете, и добавил его в файл, и это сработало. Содержание размещено ниже:
<?php
namespace Stripe;
/**
* Class UsageRecord
*
* @package Stripe
*
* @property string $id
* @property string $object
* @property bool $livemode
* @property int $quantity
* @property string $subscription_item
* @property int $timestamp
*/
class UsageRecord extends ApiResource
{
const OBJECT_NAME = "usage_record";
/**
* @param array|null $params
* @param array|string|null $options
*
* @return \Stripe\ApiResource The created resource.
*/
public static function create($params = null, $options = null)
{
self::_validateParams($params);
if (!array_key_exists('subscription_item', $params)) {
throw new Error\InvalidRequest("Missing subscription_item param in request", null);
}
$subscription_item = $params['subscription_item'];
$url = "/v1/subscription_items/$subscription_item/usage_records";
$request_params = $params;
unset($request_params['subscription_item']);
list($response, $opts) = static::_staticRequest('post', $url, $request_params, $options);
$obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
$obj->setLastResponse($response);
return $obj;
}
}
Скорее всего, вы используете слишком старую версию этой библиотеки. Stripe\UsageRecord был представил в версии 6.6.0, поэтому я предлагаю обновить библиотеку до последней версии:
composer require "stripe/stripe-php:^6.19"
Вам определенно не следует изменять содержимое каталога vendor и копировать и вставлять классы из другой версии библиотеки.
Я использовал пакет "laravel / cashier": "~ 7.0" согласно документации laravel 5.6.
Должно ли обновление композитора не обновлять его также?
Должен, но другие ограничения или требования могут блокировать это. Если вы попытаетесь выполнить обновление явно, вы можете получить дополнительную информацию о том, что блокирует это обновление.
Если вы используете композитор, включаете ли вы автозагрузчик в свой файл? А вы заявляете о своем намерении
useуказанного класса?