Viewing file: NumberPurchaseController.php (18.95 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Modules\PaymentGateway\Http\Controllers;
use App\Events\SendMail; use App\Models\BillingRequest; use App\Models\Customer; use App\Models\CustomerNumber; use App\Models\Number; use App\Models\NumberRequest; use App\Models\Transactions; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Routing\Controller; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Str; use Modules\PaymentGateway\NumberPurchaseGateway\ProcessPayment; use Modules\PaymentGateway\Services\PaymentCredentials; use Omnipay\Omnipay; use PayPal\Api\Payment;
class NumberPurchaseController extends Controller { public function index() { return view('paymentgateway::index'); }
public function process(Request $request) { $data['number'] = Number::find($request->id); $numberRequest= NumberRequest::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.numbers.phone_numbers')->withErrors(['failed'=> 'Already have a request']); }
return view('paymentgateway::number_purchase.index', $data); }
public function payNow(Request $request) { DB::beginTransaction(); try{ if (env("APP_DEMO")){ return redirect()->route('customer.numbers.purchase')->withErrors(['msg' => trans('admin.app_demo_message')]); } $customer = auth('customer')->user(); $number = Number::find($request->number_id); if (!$number) return redirect()->route('customer.numbers.purchase')->withErrors(['msg' => trans('Number not found')]);
$pre_number = auth('customer')->user()->numbers()->where('number_id', $number->id)->first(); if (isset($pre_number) && $pre_number->expire_date > now()) { return redirect()->route('customer.numbers.purchase')->with('fail', 'You have already this number'); }
$preReq = NumberRequest::where(['customer_id' => $customer->id, 'number_id' => $number->id, 'status' => 'pending'])->first(); if ($preReq) { return redirect()->route('customer.numbers.purchase')->with('fail', 'You already have a pending request. Please wait for the admin reply.'); } $numberReq = new NumberRequest(); 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();
//Transaction Report $transaction= new Transactions(); $transaction->customer_id=auth('customer')->user()->id; $transaction->type='number'; $transaction->added_by=auth('customer')->user()->type; $transaction->amount=$number->sell_price; if($number->sell_price<=0) { $transaction->status = 'paid'; }else { $transaction->status = 'unpaid'; } $transaction->ref_id=$numberReq->id; $transaction->transaction_id=Str::random(12); $transaction->save();
if($number->sell_price <=0){ //TODO::Update Number Request For Price 0 $numberReq->status='accepted'; $numberReq->save();
//TODO::Update Transactions For Price 0 $transaction->status='paid'; $transaction->save();
$time = Carbon::now()->addMonths(1); $customer->numbers()->create(['number_id' => $number->id,'dynamic_gateway_id'=>$number->dynamic_gateway_id ,'number' => $number->number,'expire_date' => $time, 'cost' => $number->sell_price, 'sms_capability'=>$number->sms_capability,'mms_capability'=>$number->mms_capability,'voice_capability'=>$number->voice_capability, 'whatsapp_capability'=>$number->whatsapp_capability]);
DB::commit(); return redirect()->route('customer.numbers.purchase')->with('success', trans('Congratulations! Number successfully purchase')); }
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();
DB::commit(); if ($processResult->error_message) { return redirect()->route('customer.numbers.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.numbers.purchase')->with('success', trans('Congratulations! number successfully purchase')); } } else{ DB::commit(); return redirect()->route('customer.numbers.purchase')->with('success', trans('Congratulations! Number successfully purchase')); } } catch (\Exception $ex) { Log::error($ex); DB::rollBack(); return redirect()->route('customer.numbers.purchase')->withErrors(['msg' => trans('Invalid Payment')]); }
//end
}
public function paymentSuccess(Request $request) {
try{ $credentials = PaymentCredentials::get(); if (!isset($credentials) || !isset($credentials->paypal_payment_mode) || !$credentials->paypal_payment_mode || (!$credentials->paypal_client_id || !$credentials->paypal_client_secret)) { throw new \Exception('Credentials not found. Please contact with the administrator'); }
$mode=isset($credentials->paypal_payment_mode) && $credentials->paypal_payment_mode && $credentials->paypal_payment_mode=='live'?'false':'true'; $gateway = Omnipay::create('PayPal_Rest'); $gateway->setClientId($credentials->paypal_client_id); $gateway->setSecret($credentials->paypal_client_secret); $gateway->setTestMode($mode);
if ($request->paymentId && $request->PayerID){ $transaction = $gateway->completePurchase(array( 'payer_id' => $request->input('PayerID'), 'transactionReference' => $request->input('paymentId'), )); $response = $transaction->send();
if(!$response->isSuccessful()) { return redirect()->route('customer.numbers.purchase')->withErrors(['msg' => trans('Invalid payment')]); } } else { return redirect()->route('customer.numbers.purchase')->withErrors(['msg' => trans('Transaction is declined')]); }
$user_number_id=$request->number; $user_id=$request->user; $paymentId = $request->paymentId;
$number_request = NumberRequest::where(['id' => $user_number_id, 'customer_id' => $user_id])->where(function ($q) use ($paymentId) { $q->whereNotIn('transaction_id', [$paymentId])->orWhereNull('transaction_id'); })->first();
if (!$number_request) { return redirect()->route('customer.numbers.purchase')->withErrors(['msg' => trans('Invalid payment')]); } $customer=Customer::where('id', $number_request->customer_id)->first(); if(!$customer){ return redirect()->route('customer.numbers.purchase')->withErrors(['msg' => trans('Something went wrong')]); }
$number_request->status = 'accepted'; $number_request->save();
$number = Number::find($number_request->number_id);
$transaction=Transactions::where('type', 'number')->where('customer_id', $customer->id)->where('ref_id', $number_request->id)->first();
if($transaction) { $transaction->transaction_id = $paymentId; $transaction->status = 'paid'; $transaction->save(); }
$time = Carbon::now()->addMonths(1); $customer->numbers()->create(['number_id' => $number->id,'dynamic_gateway_id'=>$number->dynamic_gateway_id ,'number' => $number->number,'expire_date' => $time, 'cost' => $number->sell_price, 'sms_capability'=>$number->sms_capability,'mms_capability'=>$number->mms_capability,'voice_capability'=>$number->voice_capability, 'whatsapp_capability'=>$number->voice_capability]);
return redirect()->route('customer.numbers.purchase')->with('success', trans('Congratulations! Number successfully purchase')); }catch(\Exception $ex){ return redirect()->route('customer.numbers.purchase')->with('success', $ex->getMessage());
} }
public function paymentCancel() { return redirect()->route('customer.numbers.purchase')->withErrors(['msg' => trans('Payment has been cancelled')]); }
public function checkValidPayment(Request $request){ $number = Number::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= Number::where('id', $request->value_a)->first();
if(!$number){ return abort(404); } if($amount != $number->sell_price){ return redirect()->route('customer.numbers.purchase')->withErrors(['failed'=>'Invalid payment']); } $customer=Customer::where('id', $request->value_c)->firstOrFail(); auth('customer')->loginUsingId($customer->id); $numberRequest= NumberRequest::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->numbers()->create(['number_id' => $number->id,'dynamic_gateway_id'=>$number->dynamic_gateway_id ,'number' => $number->number, 'expire_date' => $time, 'cost' => $number->sell_price, 'sms_capability'=>$number->sms_capability,'mms_capability'=>$number->mms_capability,'voice_capability'=>$number->voice_capability, 'whatsapp_capability'=>$number->voice_capability]); }
return redirect()->route('customer.numbers.purchase')->with('success', 'Congratulations! Number successfully purchase'); }
public function uddoktapayNumberSuccess(Request $request) {
$customerId = $request->customer_id; auth('customer')->loginUsingId($customerId);
return redirect()->route('customer.numbers.purchase')->with('success', 'Congratulations! Number successfully purchase');
} public function uddoktapayNumberWebhook(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,'dynamic_gateway_id'=>$number->dynamic_gateway_id ,'number' => $number->number,'expire_date' => $time, 'cost' => $number->sell_price, 'sms_capability'=>$number->sms_capability,'mms_capability'=>$number->mms_capability,'voice_capability'=>$number->voice_capability, 'whatsapp_capability'=>$number->voice_capability]); } } return redirect()->route('customer.numbers.purchase')->with('success', 'Congratulations! Number successfully purchase'); }
public function processPaystackPayment(Request $request){
if (!isset($request->number_req) || !isset($request->trxref)) { throw new \Exception('Invalid request data'); } if ($request->trxref && $request->number_req) { if ($request->number_req) { $number_req = NumberRequest::find($request->number_req); if (!$number_req) { Log::info("Number request not found - 404"); exit; };
$number_req->status = 'accepted'; $number_req->transaction_id = $request->trxref; $number_req->save(); $number = Number::find($number_req->number_id); $customer=auth('customer')->user(); $time = Carbon::now()->addMonths(1); $customer->numbers()->create(['number_id' => $number->id,'dynamic_gateway_id'=>$number->dynamic_gateway_id,'number' => $number->number,'expire_date' => $time, 'cost' => $number->sell_price, 'sms_capability'=>$number->sms_capability,'mms_capability'=>$number->mms_capability,'voice_capability'=>$number->voice_capability, 'whatsapp_capability'=>$number->voice_capability]);
return redirect()->route('customer.numbers.purchase')->with('success', trans('Congratulations! Number successfully purchase'));
} Log::info("CallBack data not found"); exit; } else { return redirect()->route('customer.numbers.purchase')->withErrors(['msg' => 'Invalid payment']); } } }
|