Order.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace app\api\controller\plus\seckill;
  3. use app\api\model\plus\seckill\Product as ProductModel;
  4. use app\api\service\order\settled\SeckillOrderSettledService;
  5. use app\api\controller\Controller;
  6. use app\api\model\settings\Message as MessageModel;
  7. use app\api\model\order\Order as OrderModel;
  8. use app\common\enum\order\OrderTypeEnum;
  9. use app\common\enum\settings\SettingEnum;
  10. use app\common\model\settings\Setting;
  11. /**
  12. * 限时秒杀订单
  13. */
  14. class Order extends Controller
  15. {
  16. /**
  17. * 订单确认
  18. */
  19. public function buy()
  20. {
  21. // 限时秒杀订单:获取订单商品列表
  22. $params = $this->request->param();
  23. $productList = ProductModel::getSeckillProduct($params);
  24. $user = $this->getUser();
  25. // 实例化订单service
  26. $orderService = new SeckillOrderSettledService($user, $productList, $params);
  27. // 获取订单信息
  28. $orderInfo = $orderService->settlement();
  29. if ($this->request->isGet()) {
  30. // 如果来源是小程序, 则获取小程序订阅消息id.获取支付成功,发货通知.
  31. $template_arr = MessageModel::getMessageByNameArr($params['pay_source'], ['order_pay_user', 'order_delivery_user']);
  32. // 是否开启h5支付宝支付
  33. $h5_alipay = Setting::getItem(SettingEnum::H5ALIPAY)['is_open'];
  34. // 用户余额
  35. $balance = $user['balance'];
  36. return $this->renderSuccess('', compact('orderInfo', 'template_arr', 'h5_alipay', 'balance'));
  37. }
  38. // 订单结算提交
  39. if ($orderService->hasError()) {
  40. return $this->renderError($orderService->getError());
  41. }
  42. // 创建订单
  43. $order_id = $orderService->createOrder($orderInfo);
  44. if (!$order_id) {
  45. return $this->renderError($orderService->getError() ?: '订单创建失败');
  46. }
  47. // 构建支付请求
  48. $payment = OrderModel::onOrderPayment($user, $orderService->model, $params['pay_type'], $params['pay_source']);
  49. // 返回结算信息
  50. return $this->renderSuccess(['success' => '支付成功', 'error' => '订单未支付'], [
  51. 'order_id' => $order_id, // 订单id
  52. 'pay_type' => $params['pay_type'], // 支付方式
  53. 'payment' => $payment, // 微信支付参数
  54. 'order_type' => OrderTypeEnum::MASTER, //订单类型
  55. ]);
  56. }
  57. }