PaymentService.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace App\Services;
  3. use App\Models\Payment;
  4. use App\Models\PaymentCallback;
  5. use App\Notifications\PaymentReceived;
  6. use Str;
  7. class PaymentService
  8. {
  9. final public function createPayment(int $uid, int $oid, float|int $amount): Payment
  10. {
  11. $payment = new Payment();
  12. $payment->trade_no = Str::random(8);
  13. $payment->user_id = $uid;
  14. $payment->order_id = $oid;
  15. $payment->amount = $amount;
  16. $payment->save();
  17. return $payment;
  18. }
  19. /**
  20. * @param string $trade_no 本地订单号
  21. * @param string $out_trade_no 外部订单号
  22. * @param float|int $amount 交易金额
  23. */
  24. final protected function createPaymentCallback(string $trade_no, string $out_trade_no, float|int $amount): int
  25. {
  26. $log = new PaymentCallback();
  27. $log->trade_no = $trade_no;
  28. $log->out_trade_no = $out_trade_no;
  29. $log->amount = $amount;
  30. return $log->save();
  31. }
  32. protected function paymentReceived(string $tradeNo): bool
  33. {
  34. $payment = Payment::whereTradeNo($tradeNo)->with('order')->first();
  35. if ($payment) {
  36. $ret = $payment->order->complete();
  37. if ($ret) {
  38. $payment->user->notify(new PaymentReceived($payment->order->sn, $payment->amount_tag));
  39. }
  40. return $ret;
  41. }
  42. return false;
  43. }
  44. }