Viewing File: /home/ubuntu/walnutminds-ecom-backend-base/app/Http/Controllers/Api/PaymentApiController.php

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

use App\Helpers\Helper;

use DB, Exception, Setting, stdClass, Storage;

use Illuminate\Validation\Rule;

use App\Http\Requests\Api\PayinRequest\{PayinRequest};

use Illuminate\Support\Facades\Http;

use Illuminate\Support\{Str};

use Illuminate\Http\JsonResponse;

use App\Models\{ User, DeliveryAddress};

use App\Services\{ ProductService }; 

class PaymentApiController extends Controller
{

    protected $loginUser;

    public function __construct(Request $request) {

        info(url()->current());

        info("Request Data".print_r($request->all(), true));
        
        $this->loginUser = User::find($request->id);

        $this->timezone = $this->loginUser->timezone ?? "America/New_York";

        $request->request->add(['timezone' => $this->timezone ? : "America/New_York"]);

    }

    /**
     * To store invoice link.
     * 
     * 
     * @param PayinRequest $request
     * 
     * @return JsonResponse
    */
    public function payment_payin(PayinRequest $request): JsonResponse {

        try {

            $method = $request->payment_type.'_method';

            $validated = $request->validated();

            list($success, $message, $code, $data) = [false, api_error(208), tr('na'), []];

            $endpoint = config('app.zyro.url');

            $api_key = config('app.zyro.api_key');

            $salt_key = config('app.zyro.salt_key');

            throw_if(!$endpoint || !$api_key || !$salt_key, new Exception(api_error(214), 214));

            $order_id = rand();

            $delivery_address = DeliveryAddress::find($request->delivery_address_id);

            $user_cart_amount = ProductService::get_user_cart_amount($request->id);

            throw_if(($user_cart_amount['cart_final_amount'] ?? 0) <= 0, new Exception(api_error(215), 215));

            $payload = $request->all() + [
                'amount' => $user_cart_amount['cart_final_amount'] ?? 0,
                'payment_type' => 'inr',
                'inr_type' => 'UPI',
                'name' => $this->loginUser->name ?? "",
                'merchant_commission_percentage' => "0",
                'order_id' => $order_id,
                'callback_url' => route('payin_callback'),
                'cancel_url' => route('payin_callback'),
                'success_url' => route('payin_callback'),
                'failure_url' => route('payin_callback'),
                'description' => "Checkout payment for order: ".$order_id,
                'email' => $this->loginUser->email ?? "",
                'phone' => $this->loginUser->mobile ?? "",
                'billing_city' => $delivery_address->city ?? "",
                'billing_state' => $delivery_address->state ?? "",
                'billing_country' => $delivery_address->country ?? "",
                'billing_zipcode' => $delivery_address->pincode ?? "",
                'primary_billing_address' => $delivery_address->address ?? "",
                'secondary_billing_address' => $delivery_address->address ?? "",
            ];


            $end_point_val = "/".Str::afterLast($endpoint, "/");

            $body = empty($request->all()) ? "{}" : json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

            $plain_content = "$end_point_val$body$salt_key";

            info($plain_content);

            $signature = hash_hmac('sha256', $plain_content, $api_key);

            $response = Http::withheaders([
                'X-Api-Key' => $api_key,
                'X-Api-Signature' => $signature
                ])->post($endpoint, $payload);

            $code = $response->status();

            info("API | POST (" . $endpoint . ") status code $code");

            $data = $response->json();

            throw_if(!$response->successful() || !isset($data["data"]), new Exception($data['error'] ?? $message));

            return $this->sendResponse(api_success(136), 136, $data);

        } catch(Exception $e) {

            return $this->sendError($e->getMessage(), $e->getCode());

        }
    }
}
Back to Directory File Manager