PaymentService.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace App\Services\Client;
  3. use App\Models\Order;
  4. use App\Models\MemberUser;
  5. use Illuminate\Support\Facades\Auth;
  6. use Exception;
  7. class PaymentService
  8. {
  9. /**
  10. * 获取支付配置
  11. *
  12. * @param int $orderId 订单编号
  13. * @return array
  14. * @throws Exception
  15. */
  16. public function getPaymentConfig($orderId)
  17. {
  18. // 获取当前用户
  19. $userId = Auth::id();
  20. $user = MemberUser::where('state', 'enable')->findOrFail($userId);
  21. // 查询订单
  22. $order = Order::where('id', $orderId)
  23. ->where('user_id', $userId)
  24. ->where('state', 'unpaid')
  25. ->firstOrFail();
  26. // 生成微信支付配置
  27. $outTradeNo = $this->generateOutTradeNo();
  28. $config = $this->generateWxPayConfig($order, $outTradeNo);
  29. // 更新订单外部交易号
  30. $order->out_trade_no = $outTradeNo;
  31. $order->save();
  32. // 发送抢单通知
  33. $this->sendGrabOrderNotification($order);
  34. return $config;
  35. }
  36. /**
  37. * 生成外部交易号
  38. */
  39. private function generateOutTradeNo()
  40. {
  41. return date('YmdHis') . mt_rand(1000, 9999);
  42. }
  43. /**
  44. * 生成微信支付配置
  45. */
  46. private function generateWxPayConfig($order, $outTradeNo)
  47. {
  48. // TODO: 对接微信支付,生成JSAPI支付配置
  49. return [
  50. 'appId' => config('wechat.payment.app_id'),
  51. 'timeStamp' => time(),
  52. 'nonceStr' => uniqid(),
  53. 'package' => 'prepay_id=xxx',
  54. 'signType' => 'MD5',
  55. 'paySign' => 'xxx'
  56. ];
  57. }
  58. /**
  59. * 发送抢单通知
  60. */
  61. private function sendGrabOrderNotification($order)
  62. {
  63. // TODO: 对接极光推送,发送抢单通知
  64. }
  65. }