File: /var/www/vhost/disk-apps/alq-cali.bikenow.co/app/Jobs/Memberships/RenewSubscriptionPaymentJob.php
<?php
namespace App\Jobs\Memberships;
use App\Core\Membership\Application\MembershipService;
use App\Core\Payment\Application\PaymentTransactionService;
use App\Core\Payment\Methods\WompiApi\WompiApiClient;
use App\Core\Payment\Methods\WompiApi\WompiApiStrategy;
use App\Core\Payment\PaymentMethodContext;
use App\Models\UserPaymentSource;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class RenewSubscriptionPaymentJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $membershipId;
public function __construct($membershipId)
{
$this->membershipId = $membershipId;
}
public function handle(
MembershipService $membershipService,
PaymentTransactionService $paymentTransactionService
) {
$membershipSubscription = $membershipService->find($this->membershipId);
$paymentMethodContext = PaymentMethodContext::init(
$membershipSubscription->payment_transaction->gateway_payments_id
);
$payment = $paymentTransactionService->buildPayment($membershipSubscription->payment_transaction);
$paymentSource = UserPaymentSource::select('payment_source')
->where('user_id', $payment->customer()->id())
->where('gateway_payment_id', $payment->paymentGatewayId())
->first();
$gatewayParameters = $paymentMethodContext->parameters();
$wompiApiClient = new WompiApiClient($gatewayParameters);
$amountInCents = $membershipSubscription->membership->price * 100;
$signature = WompiApiStrategy::generateSignature(
$membershipSubscription->payment_transaction->reference,
$amountInCents,
$gatewayParameters->currency,
$gatewayParameters->client_signature
);
$transaction = (object)[
"amount_in_cents" => $amountInCents,
"currency" => $gatewayParameters->currency,
"signature" => $signature,
"customer_email" => $payment->customer()->email(),
"reference" => $payment->reference(),
"customer_data" => [
"phone_number" => $payment->customer()->mobile(),
"full_name" => $payment->customer()->fullName(),
"legal_id" => $payment->customer()->document(),
"legal_id_type" => $payment->customer()->documentType()
],
"payment_method" => [
"type" => $paymentSource->payment_source->type,
"installments" => 1
],
"payment_source_id" => $paymentSource->payment_source->id
];
$transactionResponse = $wompiApiClient->createTransaction($transaction);
$paymentTransactionService->setPaymentGatewayTxId(
$membershipSubscription->payment_transaction,
$transactionResponse->data->id
);
}
}