Ngiler SH3LL 360
Home
Information
Create File
Create Folder
:
/
home
/
tbf
/
cursbackend
/
app
/
Http
/
Controllers
/
Api
/
Information Server
MySQL :
OFF
Perl :
OFF
CURL :
ON
WGET :
OFF
PKEXEC :
OFF
Directive
Local Value
IP Address
89.40.16.97
System
Linux server.atelieruldeit.ro 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64
User
tbf
PHP Version
7.3.33
Software
Apache
Doc root
Writable
close
Edit File :
StripeController.php
| Size :
21.55
KB
Copy
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Models\User; use App\Models\Instance; use App\Models\Package; use App\Models\Voucher; use App\Mail\NewInvoiceCreated; use Illuminate\Support\Arr; use Carbon\Carbon; use App\Models\CronjobMail; use App\Repositories\InvoiceRepository; use Session; use Auth; use Stripe; use Lang; use Mail; use Log; use Str; class StripeController extends Controller { public function packages(Request $request) { if($request->package_token){ return response()->json(Package::where('token', $request->package_token)->first()); }else{ return response()->json(Package::where('display_for_subscription',1)->get()); } } public function getProforma() { $instance = Auth::user()->instance; $user = $instance->users->first(); $invoice = $instance->invoices->first(); if(!$invoice){ $proforma = InvoiceRepository::generateProforma( $instance->id, $instance->package->price_in_ron, 'paid', 'stripe_payment_id', 'RON', $user->email ); // change the language according to user language $package = $instance->package; $subject = "Proforma ".$package->name; $data = [ 'proforma' => $proforma['public_path'], 'landing_page_url' => $package->landing_page_url, 'course_name' => $package->name, 'limited_offer' => $package->compare_at_price_euro ? true : false ]; createCronjobMail($user->email, $subject, $data, CronjobMail::PAY_WITH_PROFORMA, $user->language); }else{ $proforma = ['url' => config('app.url').'/proforma/'.$instance->id.Carbon::parse($invoice->created_at)->timestamp.'.pdf']; } return response()->json([ 'status' => 'success', 'url' => $proforma['url'] ], 200); } public function setAsActive(Request $request) { $charges = []; try { $charges = Stripe::charges()->all(['payment_intent' => $request->result['paymentIntent']['id']]); } catch (\Cartalyst\Stripe\Exception\CardErrorException $e) { Log::critical('nu am primit charge-uri'); } $charge_id = 'stripe_payment_id'; if($charges && $charges['data'] && $charges['data'][0]){ $charge_id = $charges['data'][0]['id']; } $instance = Auth::user()->instance; $user = $instance->users->first(); $randPassword = Str::random(8); $user->password = bcrypt($randPassword); $user->save(); $alreadyregisteredInLearn = learworldsInit($user, $randPassword); newUserCreatedMail($user, $randPassword, $alreadyregisteredInLearn); // $phone_number = $user->phone; // if($phone_number){ // $phone_number = str_replace(" ","",$phone_number); // if(!Str::startsWith($phone_number,"+4") || !Str::startsWith($phone_number, '004')){ // $phone_number = "+4".$phone_number; // } // $text = 'Am trimis pe email date de acces la cursul “Best of Cazanescu”. Cauta si in spam. Pentru orice problema scrie la contact@tbf.ro'; // $accessToken = $responseToken['access_token']; // $r = sendSmsToClient($phone_number, $text, $accessToken); // } // se genereaza factura $invoice = InvoiceRepository::generateInvoice( $instance->id, $instance->package->price_in_ron, 'paid', $charge_id, 'RON', $user->email ); $instance->update([ 'status' => Instance::STATUS_ACTIVE, 'first_payment' => 0, ]); // add user with tag in active campaign createCronjobActiveCampaign(Auth::user(), $instance->package->id == 28 ? 'best_of_cazanescu' : 'kit_comunicare_tbf'); return response()->json([ 'status' => 'success' ], 200); } // This request is used for step 3 from register when you want to create the subscription public function createPayment(Request $request) { $instance = Auth::user()->instance; $package = $instance->package; // From here you can get testing cards: https://stripe.com/docs/testing#international-cards $request->validate([ 'number' => 'required', 'exp_month' => 'required', 'cvc' => 'required', 'exp_year' => 'required' ]); // check if there is a card already added $stripeCustomerCurrentCards = Stripe::cards()->all($instance->stripe_customer_id); foreach($stripeCustomerCurrentCards['data'] as $stripeCustomerCurrentCard){ $delCard = Stripe::cards()->delete($instance->stripe_customer_id, $stripeCustomerCurrentCard['id']); } // check if there is a subscription already added $stripeCustomerCurrentSubscriptions = Stripe::subscriptions()->all($instance->stripe_customer_id); foreach($stripeCustomerCurrentSubscriptions['data'] as $stripeCustomerCurrentSubscription){ $delSub = Stripe::subscriptions()->cancel($instance->stripe_customer_id, $stripeCustomerCurrentSubscription['id']); } // add card in STRIPE try { $token = Stripe::tokens()->create([ 'card' => $request->only(['number','exp_month','cvc','exp_year']) ]); } catch (\Cartalyst\Stripe\Exception\CardErrorException $e) { $instance->update(['status' => Instance::STATUS_NEW]); return response()->json([ 'status' => 'error', 'message' => cardErrorTranslated($e), ], 500); } // add card to Customer try { $card = Stripe::cards()->create($instance->stripe_customer_id, $token['id']); } catch (\Cartalyst\Stripe\Exception\CardErrorException $e) { $instance->update(['status' => Instance::STATUS_NEW]); return response()->json([ 'status' => 'error', 'message' => cardErrorTranslated($e), ], 500); } try { $token = Stripe::tokens()->create([ 'card' => $request->only(['number','exp_month','cvc','exp_year']) ]); } catch (\Cartalyst\Stripe\Exception\CardErrorException $e) { $instance->update(['status' => Instance::STATUS_NEW]); return response()->json([ 'status' => 'error', 'message' => cardErrorTranslated($e), ], 500); } // create subscription based with customer card and selected plan try { $pi = Stripe::paymentIntents()->create([ 'amount' => $instance->country->iso == "RO" ? $instance->package->price_in_ron : $instance->package->price_in_euro, 'currency' => $instance->country->iso == "RO" ? "RON" : "EUR", 'payment_method_types' => ['card'], 'capture_method' => 'automatic', 'metadata[email]' => Auth::user()->email, 'metadata[course_name]' => $instance->package->learn_world_course_slug ]); } catch (\Cartalyst\Stripe\Exception\CardErrorException $e) { $instance->update(['status' => Instance::STATUS_NEW]); Log::critical("Instance_id: ".$instance->id." trebuie sa trimitem email cu proforma deoarece nu poate sa plateasca cu cardul."); newUserCantPay(Auth::user()); return response()->json([ 'status' => 'error', 'message' => cardErrorTranslated($e), ], 500); } Log::critical($pi); if($pi['status'] != 'active' && $pi['status'] != 'requires_payment_method'){ Log::critical("Instance_id: ".$instance->id." trebuie sa trimitem email cu proforma deoarece nu poate sa plateasca cu cardul."); newUserCantPay(Auth::user()); } if($pi['status'] == 'requires_payment_method'){ return response()->json([ 'status' => 'error', 'payment_intent' => $pi, 't_id' => $token['id'], 'message' => "A aparut o eroare. Te rugam sa incerci mai tarziu.", ], 500); } $instance->update([ 'status' => Instance::STATUS_ACTIVE, 'first_payment' => 0, ]); // add user with tag in active campaign createCronjobActiveCampaign(Auth::user(), 'platforma_cursuri'); return response()->json([ 'status' => 'success' ], 200); } // This call is used when you want to view your card details used for this soft public function cardDetails() { $instance = Auth::user()->instance; $stripe_customer_current_card = Stripe::cards()->all($instance->stripe_customer_id)['data'][0]; return response()->json(Arr::only($stripe_customer_current_card, ['brand', 'last4', 'exp_month', 'exp_year'])); } // This call is used when you want to change your card details public function changeCard(Request $request) { $instance = Auth::user()->instance; $request->validate([ 'number' => 'required', 'exp_month' => 'required', 'cvc' => 'required', 'exp_year' => 'required' ]); $stripeCustomerCurrentCards = Stripe::cards()->all($instance->stripe_customer_id); // add card in STRIPE try { $token = Stripe::tokens()->create([ 'card' => $request->only(['number','exp_month','cvc','exp_year']) ]); } catch (\Cartalyst\Stripe\Exception\CardErrorException $e) { return response()->json([ 'status' => 'error', 'message' => cardErrorTranslated($e), ], 500); } // add card to Customer try { $card = Stripe::cards()->create($instance->stripe_customer_id, $token['id']); } catch (\Cartalyst\Stripe\Exception\CardErrorException $e) { return response()->json([ 'status' => 'error', 'message' => cardErrorTranslated($e), ], 500); } // Delete old card foreach($stripeCustomerCurrentCards['data'] as $stripeCustomerCurrentCard){ $delCard = Stripe::cards()->delete($instance->stripe_customer_id, $stripeCustomerCurrentCard['id']); } return response()->json([ 'status' => 'success' ], 200); } // This call is used when you want to change your card details public function listInvoices() { $instance = Auth::user()->instance; $stripe_customer_invoices = Stripe::invoices()->all([ 'customer' => $instance->stripe_customer_id, 'status' => 'paid' ]); $invoices = []; foreach($stripe_customer_invoices['data'] as $invoice){ $invoices[] = [ 'invoice_number' => $invoice['number'], 'amount_paid' => $invoice['amount_paid'] / 100, 'currency' => strtoupper($invoice['currency']), 'created' => Carbon::parse($invoice['created']), 'download_link' => $invoice['invoice_pdf'] ]; } return response()->json($invoices); } // Upgrade/downgrade la subscription public function changePlanAccount(Request $request) { $package = Package::where('token', $request->package_token)->first(); $instance = Auth::user()->instance; $discount_code_id = null; if($instance->voucher_id){ $voucher = $instance->voucher; if($voucher->discount_full == false && $voucher->name != "digital50" && Carbon::parse($instance->created_at)->year < 2021){ $voucher = Voucher::where('name','digital50')->first(); $instance->update([ 'voucher_id' => $voucher->id ]); } if($voucher){ switch ($package->name) { case "Profesional": $discount_code_id = $instance->country->iso == "RO" ? $voucher->stripe_dc_id_pr : $voucher->stripe_dc_id_pe; break; case "Startup": $discount_code_id = $instance->country->iso == "RO" ? $voucher->stripe_dc_id_sr : $voucher->stripe_dc_id_se; break; } } } try { $subscriptions = Stripe::subscriptions()->all($instance->stripe_customer_id); } catch (\Cartalyst\Stripe\Exception\InvalidRequestException $e) { return response()->json([ 'status' => 'error', 'message' => cardErrorTranslated($e), ], 500); } $subscription = Stripe::subscriptions()->update($instance->stripe_customer_id, $subscriptions['data'][0]['id'], [ 'plan' => $instance->country->iso == "RO" ? $package->ron_plan_id : $package->euro_plan_id, 'prorate' => true, 'coupon' => $discount_code_id ]); $instance->package_id = $package->id; $instance->save(); return response()->json($package); } public function webhookRecurrence(Request $request) { $invoice = $request->data['object']; $instance = Instance::where('stripe_customer_id', $invoice['customer'])->first(); if($instance && $invoice['amount_remaining'] == 0){ $instance->update(['status' => Instance::STATUS_ACTIVE]); // add user with tag in active campaign createCronjobActiveCampaign($instance->users->first(), 'tbf_digital_antreprenor'); }else{ $customerInvoices = Stripe::invoices()->all(['customer' => $instance->stripe_customer_id]); if($invoice['attempt_count'] == 1 && !empty($customerInvoices['data'])){ $instance->update([ 'status' => Instance::STATUS_GRACE_PERIOD, 'grace_period_date' => Carbon::today()->toDateString(), ]); } } return response()->json([ 'status' => 'success', ], 200); } public function webhookPayOuts(Request $request) { Log::critical('payouts.created'); $payout_id = $request->data['object']['id']; $transactions = Stripe::balanceTransactions()->all(['payout' => $payout_id]); Log::critical($transactions); Log::critical('END --------------payouts.created'); } public function sendInvoice(Request $request) { $instance = Instance::where('stripe_customer_id', $request->data['object']['customer'])->first(); if($instance){ // send mail to instance notifications users $subject = __('general.new_invoice_created.subject'); $data = [ 'invoice_url' => $request->data['object']['hosted_invoice_url'], 'created_at' => Carbon::createFromTimestamp($request->data['object']['created'])->isoFormat('DD/MM/Y'), ]; foreach($instance->instance_notifications as $instanceNotification){ try{ Mail::to($instanceNotification->email)->queue(New NewInvoiceCreated($subject, $data)); }catch(\Exception $e){ // } } } return response()->json([ 'status' => 'success', 'invoice_customer_id'=> $request->data['object']['customer'] ], 200); } public function getReferralCoupon(Request $request) { $is_valid = false; $values = []; $couponCode = null; if($request->referral_id){ $instance_referral = Instance::where('referral_uuid',$request->referral_id)->first(); }else{ $instance_referral = Instance::where('id',$request->instance_id)->first(); } if($instance_referral && $instance_referral->voucher_id){ // Verificam daca trebuie pus un cod de reducere pt referral if($request->referral_id){ $voucher = Voucher::where('name','digital50')->first(); $couponCode = 'digital50'; }else{ $voucher = $instance_referral->voucher; if($voucher->discount_full == false && $voucher->name != "digital50" && Carbon::parse($instance_referral->created_at)->year < 2021){ $voucher = Voucher::where('name','digital50')->first(); $instance_referral->update([ 'voucher_id' => $voucher->id ]); } $couponCode = $voucher->name; } $db_coupons = [$voucher->stripe_dc_id_se, $voucher->stripe_dc_id_pe]; $is_valid = true; $packages = Package::where('display_for_subscription',1)->get(); try { $coupons = Stripe::coupons()->all(["limit" => 100]); } catch (\Cartalyst\Stripe\Exception\InvalidRequestException $e) { return response()->json([ 'status' => 'error', 'message' => $e, ], 500); } foreach ($coupons['data'] as $coupon) { if($coupon['valid'] && in_array($coupon['id'], $db_coupons)){ switch ($coupon['id']) { case $voucher->stripe_dc_id_se: $values[] = calculateDiscountBasedOnVoucher($coupon, 'Startup', 'EUR'); break; case $voucher->stripe_dc_id_pe: $resp = calculateDiscountBasedOnVoucher($coupon, 'Profesional', 'EUR'); $values[] = $resp; break; } } } if(empty($values)){ $is_valid = false; } } return response()->json([ 'status' => 'success', 'is_valid' => $is_valid, 'values' => $values, 'couponCode' => $couponCode ], 200); } public function validateCoupon(Request $request) { $is_valid = false; $values = []; $voucher = Voucher::where('name',$request->coupon)->first(); if($voucher){ $db_coupons = [$voucher->stripe_dc_id_se, $voucher->stripe_dc_id_pe]; $is_valid = true; $packages = Package::where('display_for_subscription',1)->get(); try { $coupons = Stripe::coupons()->all(["limit" => 100]); } catch (\Cartalyst\Stripe\Exception\InvalidRequestException $e) { return response()->json([ 'status' => 'error', 'message' => $e, ], 500); } foreach ($coupons['data'] as $coupon) { if($coupon['valid'] && in_array($coupon['id'], $db_coupons)){ switch ($coupon['id']) { case $voucher->stripe_dc_id_se: $values[] = calculateDiscountBasedOnVoucher($coupon, 'Startup', 'EUR'); break; case $voucher->stripe_dc_id_pe: $resp = calculateDiscountBasedOnVoucher($coupon, 'Profesional', 'EUR'); $values[] = $resp; break; } } } if(empty($values)){ $is_valid = false; } } return response()->json([ 'status' => 'success', 'is_valid' => $is_valid, 'values' => $values, 'coupon' => $coupons['data'], 'db_coupons' => $db_coupons ], 200); } public function subscriptionDeleted(Request $request) { $instance = Instance::where('stripe_customer_id', $request->data['object']['customer'])->first(); $canceledSubscriptionId = $request->data['object']['id']; if($instance){ try { $subscriptions = Stripe::subscriptions()->all($instance->stripe_customer_id); } catch (\Cartalyst\Stripe\Exception\InvalidRequestException $e) { return response()->json([ 'status' => 'error', 'message' => cardErrorTranslated($e), ], 500); } $activeSubscriptions = 0; if($subscriptions){ foreach ($subscriptions['data'] as $subscription) { if($subscription['status'] == 'active' && $subscription['id'] != $canceledSubscriptionId){ $activeSubscriptions += 1; } } } if($activeSubscriptions == 0){ $instance->update([ 'status' => Instance::STATUS_UNPAID, 'grace_period_date' => null, ]); // add user with tag in active campaign createCronjobActiveCampaign($instance->users->first(), 'tbf_digital_client_reziliat'); } } return response()->json([ 'status' => 'success', ], 200); } }
Back