blackspot / stripe-multiple-accounts
允许管理多个 stripe 账户(客户、支付方式等)
v1.6.1
2023-09-27 20:57 UTC
Requires
- php: >=7.3
- blackspot/service-integrations-container: dev-master
- stripe/stripe-php: ^9.8
README
支持多个 stripe 账户
一个用户可以有多个 "customers_id"
表格
服务集成
包含 stripe 键的 morph 关系
- stripe 密钥
- webhook 密钥
- webhook 密钥
这意味着一个模型可以管理一个或多个 stripe 账户
在这种情况下,我们有一个 "stub" 文件来创建一个包含公司子公司的实现
UserServiceIntegrationAccount
一对一关系。
在这个表中,我们将 user_id 与 service_integration_id(Stripe 或其他)相关联,并有一个额外的列包含 "实际关系" 或 "多重性"(account_id)
方法
该模型需要使用 \BlackSpot\StripeMultipleAccounts\Billable
特性
...
use \Blackspot\StripeMultipleAccounts\Billable; class User extends Model { use Billable; }
...
所有可用方法
...
$serviceIntegrationId = 1; // sucursal merida con cuenta de stripe 1; // Siempre se pasa como primer parametro la sucursal o cuenta de stripe el service_integration_id que tiene el payload de stripe // Puede ser nulo y tomara la sucursal que este definida por metodos magicos // Estos metodos magicos deben definirse en el modelo Que use el trait "ManagesAuthCredentials.php" /* if (isset($this->id) && self::class == config('stripe-multiple-accounts.relationship_models.stripe_accounts')) { // Si el modelo es ServiceIntegration definido en el config, tomara el id }else if (isset($this->service_integration_id)){ // Sel el modelo tiene un "service_integration_id" relacionado tomara ese atributo }else if (method_exists($this, 'getStripeServiceIntegrationId')){ // Si el modelo tiene un metodo llamado "getStripeServiceIntegrationId" tomara el valor de esa funcion }else if (method_exists($this, 'getStripeServiceIntegrationOwnerId') && method_exists($this,'getStripeServiceIntegrationOwnerType')){ // Si el modelo tiene un metodo llamado "getStripeServiceIntegrationOwnerId" y "getStripeServiceIntegrationOwnerType" tomara el valor de esas funciones // y las aplicara en un where // Esto se usa cuando a los usuarios no se les asigna un servicio de stripe directamente si no por otro modelo // entonces si el usuario cuenta con una sucursal y la sucursal tiene un servicio de stripe // se puede determinar que la cuenta de stripe es la primera que encuentre en asociada a la sucursal del usuario dado la columna "owner" de service_integrations function getStripeServiceIntegrationOwnerId(){ return $this->subsidiary->id; } function getStripeServiceIntegrationOwnerId(){ return '\App\Models\Subsidiary'; } } */ // stripe_key // stripe_secret, etc.. $user = \Auth::user(); // ManagesAuthCredentials.php $user->getStripeClientConnection($serviceIntegrationId); // nullable $user->getStripeServiceIntegration($serviceIntegrationId); // nullable $user->assertStripeServiceIntegrationExists($serviceIntegrationId); // terminal $user->getStripeSecretKey($serviceIntegrationId); // nullable $user->getStripePublicKey($serviceIntegrationId); // nullable // ManagesCustomer.php $user->stripeCustomerExists($serviceIntegrationId); // bool $user->getStripeCustomer($serviceIntegrationId, $opts = []); // nullable $user->getStripeCustomerId($serviceIntegrationId); // nullable $user->createStripeCustomerIfNotExists($serviceIntegrationId, $opts = []); // nullable $user->createOrGetStripeCustomer($serviceIntegrationId, $opts = []); // nullable $user->updateStripeCustomer($serviceIntegrationId, $opts = []); // nullable $user->setStripeCustomerToCache(new \Stripe\Customer); // void $user->setStripeCustomerIdToCache($customerId); // void // ManagesPaymentMethods.php $user->createStripeSetupIntent($serviceIntegrationId, $opts = []); // nullable $user->getStripePaymentMethods($serviceIntegrationId, $type = 'card'); // \Stripe\Collection $user->addStripePaymentMethod($serviceIntegrationId, $paymentMethodId); // nullable $user->deleteStripePaymentMethod($serviceIntegrationId, $paymentMethodId); // nullable $user->getOrAddStripePaymentMethod($serviceIntegrationId, $paymentMethodId, $type = 'card'); // nullable $user->setDefaultStripePaymentMethod($serviceIntegrationId, $paymentMethodId); // nullable alias of updateDefaultStripePaymentMethod $user->updateDefaultStripePaymentMethod($serviceIntegrationId, $paymentMethodId); // nullable $user->getDefaultStripePaymentMethod($serviceIntegrationId, $paymentMethodId); // nullable // ManagesPaymentMethodSources.php $user->addStripePaymentMethodSource($serviceIntegrationId = null, $tokenId, $opts = []) // nullable - LEGACY $user->deleteStripePaymentMethodSource($serviceIntegrationId = null, $sourceId, $opts = []) // nullable - LEGACY // PerformsCharges.php $user->makeStripeCharge($serviceIntegrationId, $amount, $paymentMethodId, $opts = []); // nullable $user->stripePay($serviceIntegrationId, $amount, $opts = []); // nullable $user->createStripePaymentIntentWith($serviceIntegrationId, $amount, $paymentMethods = ['card','oxxo'], $opts = []); // nullable $user->createStripePaymentIntent($serviceIntegrationId, $amount, $opts = []); // nullable $user->refundStripePaymentIntent($serviceIntegrationId, $paymentIntentId, $opts = []); // nullable $user->findStripePaymentIntent($serviceIntegrationId, $paymentIntentId); // nullable // ManagesSubscriptions.php $identifier = "usr_{$userId}_prod_{$productId}"; $name = 'Plan anual'; $items = \BlackSpot\StripeMultipleAccounts\Models\StripeProducts::get(['id','allow_recurring','default_price_id','service_integration_id']); $user->newStripeSubscription($serviceIntegrationId, $identifier, $name, $items); // nullable /** @var \BlackSpot\StripeMultipleAccounts\Models\StripeUser */ $stripeUser = user()->stripe_customers()->where('service_integration_id', $serviceIntegrationId)->first();
...
发布者
配置
php artisan vendor:publish --tag=stripe-multiple-accounts:config
迁移
php artisan vendor:publish --tag=stripe-multiple-accounts:migrations