My SMM panel
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

BillingController.php 2.6 KiB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Stripe\Stripe;
  5. use Stripe\Customer;
  6. use Stripe\PaymentIntent;
  7. use Stripe\PaymentMethod;
  8. use Illuminate\Support\Facades\Log;
  9. use Illuminate\Support\Facades\Auth;
  10. use App\Models\Transaction;
  11. class BillingController extends Controller
  12. {
  13. //Expects an array 'packs' representing the amount of each multiple of credits.
  14. //This controller should have a way of figuring out how much of each pack
  15. //was bought later.
  16. //Should validate that all amounts are positive integers in a reasonable range
  17. public function secret(Request $request) {
  18. Stripe::setApiKey(env('STRIPE_SECRET'));
  19. $amount = $request->packs[ 'credits10' ]*1099 +
  20. $request->packs[ 'credits50' ]*5499 + $request->packs[ 'credits100' ]*10999
  21. + $request->packs[ 'credits1000' ]*101000;
  22. $transaction = new Transaction;
  23. $transaction->credits = $request->packs['credits10']*10 +
  24. $request->packs['credits50']*50 +
  25. $request->packs['credits100']*100 +
  26. $request->packs['credits1000']*1000;
  27. $transaction->credits_extra =
  28. $request->packs['credits50']*5 +
  29. $request->packs['credits100']*10 +
  30. $request->packs['credits1000']*150;
  31. $transaction->user_id = Auth::user()->id;
  32. $transaction->charge = $amount;
  33. $transaction->status = 'processing';
  34. $transaction->completed = false;
  35. $total_credits = $transaction->credits + $transaction->credits_extra;
  36. $intent = PaymentIntent::create([
  37. 'amount' => $amount,
  38. 'currency' => 'usd',
  39. 'customer' => Auth::user()->customer_id,
  40. 'description' => "You have received $total_credits credits.",
  41. 'receipt_email' => Auth::user()->email,
  42. 'metadata' => ['transaction_id' => $transaction->id]
  43. ]);
  44. $transaction->intent_id = $intent->id;
  45. $transaction->save();
  46. return $intent->client_secret;
  47. }
  48. public function getCards() {
  49. Stripe::setApiKey(env('STRIPE_SECRET'));
  50. return PaymentMethod::all([
  51. 'customer' => Auth::user()->customer_id,
  52. 'type' => 'card'
  53. ]);
  54. }
  55. public function chargeEvent(Request $request) {
  56. Stripe::setApiKey(env('STRIPE_SECRET'));
  57. $event = \Stripe\Event::constructFrom($request->all());
  58. $charge = $event->data->object;
  59. $transaction = Transaction::where('intent_id', $charge->payment_intent);
  60. $user = $transaction->user;
  61. if ($event->type == 'charge.succeeded') {
  62. Log::debug($charge->metadata['transaction_id']);
  63. $user->credits = $user->credits + $transaction->credits + $transaction->credits_extra;
  64. $transaction->status = 'completed';
  65. $transaction->completed = true;
  66. $user->save();
  67. $transaction->save();
  68. } else {
  69. $transaction->status = $charge->status;
  70. $transaction->save();
  71. }
  72. }
  73. }