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