My SMM panel
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 
 

125 Zeilen
3.5 KiB

  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. protected $stripe;
  14. protected $user;
  15. public function __construct() {
  16. $this->stripe = new \Stripe\StripeClient(env('STRIPE_SECRET'));
  17. Stripe::setApiKey(env('STRIPE_SECRET'));
  18. $this->user = Auth::user();
  19. }
  20. //Expects an array 'packs' representing the amount of each multiple of credits.
  21. //This controller should have a way of figuring out how much of each pack
  22. //was bought later.
  23. //Should validate that all amounts are positive integers in a reasonable range
  24. public function secret(Request $request) {
  25. Stripe::setApiKey(env('STRIPE_SECRET'));
  26. $user = Auth::user();
  27. $amount = $request->packs[ 'credits10' ]*1099 +
  28. $request->packs[ 'credits50' ]*5499 + $request->packs[ 'credits100' ]*10999
  29. + $request->packs[ 'credits1000' ]*101000;
  30. $transaction = new Transaction;
  31. $transaction->credits = $request->packs['credits10']*10 +
  32. $request->packs['credits50']*50 +
  33. $request->packs['credits100']*100 +
  34. $request->packs['credits1000']*1000;
  35. $transaction->credits_extra =
  36. $request->packs['credits50']*5 +
  37. $request->packs['credits100']*10 +
  38. $request->packs['credits1000']*150;
  39. $transaction->user_id = $user->id;
  40. $transaction->charge = $amount;
  41. $transaction->status = 'processing';
  42. $transaction->completed = false;
  43. $total_credits = $transaction->credits + $transaction->credits_extra;
  44. $intent = PaymentIntent::create([
  45. 'amount' => $amount,
  46. 'currency' => 'usd',
  47. 'customer' => $user->customer_id,
  48. 'description' => "You have received $total_credits credits.",
  49. 'receipt_email' => Auth::user()->email,
  50. 'metadata' => ['transaction_id' => $transaction->id]
  51. ]);
  52. $transaction->intent_id = $intent->id;
  53. //Save the card as a default if none is set and it was selected
  54. if ($user->payment_method == null && $request->card) {
  55. $this->changeDefaultCard($request->card);
  56. }
  57. $transaction->save();
  58. return $intent->client_secret;
  59. }
  60. public function getCards() {
  61. Stripe::setApiKey(env('STRIPE_SECRET'));
  62. return PaymentMethod::all([
  63. 'customer' => Auth::user()->customer_id,
  64. 'type' => 'card'
  65. ]);
  66. }
  67. public function chargeEvent(Request $request) {
  68. Stripe::setApiKey(env('STRIPE_SECRET'));
  69. $event = \Stripe\Event::constructFrom($request->all());
  70. $charge = $event->data->object;
  71. $transaction = Transaction::where('intent_id', $charge->payment_intent);
  72. $user = $transaction->user;
  73. if ($event->type == 'charge.succeeded') {
  74. $user->credits = $user->credits + $transaction->credits + $transaction->credits_extra;
  75. $transaction->status = 'completed';
  76. $transaction->completed = true;
  77. $user->save();
  78. $transaction->save();
  79. } else {
  80. $transaction->status = $charge->status;
  81. $transaction->save();
  82. }
  83. }
  84. public function changeDefaultCard(String $card) {
  85. $user = Auth::user();
  86. $user->payment_method = $card;
  87. $user->save();
  88. $cards = $this->getCards();
  89. return PaymentMethod::all([
  90. 'customer' => Auth::user()->customer_id,
  91. 'type' => 'card'
  92. ]);
  93. }
  94. public function deleteCard(Request $request) {
  95. $this->stripe->paymentMethods->detach($request->card);
  96. $user = Auth::user();
  97. if ($request->card == $user->payment_method) {
  98. $user->payment_method = null;
  99. $user->save();
  100. }
  101. return ($this->getCards());
  102. }
  103. }