One Hat Cyber Team
Your IP :
3.16.143.199
Server IP :
162.241.123.123
Server :
Linux sh016.hostgator.in 4.19.286-203.ELK.el7.x86_64 #1 SMP Wed Jun 14 04:33:55 CDT 2023 x86_64
Server Software :
Apache
PHP Version :
8.2.25
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
home1
/
saicsazq
/
keedoai.com
/
app
/
Services
/
View File Name :
PayPalService.php
<?php namespace App\Services; use App\Traits\ConsumesExternalServiceTrait; use App\Events\PaymentReferrerBonus; use Illuminate\Http\Request; use Illuminate\Support\Str; use App\Events\PaymentProcessed; use App\Models\Payment; use App\Models\Subscriber; use App\Models\PrepaidPlan; use App\Models\SubscriptionPlan; use App\Models\User; use Carbon\Carbon; class PayPalService { use ConsumesExternalServiceTrait; protected $baseURI; protected $clientID; protected $clientSecret; private $api; /** * Paypal payment processing, unless you are familiar with * Paypal's REST API, we recommend not to modify core payment processing functionalities here. * Part that are writing data to the database can be edited as you prefer. */ public function __construct() { $this->baseURI = config('services.paypal.base_uri'); $this->clientID = config('services.paypal.client_id'); $this->clientSecret = config('services.paypal.client_secret'); } public function resolveAuthorization(&$queryParams, &$formParams, &$headers) { $headers['Authorization'] = $this->resolveAccessToken(); } public function decodeResponse($response) { return json_decode($response); } public function resolveAccessToken() { $credentials = base64_encode("{$this->clientID}:{$this->clientSecret}"); return "Basic {$credentials}"; } public function handlePaymentSubscription(Request $request, SubscriptionPlan $id) { if (!$id->paypal_gateway_plan_id) { toastr()->error(__('Paypal plan id is not set. Please contact the support team')); return redirect()->back(); } try { $subscription = $this->createSubscription($id, $request->user()->name, $request->user()->email); } catch (\Exception $e) { toastr()->error(__('Paypal authentication error, verify your paypal settings first')); return redirect()->back(); } $subscriptionLinks = collect($subscription->links); $approve = $subscriptionLinks->where('rel', 'approve')->first(); session()->put('subscriptionID', $subscription->id); return redirect($approve->href); } public function handlePaymentPrePaid(Request $request, $id, $type) { if ($request->type == 'lifetime') { $id = SubscriptionPlan::where('id', $id)->first(); $type = 'lifetime'; } else { $id = PrepaidPlan::where('id', $id)->first(); $type = 'prepaid'; } $tax_value = (config('payment.payment_tax') > 0) ? $tax = $id->price * config('payment.payment_tax') / 100 : 0; $total_value = $request->value; try { $order = $this->createOrder($total_value, $request->currency); } catch (\Exception $e) { toastr()->error(__('Paypal authentication error, verify your paypal settings first2')); return redirect()->back(); } $orderLinks = collect($order->links); $approve = $orderLinks->where('rel', 'approve')->first(); session()->put('approvalID', $order->id); session()->put('plan_id', $id); session()->put('type', $type); return redirect($approve->href); } public function handleApproval() { if (session()->has('approvalID')) { $approvalID = session()->get('approvalID'); $plan = session()->get('plan_id'); $type = session()->get('type'); try { $payment = $this->capturePayment($approvalID); } catch (\Exception $e) { toastr()->error(__('Paypal payment capture error. Verify your paypal merchant account settings')); return redirect()->back(); } $name = $payment->payer->name->given_name; $payment = $payment->purchase_units[0]->payments->captures[0]->amount; $amount = $payment->value; $currency = $payment->currency_code; if (config('payment.referral.enabled') == 'on') { if (config('payment.referral.payment.policy') == 'first') { if (Payment::where('user_id', auth()->user()->id)->where('status', 'completed')->exists()) { /** User already has at least 1 payment and referrer already received credit for it */ } else { event(new PaymentReferrerBonus(auth()->user(), $approvalID, $amount, 'PayPal')); } } else { event(new PaymentReferrerBonus(auth()->user(), $approvalID, $amount, 'PayPal')); } } if ($type == 'lifetime') { $subscription_id = Str::random(10); $days = 18250; $subscription = Subscriber::create([ 'user_id' => auth()->user()->id, 'plan_id' => $plan->id, 'status' => 'Active', 'created_at' => now(), 'gateway' => 'PayPal', 'frequency' => 'lifetime', 'plan_name' => $plan->plan_name, 'words' => $plan->words, 'images' => $plan->images, 'characters' => $plan->characters, 'minutes' => $plan->minutes, 'subscription_id' => $subscription_id, 'active_until' => Carbon::now()->addDays($days), ]); } $record_payment = new Payment(); $record_payment->user_id = auth()->user()->id; $record_payment->order_id = $approvalID; $record_payment->plan_id = $plan->id; $record_payment->plan_name = $plan->plan_name; $record_payment->price = $amount; $record_payment->currency = $currency; $record_payment->gateway = 'PayPal'; $record_payment->frequency = $type; $record_payment->status = 'completed'; $record_payment->words = $plan->words; $record_payment->images = $plan->images; $record_payment->characters = $plan->characters; $record_payment->minutes = $plan->minutes; $record_payment->save(); $user = User::where('id',auth()->user()->id)->first(); if ($type == 'lifetime') { $group = (auth()->user()->hasRole('admin'))? 'admin' : 'subscriber'; $user->syncRoles($group); $user->group = $group; $user->plan_id = $plan->id; $user->total_words = $plan->words; $user->total_images = $plan->images; $user->total_chars = $plan->characters; $user->total_minutes = $plan->minutes; $user->available_words = $plan->words; $user->available_images = $plan->images; $user->available_chars = $plan->characters; $user->available_minutes = $plan->minutes; $user->member_limit = $plan->team_members; } else { $user->available_words_prepaid = $user->available_words_prepaid + $plan->words; $user->available_images_prepaid = $user->available_images_prepaid + $plan->images; $user->available_chars_prepaid = $user->available_chars_prepaid + $plan->characters; $user->available_minutes_prepaid = $user->available_minutes_prepaid + $plan->minutes; } $user->save(); event(new PaymentProcessed(auth()->user())); $order_id = $approvalID; return view('user.plans.success', compact('plan', 'order_id')); } toastr()->error(__('Payment was not successful, please try again')); return redirect()->back(); } public function createOrder($value, $currency) { return $this->makeRequest( 'POST', '/v2/checkout/orders', [], [ 'intent' => 'CAPTURE', 'purchase_units' => [ 0 => [ 'amount' => [ 'currency_code' => strtoupper($currency), 'value' => number_format($value, 2, '.', ''), ] ] ], 'application_context' => [ 'brand_name' => config('app.name'), 'shipping_preference' => 'NO_SHIPPING', 'user_action' => 'PAY_NOW', 'return_url' => route('user.payments.approved'), 'cancel_url' => route('user.payments.cancelled'), ] ], [], $isJSONRequest = true, ); } public function capturePayment($approvalID) { return $this->makeRequest( 'POST', "/v2/checkout/orders/{$approvalID}/capture", [], [], [ 'Content-Type' => 'application/json' ] ); } public function resolveFactor($currency) { $zeroDecimanCurrency = ['JPY']; if (in_array(strtoupper($currency), $zeroDecimanCurrency)) { return 1; } return 100; } public function createSubscription(SubscriptionPlan $id, $name, $email) { return $this->makeRequest( 'POST', '/v1/billing/subscriptions', [], [ 'plan_id' => $id->paypal_gateway_plan_id, 'subscriber' => [ 'name' => [ 'given_name' => $name, ], 'email_address' => $email, ], 'application_context' => [ 'brand_name' => config('app.name'), 'shipping_preference' => 'NO_SHIPPING', 'user_action' => 'SUBSCRIBE_NOW', 'return_url' => route('user.payments.subscription.approved', ['plan_id' => $id->id]), 'cancel_url' => route('user.payments.subscription.cancelled'), ] ], [], $isJSONRequest = true, ); } public function stopSubscription($subscriptionID) { return $this->makeRequest( 'POST', '/v1/billing/subscriptions/' . $subscriptionID . '/cancel', [], [ 'reason' => 'Just want to unsubscribe' ], [], $isJSONRequest = true, ); } public function validateSubscriptions(Request $request) { if (session()->has('subscriptionID')) { $subscriptionID = session()->get('subscriptionID'); session()->forget('subscriptionID'); return $request->subscription_id == $subscriptionID; } return false; } }