My SMM panel
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

84 řádky
2.4 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. //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. $intent = PaymentIntent::create([
  36. 'amount' => $amount,
  37. 'currency' => 'usd',
  38. 'customer' => Auth::user()->customer_id,
  39. 'metadata' => ['transaction_id' => $transaction->id]
  40. ]);
  41. $transaction->intent_id = $intent->id;
  42. $transaction->save();
  43. return $intent->client_secret;
  44. }
  45. public function getCards() {
  46. Stripe::setApiKey(env('STRIPE_SECRET'));
  47. return PaymentMethod::all([
  48. 'customer' => Auth::user()->customer_id,
  49. 'type' => 'card'
  50. ]);
  51. }
  52. public function chargeEvent(Request $request) {
  53. Stripe::setApiKey(env('STRIPE_SECRET'));
  54. $event = \Stripe\Event::constructFrom($request->all());
  55. $charge = $event->data->object;
  56. $transaction = Transaction::where('intent_id', $charge->payment_intent);
  57. $user = $transaction->user;
  58. if ($event->type == 'charge.succeeded') {
  59. Log::debug($charge->metadata['transaction_id']);
  60. $user->credits = $user->credits + $transaction->credits + $transaction->credits_extra;
  61. $transaction->status = 'completed';
  62. $transaction->completed = true;
  63. $user->save();
  64. $transaction->save();
  65. } else {
  66. $transaction->status = $charge->status;
  67. $transaction->save();
  68. }
  69. }
  70. }