Commit 7569a53f authored by Mark Harding's avatar Mark Harding
Browse files

(feat): transactions endpoint

parent 762c89fd
Loading
Loading
Loading
Loading
+55 −0
Original line number Original line Diff line number Diff line
<?php
/**
 *
 */
namespace Minds\Controllers\api\v2\payments\stripe;

use Minds\Api\Factory;
use Minds\Common\Cookie;
use Minds\Core\Di\Di;
use Minds\Core\Config;
use Minds\Core\Session;
use Minds\Interfaces;
use Minds\Core\Payments\Stripe;

class transactions implements Interfaces\Api
{
    public function get($pages)
    {
        $user = Session::getLoggedInUser();

        $connectManager = new Stripe\Connect\Manager();

		try {
            $account = $connectManager->getByUser($user);
        } catch (\Exception $e) {
            return Factory::response([
                'status' => 'error',
                'message' => 'There was an error returning the usd account',
            ]);
        }	
 
        $transactionsManger = new Stripe\Transactions\Manager();
		$transactions = $transactionsManger->getByAccount($account);

        return Factory::response([
            'transactions' => Factory::exportable($transactions),
        ]);
    }

    public function post($pages)
    {
        return Factory::response([]);
    }

    public function put($pages)
    {
        return Factory::response([]);
    }

    public function delete($pages)
    {
       return Factory::response([]);
    }
}
+20 −0
Original line number Original line Diff line number Diff line
<?php
namespace Minds\Core\Payments\Stripe\Instances;

use Minds\Common\StaticToInstance;
use Minds\Core\Config\Config;
use Minds\Core\Di\Di;

/**
 * @method ChargeInstance retrieve() 
 */
class ChargeInstance extends StaticToInstance
{
    public function __construct(Config $config = null)
    {
        $config = $config ?? Di::_()->get('Config');
        \Stripe\Stripe::setApiKey($config->get('payments')['stripe']['api_key']);
        $this->setClass(new \Stripe\Charge);
    }
}
+20 −0
Original line number Original line Diff line number Diff line
<?php
namespace Minds\Core\Payments\Stripe\Instances;

use Minds\Common\StaticToInstance;
use Minds\Core\Config\Config;
use Minds\Core\Di\Di;

/**
 * @method TransferInstance all() 
 */
class TransferInstance extends StaticToInstance
{
    public function __construct(Config $config = null)
    {
        $config = $config ?? Di::_()->get('Config');
        \Stripe\Stripe::setApiKey($config->get('payments')['stripe']['api_key']);
        $this->setClass(new \Stripe\Transfer);
    }
}
+3 −0
Original line number Original line Diff line number Diff line
@@ -63,6 +63,9 @@ class Manager
            'transfer_data' => [
            'transfer_data' => [
                'destination' => $intent->getStripeAccountId(),
                'destination' => $intent->getStripeAccountId(),
            ],
            ],
            'metadata' => [
                'user_guid' => $intent->getUserGuid(),
            ],
        ];
        ];


        if ($intent->getServiceFee()) {
        if ($intent->getServiceFee()) {
+59 −0
Original line number Original line Diff line number Diff line
<?php
namespace Minds\Core\Payments\Stripe\Transactions;

use Minds\Core\Payments\Stripe\Connect\Account;
use Minds\Core\Payments\Stripe\Instances\TransferInstance;
use Minds\Core\Payments\Stripe\Instances\ChargeInstance;
use Minds\Core\Di\Di;
use Minds\Common\Repository\Response;

class Manager
{
    /** @var EntitiesBuilder $entitiesBuilder */
    private $entitiesBuilder;

	/** @var TransferInstance $transferInstance */
	private $transferInstance;

	/** @var ChargeInstance $chargeInstance */
	private $chargeInstance;

	public function __construct($entitiesBuilder = null, $transferInstance = null, $chargeInstance = null)
    {
        $this->entitiesBuilder = $entitiesBuilder ?? Di::_()->get('EntitiesBuilder');
		$this->transferInstance = $transferInstance ?? new TransferInstance();
		$this->chargeInstance = $chargeInstance ?? new ChargeInstance();
	}

	/**
     * Return transactions from an account object
     * @param Account $account
     * @return Response[Transaction]
     */
    public function getByAccount(Account $account): Response
	{
		$transfers = $this->transferInstance->all([ 'destination' => $account->getId() ]);

		$response = new Response();
        foreach ($transfers->autoPagingIterator() as $transfer) {
            try {
				$payment = $this->chargeInstance->retrieve($transfer->source_transaction);
			} catch (\Exception $e) {
				continue;
            }
			$transaction = new Transaction();
            $transaction->setId($transfer->id)
                ->setTimestamp($transfer->created)
                ->setGross($payment->amount)
                ->setFees(0)
                ->setNet($transfer->amount)
                ->setCurrency($transfer->currency)
                ->setCustomerUserGuid($payment->metadata['user_guid'])
                ->setCustomerUser($this->entitiesBuilder->single($payment->metadata['user_guid']));
			$response[] = $transaction;
		}
		return $response;
	}	

}
Loading