Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Devdarl's avatar

Error: Class "App\Paym\Aggregate" not found in file C:\Laravel Projects\bcboom-main\routes\api.php on line 87

Hi, I keep getting a weird error.

So, I defined an abstract class:

<?php namespace App\Paym\Aggregate;

use App\Models\Wallet;
use App\Models\Payment;
use Illuminate\Http\Request;

abstract class Aggregate {

    abstract function wallet(Wallet $wallet): string;

    abstract function payment(Payment $payment): string;

    abstract function status(Request $request): string;

    abstract function validate(Request $request): bool;

    abstract function id(): string;

    abstract function name(): string;

    abstract function supports(): array;

    public static function list(): array {
        return [
            new HpayOneAggregator()
        ];
    }
}

and I am extending the Aggregate class here in a file in the same folder as thus:

<?php namespace App\Paym\Aggregate;

use App\Currency\Currency;
use App\Models\Wallet;
use App\Models\Payment;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

class HpayOneAggregator extends Aggregate {

    private string $merchantNumber = "256018655";
    private string $merchantKey = "LHLMkrgmTcZuRHWgDhYV";
    private string $gateway = "https://api.hpay.one";

    function wallet(Wallet $wallet): string {
        $data = [
            'mchid' => $this->merchantNumber,
            'timestamp' => time(),
            'amount' => $request->amount,
            'orderno' => intval(microtime(true) * 1000 * 1000),
            'notifyurl' => url('/api/paymentStatus'),
            'currency' => 'BRL'
        ];

        $sign = $this->sign($data, $this->merchantKey);
        $data['sign'] = $sign;

        $result = $this->curl($this->gateway . '/open/index/createorder', $data, true);

        if(isset($result['data']['pay_info'])) {
            $pay = Payment::create([
                "amount" => $result['data']['amount'],
                "pay_amount" => $result['data']['pay_amount'],
                "order_no" => $result['data']['orderno'],
                "create_time" => $result['data']['create_time'],
                "customer" => $user->username,
                'user_id' => $user->id,
                "mobile" => $user->phone,
                "email" => $user->email,
                "link" => $result['data']['pay_info'],
                "status" => $result['data']["trade_state"],
                "sign" => $dsign,
            ]);


            $wallet->update([
                'order_no' => $pay->order_no
            ]);

            return $result['data']['pay_info'];
        } else Log::warning('Error: ' . json_encode($result));

        return url("/payment_error");
    }

    function status(Request $request): string {
        $data = $request->all();
        unset($data['sign']);
        $sign = $this->sign($data, $this->merchantKey);

        if($sign === $request->sign) {
            if($data['trade_state'] === 'SUCCESS') {
                $wallet = Wallet::where('order_no', $request->tx_orderno)->first();

                $wallet->update([
                    'total' => $wallet->total + $payment->amount,
                    'deposit' => $wallet->deposit + $payment->amount
                ]);
                
            }
        }

        return "SUCCESS";
    }

    function validate(Request $request): bool {
        return $request->trade_state !== null;
    }

    function id(): string {
        return "hpay";
    }

    function name(): string {
        return "PIX";
    }

    function icon(): string {
        return "";
    }

    public function supports(): array {
        return [
            "local_brl"
        ];
    }

    private function curl($url, $data = null, $post = false, $text = false) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        if ($post) {
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
        }

        $json = curl_exec($ch);
        curl_close($ch);

        if($text)
            $result = $json;
        else
            $result = json_decode($json, true);

        return $result;
    }

    private function sign($object, $key) {
        $parameters = [];

        foreach ($object as $k => $v) {
            if(isset($v) && strlen($v) > 0){
                $parameters[$k] = $v;
            }
        }

        ksort($parameters);
        $string = $this->formatQuery($parameters);
        $string = $string.'&key='.$key;
        $string = md5($string);
        return strtoupper($string);
    }

    private function formatQuery($paraMap) {
        $buff = "";
        ksort($paraMap);
        foreach ($paraMap as $k => $v)
            if ($k != 's')
                $buff .= $k .'='. $v.'&' ;

        $reqPar = "";
        if (strlen($buff) > 0)
            $reqPar = substr($buff, 0, strlen($buff) - 1);
        return $reqPar;
    }

}

However, when I call it at the route:


        Route::post('pay', function(Request $request) {
            $aggregator = Aggregate::find($request->id);
            if(!$aggregator) return APIResponse::reject(1);

            $wallet = Wallet::where('user_id', Auth::id())->first();
            
            return Aggregate::find($aggregator->id())->wallet($wallet);
        });
        
        Route::post('paymentStatus', function(Request $request) {
            $aggregator = null;
            foreach(Aggregate::list() as $ag) {
                if($ag->validate($request)) {
                    $aggregator = $ag;
                    break;
                }
            }
            if($aggregator == null) return 'Unknown aggregator';
            
            return $aggregator->status($request);
        });

It throws an error:

Error: Class "App\Paym\Aggregate" not found in file C:\Laravel Projects\bcboom-main\routes\api.php on line 87

This happens even when I return the class in a controller:

public function callback(Request $request)
    {
        $aggregator = $request->all();
        if($aggregator == null){
             return 'Unknown aggregator';
        }else
            {
                $aggregator = Aggregate::list();
                return $aggregator->status($request);
            }
    }

Please, I need help.

0 likes
2 replies
Sinnbeck's avatar

Did you perhaps plan to use an interface and dependency injection to resolve the correct class?

Please or to participate in this conversation.