Viewing file: WhNPurchaseController.php (16.21 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Modules\PaymentGateway\Http\Controllers;
use App\Models\Customer; use App\Models\CustomerNumber; use App\Models\Number; use App\Models\NumberRequest; use App\Models\WhatsAppNumber; use App\Models\WhatsAppNumberRequest; use Carbon\Carbon; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\Log; use Modules\PaymentGateway\WHNPurchaseGateway\ProcessPayment; use PayPal\Api\Payment;
class WhNPurchaseController extends Controller { public function index() { return view('paymentgateway::index'); }
public function process(Request $request) { $data['number'] = WhatsAppNumber::find($request->id);
$numberRequest= WhatsAppNumberRequest::where('number_id', $request->id)->where('customer_id', auth('customer')->user()->id)->where('status', 'pending')->first(); if(auth('customer')->user()->type=='reseller_customer' && $numberRequest){ return redirect()->route('customer.whatsapp.number.purchase')->withErrors(['failed'=> 'Already have a request']); }
return view('paymentgateway::wha_number_purchase.index', $data); }
public function payNow(Request $request) { if (env("APP_DEMO")){ return redirect()->route('customer.whatsapp.number.purchase')->withErrors(['msg' => trans('admin.app_demo_message')]); } $customer = auth('customer')->user(); $number = WhatsAppNumber::find($request->number_id); if (!$number) return redirect()->route('customer.whatsapp.number.purchase')->withErrors(['msg' => trans('Number not found')]);
$pre_number = auth('customer')->user()->whatsapp_numbers()->where('number_id', $number->id)->first(); if (isset($pre_number) && $pre_number->expire_date > now()) { return redirect()->route('customer.whatsapp.number.purchase')->with('fail', 'You have already this number'); }
$preReq = WhatsAppNumberRequest::where(['customer_id' => $customer->id, 'number_id' => $number->id, 'status' => 'pending'])->first(); if ($preReq) { return redirect()->route('customer.whatsapp.number.purchase')->with('fail', 'You already have a pending request. Please wait for the admin reply.'); } $numberReq = new WhatsAppNumberRequest(); if($customer->type=='reseller_customer'){ $numberReq->admin_id = $customer->admin_id; }else{ $numberReq->admin_id = $number->admin_id; } $numberReq->customer_id = $customer->id; $numberReq->number_id = $number->id; $numberReq->save();
try {
if (!in_array($request->payment_type,['flutterwave','vogue_pay', 'offline', 'coinpay'])) { $processPayment = new ProcessPayment(); $processResult = $processPayment->set_gateway($request->payment_type) ->number($number) ->numberRequest($numberReq) ->request($request) ->process(); if ($processResult->error_message) { return redirect()->route('customer.whatsapp.number.purchase')->withErrors(['failed' => $processResult->error_message]); } if ($processResult->return_view) { return $processResult->return_view; } elseif ($processResult->will_redirect && $processResult->redirect_url) { return redirect()->to($processResult->redirect_url); } else { return redirect()->route('customer.whatsapp.number.purchase')->with('success', trans('Congratulations! number successfully purchase')); } } else{ return redirect()->route('customer.whatsapp.number.purchase')->with('success', trans('Congratulations! Number successfully purchase')); } } catch (\Exception $ex) { Log::error($ex); return redirect()->route('customer.whatsapp.number.purchase')->withErrors(['msg' => trans('Invalid Payment')]); }
} public function getCredentials() { $credentials = json_decode(get_settings('payment_gateway')); if (!isset($credentials) || (!$credentials->paypal_client_id || !$credentials->paypal_client_secret)) { throw new \Exception('Credentials not found. Please contact with the administrator'); } return $credentials; } function getPayPalApiContext($client_id, $secret_key) {
return new \PayPal\Rest\ApiContext( new \PayPal\Auth\OAuthTokenCredential( $client_id, // ClientID $secret_key // ClientSecret ) ); }
public function paymentSuccess(Request $request) {
$credentials = $this->getCredentials(); $apiContext = $this->getPaypalApiContext($credentials->paypal_client_id, $credentials->paypal_client_secret); $paymentId = $request->paymentId; $user_number_id = $request->number; $user = $request->user; if (!$paymentId || !$user_number_id || !$user) { return redirect()->route('customer.whatsapp.number.purchase')->withErrors(['msg' => trans('Invalid payment')]); }
try { $payment = Payment::get($paymentId, $apiContext); } catch (\Exception $ex) { return redirect()->route('customer.whatsapp.number.purchase')->withErrors(['msg' => trans('Invalid payment')]); }
if (!$payment) return redirect()->route('customer.whatsapp.number.purchase')->withErrors(['msg' => trans('Invalid payment')]);
$url = $payment->getRedirectUrls(); $parsed_url = parse_url($url->getReturnUrl()); $query_string = $parsed_url["query"]; parse_str($query_string, $array_of_query_string);
if ($array_of_query_string["number"] != $user_number_id || $array_of_query_string["user"] != $user || $array_of_query_string['paymentId'] != $paymentId) { return redirect()->route('customer.whatsapp.number.purchase')->withErrors(['msg' => trans('Invalid payment')]); }
$number_request = WhatsAppNumberRequest::where(['id' => $user_number_id, 'customer_id' => auth('customer')->id()])->where(function ($q) use ($paymentId) { $q->whereNotIn('transaction_id', [$paymentId])->orWhereNull('transaction_id'); })->first();
if (!$number_request) { return redirect()->route('customer.whatsapp.number.purchase')->withErrors(['msg' => trans('Invalid payment')]); }
$number_request->status = 'accepted'; $number_request->save(); $number = WhatsAppNumber::find($number_request->number_id); $customer=auth('customer')->user(); $time = Carbon::now()->addMonths(1); $customer->whatsapp_numbers()->create(['number_id' => $number->id, 'number' => $number->number,'expire_date' => $time, 'cost' => $number->sell_price]);
return redirect()->route('customer.whatsapp.number.purchase')->with('success', trans('Congratulations! Number successfully purchase')); }
public function paymentCancel() { return redirect()->route('customer.whatsapp.number.purchase')->withErrors(['msg' => trans('Payment has been cancelled')]); }
public function checkValidPayment(Request $request){ $number = WhatsAppNumber::where('id', $request->number_id)->first(); if ($number->price==$request->price){ return response()->json(['status'=>'success']); }else{ return abort(404); } }
function edie($error_msg) { \Log::error($error_msg); exit(); }
public function webhook(Request $request){ $settings = json_decode(get_settings('payment_gateway')); $merchant_id = isset($settings->merchate_id)?$settings->merchate_id:''; $ipn_secret = isset($settings->ipn_secret)?$settings->ipn_secret:'';
$txn_id = isset($request->txn_id)?$request->txn_id:''; if($txn_id){ $payment = CustomerNumber::where("transaction_id", $txn_id)->first(); $number = Number::where("id", $payment->number_id)->first(); }else{ abort('404'); }
$order_total = isset($number->sell_price)?$number->sell_price:0; //BTC if (!isset($request->ipn_mode) || $request->ipn_mode != 'hmac') { $this->edie("IPN Mode is not HMAC"); }
if (!isset($_SERVER['HTTP_HMAC']) || empty($_SERVER['HTTP_HMAC'])) { $this->edie("No HMAC Signature Sent."); }
if (!isset($request->merchant) || $request->merchant != trim($merchant_id)) { $this->edie("No or incorrect merchant id."); }
$hmac = hash_hmac("sha512", $request, trim($ipn_secret)); if (!hash_equals($hmac, $_SERVER['HTTP_HMAC'])) { $this->edie("HMAC signature does not match."); }
$amount1 = floatval($request->amount1); //IN USD $amount2 = floatval($request->amount2); //IN BTC
$status = intval($request->status);
if ($amount1 < $order_total) { $this->edie("Amount is lesser than order total"); }
if ($status >= 100 || $status == 2) { // Payment is complete $payment->status = 'accepted'; $payment->save(); } die("IPN OK"); }
public function coinPayment(Request $request){ $user = auth('customer')->user(); $number = Number::find($request->number_id); if (!$number) return response()->json(['status'=>'failed','message' => trans('Number not found')]);
$numberReq = new NumberRequest(); $numberReq->admin_id = $number->admin_id; $numberReq->customer_id = $user->id; $numberReq->number_id = $number->id; $numberReq->save();
$settings = json_decode(get_settings('payment_gateway')); $private_key = isset($settings->private_key)?$settings->private_key:''; $public_key = isset($settings->public_key)?$settings->public_key:'';
$cps_api = new \CoinpaymentsAPI($private_key, $public_key,'json');
// Enter amount for the transaction $settings = json_decode(get_settings('local_setting')); $currency1=isset($settings->currency_code)?$settings->currency_code:'USD'; $currency2=isset($request->coin_payment_type)?strtoupper($request->coin_payment_type):'BTC';
// Enter buyer email below $amount = $number->sell_price;
$url= route('paymentgateway::number.coin.payment'); $userName= $user->full_name; $userEmail= $user->email; $itemName= $number->number;
$data=[ 'amount'=>$amount, 'currency1'=>$currency1, 'currency2'=>$currency2, 'buyer_name'=>$userName, 'buyer_email'=>$userEmail, 'item_name'=>$itemName, 'ipn_url'=>$url, ];
$transaction_response = $cps_api->CreateCustomTransaction($data);
if ($transaction_response['error'] == 'ok') {
if(isset($transaction_response['result']) && isset($transaction_response['result']['txn_id'])) { $numberReq->transaction_id = $transaction_response['result']['txn_id']; $numberReq->save(); }
$status_url = isset($transaction_response['result']) && isset($transaction_response['result']['status_url']) ? $transaction_response['result']['status_url'] : ''; $responseAmount=isset($transaction_response['result']) && isset($transaction_response['result']['amount'])?$transaction_response['result']['amount']:'';
$data=[ 'status_url'=>$status_url, 'amount'=>$responseAmount, 'currency'=>$currency2, ]; return response()->json(['status'=>'success', 'data'=>$data]); } else { throw new \Exception($transaction_response['error']); return response()->json(['status'=>'failed', 'message'=>$transaction_response['error']]); } }
public function numberPurchaseSsl(Request $request){ $amount= $request->amount; if(!$request->value_b || !$request->value_a || !$amount){ return abort(404); } $number= WhatsAppNumber::where('id', $request->value_a)->first();
if(!$number){ return abort(404); } if($amount != $number->sell_price){ return redirect()->route('customer.whatsapp.number.purchase')->withErrors(['failed'=>'Invalid payment']); } $customer=Customer::where('id', $request->value_c)->firstOrFail(); auth('customer')->loginUsingId($customer->id); $numberRequest= WhatsAppNumberRequest::where('id', $request->value_b)->where('number_id', $number->id)->where('customer_id', $request->value_c)->first(); if($numberRequest){ $numberRequest->status = 'accepted'; $numberRequest->save(); } $time = Carbon::now()->addMonths(1); $preNumber=$customer->numbers()->where('number_id', $number->id)->first(); if($preNumber && $preNumber->expire_date < now()){ $preNumber->expire_date=$time; $preNumber->save(); }else { $customer->whatsapp_numbers()->create(['number_id' => $number->id, 'number' => $number->number, 'expire_date' => $time, 'cost' => $number->sell_price]); }
return redirect()->route('customer.whatsapp.number.purchase')->with('success', 'Congratulations! Number successfully purchase'); }
public function uddoktapayNumberSuccess(Request $request){
if ($request->order_id) { $numberRequest= NumberRequest::where('id', $request->order_id)->first(); $customer=Customer::where('id', $numberRequest->customer_id)->firstOrFail(); $number= Number::where('id', $numberRequest->number_id)->first(); if(!$number){ return abort(404); } if($numberRequest){ $numberRequest->status = 'accepted'; $numberRequest->save(); $time = Carbon::now()->addMonths(1); $customer->numbers()->create(['number_id' => $number->id, 'number' => $number->number,'expire_date' => $time, 'cost' => $number->sell_price]); } } return redirect()->route('customer.whatsapp.number.purchase')->with('success', 'Congratulations! Number successfully purchase'); }
public function processPaystackPayment(Request $request){ if (!isset($request->number_req) || !isset($request->trxref) || !isset($request->number)) { throw new \Exception('Invalid request data'); } if ($request->trxref && $request->number_req && $request->number) { if ($request->number_req) { $numberRequest= WhatsAppNumberRequest::where('id', $request->number_req)>first(); $number= WhatsAppNumber::where('id', $request->number)>first(); if (!$numberRequest || !$number) { Log::info("Whatsapp Number request not found - 404"); exit; };
if($numberRequest){ $numberRequest->status = 'accepted'; $numberRequest->transaction_id = $request->trxref; $numberRequest->save(); } $time = Carbon::now()->addMonths(1); $preNumber=auth('customer')->user()->numbers()->where('number_id', $number->id)->first(); if($preNumber && $preNumber->expire_date < now()){ $preNumber->expire_date=$time; $preNumber->save(); }else { auth('customer')->user()->whatsapp_numbers()->create(['number_id' => $number->id, 'number' => $number->number, 'expire_date' => $time, 'cost' => $number->sell_price]); }
return redirect()->route('customer.whatsapp.number.purchase')->with('success', 'Congratulations! Number successfully purchase'); } Log::info("CallBack data not found"); exit; } else { return redirect()->route('customer.whatsapp.number.purchase')->withErrors(['msg' => 'Invalid payment']); } } }
|