HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/demo.sports-crowd.com/app/Http/Controllers/WebpayController.php
<?php

namespace App\Http\Controllers;

use App\GatewayPayment;
use App\Order;
use App\Parameter;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Transbank\Webpay\WebpayPlus\Transaction;
use Transbank\Webpay\Configuration;
use Transbank\Webpay\Webpay;
use Transbank\Webpay\WebpayPlus;

class WebpayController extends Controller
{
    private $api_key;
    private $commerce_code;

    public function __construct(){
        $this->determinateWebService();
        WebpayPlus::configureForProduction($this->commerce_code, $this->api_key);
    }

    public function determinateWebService(){
        $parameters = Parameter::first();
        $is_production = $parameters->is_production_gateway; // TRUE: Production ; FALSE: Test

        $gateway_data = GatewayPayment::where("name", "webpay")
                            ->where("is_productive", $is_production)
                            ->first();

        if($gateway_data){
            $this->api_key = $gateway_data->api_key;
            $this->commerce_code = $gateway_data->merchant_id;
        }
    }

    public function webcheckoutWebpay(Request $request){

        $id = $request->input("uid");
        $return_url = config('app.url') . '/webpay/confirm';
        $order = Order::where('id', $id)->first();

        // Verifica sin consultar a Webpay
        if($order->gw_state == 'CONFIRMED'){
            return view("webpay.webpaycheckout-done");
        }

        // Crea la transacción
        $transaction = new Transaction();
        // $transaction->configureForIntegration($this->commerce_code, $this->api_key);
        // $transaction->configureForProduction($this->commerce_code, $this->api_key);
        $response = $transaction->create($order->code, $order->client_id, $order->total_price, $return_url);

        $order->gw_state = "PENDING";
        $order->update();


        return view("webpay.webpaycheckout")
                ->with('url_action', $response->getUrl())
                ->with('token', $response->getToken());
    }

    public function confirmFromWebpay(Request $request){

        $token_ws = $request['token_ws'];
        $tbk_token = $request['TBK_TOKEN'];
        $orden_compra = $request['TBK_ORDEN_COMPRA'];
        $id_sesion = $request['TBK_ID_SESION'];

        if ($tbk_token) {
            return view("webpay.webpaycheckout-rejected")
                        ->with('order', false);
        }

        // Usuario aborto el pago
        if ($tbk_token && $orden_compra && $id_sesion) {
            return view("webpay.webpaycheckout-rejected")
                        ->with('order', false);
        }

        // Pasó mas de 10 min en el formulario y se cancela automáticamente por timeout
        if ($orden_compra && $id_sesion) {
            return view("webpay.webpaycheckout-rejected")
                        ->with('order', false);
        }

        // Error en el formulario de pago
        if ($token_ws && $tbk_token && $orden_compra && $id_sesion) {
            return view("webpay.webpaycheckout-rejected")
                        ->with('order', false);
        }

        if (!$token_ws) {
            return view("webpay.webpaycheckout-rejected")
                        ->with('order', false);
        }

        $response = (new Transaction)->commit($token_ws);
        $order = Order::where('code', $response->getBuyOrder())->first();

        if ($response->isApproved()) {

            // Transacción aprovada
            $order->gw_state = "CONFIRMED";
            $order->gw_code_transaction = $token_ws;
            $order->update();

            return view("webpay.webpaycheckout-confirm")
                        ->with("order", $order)
                        ->with("order_code", $response->getBuyOrder())
                        ->with("amount", $response->getAmount())
                        ->with("authorization_code", $response->getAuthorizationCode())
                        ->with("date", explode("T", $response->getTransactionDate())[0])
                        ->with("payment_type", $response->getPaymentTypeCode())
                        ->with("installments", $response->getInstallmentsNumber())
                        ->with("card", $response->getCardNumber());

        } else {

            // Transacción rechazada
            $order->gw_state = "REJECTED";
            $order->gw_code_transaction = $token_ws;
            $order->update();

            return view("webpay.webpaycheckout-rejected")
                        ->with("order", $order);
        }

    }

}