117 lines
4.1 KiB
PHP
117 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\V2;
|
|
|
|
use App\Models\CombinedOrder;
|
|
use Illuminate\Http\Request;
|
|
use Redirect;
|
|
|
|
class KhaltiController extends Controller
|
|
{
|
|
public function pay(Request $request)
|
|
{
|
|
if ($request->payment_type == 'cart_payment') {
|
|
$combined_order = CombinedOrder::find($request->combined_order_id);
|
|
$purchase_order_id = $combined_order->id;
|
|
$amount = $combined_order->grand_total;
|
|
} elseif ($request->payment_type == 'wallet_payment') {
|
|
$amount = $request->amount;
|
|
$purchase_order_id = $request->user_id;
|
|
} elseif ($request->payment_type == 'seller_package_payment' || $request->payment_type == 'customer_package_payment') {
|
|
$amount = $request->amount;
|
|
$purchase_order_id = $request->package_id;
|
|
}
|
|
|
|
$return_url = route('api.khalti.success'); //must be changed
|
|
$args = http_build_query([
|
|
'return_url' => $return_url,
|
|
'website_url' => route('home'),
|
|
'amount' => $amount * 100,
|
|
"modes" => [
|
|
"KHALTI",
|
|
"EBANKING",
|
|
"MOBILE_BANKING",
|
|
"CONNECT_IPS",
|
|
"SCT"
|
|
],
|
|
'purchase_order_id' => $purchase_order_id,
|
|
'purchase_order_name' => $request->payment_type,
|
|
]);
|
|
if (get_setting('khalti_sandbox') == 1) {
|
|
$url = 'https://a.khalti.com/api/v2/epayment/initiate/';
|
|
} else {
|
|
$url = 'https://khalti.com/api/v2/epayment/initiate/';
|
|
}
|
|
# Make the call using API.
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_POST, 1);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
|
|
$headers = ['Authorization: Key ' . env('KHALTI_SECRET_KEY')];
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
|
|
// Response
|
|
$response = json_decode(curl_exec($ch), true);
|
|
curl_close($ch);
|
|
|
|
// return response()->json([
|
|
// "result" => true,
|
|
// "url" => $response['payment_url']
|
|
// ]);
|
|
return Redirect::to($response['payment_url']);
|
|
}
|
|
|
|
public function paymentDone(Request $request)
|
|
{
|
|
$args = http_build_query([
|
|
'pidx' => $request->pidx,
|
|
]);
|
|
if (get_setting('khalti_sandbox') == 1) {
|
|
$url = 'https://a.khalti.com/api/v2/epayment/lookup/';
|
|
} else {
|
|
$url = 'https://khalti.com/api/v2/epayment/lookup/';
|
|
}
|
|
|
|
# Make the call using API.
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_POST, 1);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
|
|
$headers = ['Authorization: Key ' . env('KHALTI_SECRET_KEY')];
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
|
|
// Response
|
|
$response = json_decode(curl_exec($ch));
|
|
curl_close($ch);
|
|
|
|
if ($response->status == 'Completed') {
|
|
|
|
if ($request->payment_type == 'cart_payment') {
|
|
|
|
checkout_done($request->combined_order_id, json_encode($response));
|
|
}
|
|
|
|
if ($request->payment_type == 'wallet_payment') {
|
|
|
|
wallet_payment_done($request->user_id, $request->amount, 'khalti', json_encode($response));
|
|
}
|
|
|
|
if ($request->payment_type == 'seller_package_payment') {
|
|
seller_purchase_payment_done($request->user_id, $request->package_id, $request->amount, 'khalti', json_encode($response));
|
|
}
|
|
|
|
if ($request->payment_type == 'customer_package_payment') {
|
|
customer_purchase_payment_done($request->user_id, $request->package_id);
|
|
}
|
|
|
|
return response()->json(['result' => true, 'message' => translate("Payment is successful")]);
|
|
} else {
|
|
return response()->json(['result' => false, 'message' => translate("Payment is failed")]);
|
|
}
|
|
}
|
|
}
|