Order.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace app\api\controller\order;
  3. use app\api\model\order\Cart as CartModel;
  4. use app\api\model\order\Order as OrderModel;
  5. use app\api\service\order\settled\MasterOrderSettledService;
  6. use app\api\controller\Controller;
  7. use app\api\model\settings\Message as MessageModel;
  8. use app\api\service\pay\PayService;
  9. use app\common\enum\order\OrderTypeEnum;
  10. use app\common\library\helper;
  11. use app\api\model\settings\Setting as SettingModel;
  12. /**
  13. * 普通订单
  14. */
  15. class Order extends Controller
  16. {
  17. /**
  18. * 订单确认-立即购买
  19. */
  20. public function buy()
  21. {
  22. // 立即购买:获取订单商品列表
  23. $params = json_decode($this->postData()['params'], true);
  24. $supplierData = OrderModel::getOrderProductListByNow($params);
  25. $user = $this->getUser();
  26. // 实例化订单service
  27. $orderService = new MasterOrderSettledService($user, $supplierData, $params);
  28. // 获取订单信息
  29. $orderInfo = $orderService->settlement();
  30. // 订单结算提交
  31. if ($orderService->hasError()) {
  32. return $this->renderError($orderService->getError());
  33. }
  34. if ($this->request->isGet()) {
  35. // 如果来源是小程序, 则获取小程序订阅消息id.获取支付成功,发货通知.
  36. $template_arr = MessageModel::getMessageByNameArr($params['pay_source'], ['order_pay_user', 'order_delivery_user']);
  37. //是否显示店铺信息
  38. $store_open=SettingModel::getStoreOpen();
  39. // 是否开启支付宝支付
  40. $show_alipay = PayService::isAlipayOpen($params['pay_source'], $user['app_id']);
  41. $balance = $user['balance'];
  42. return $this->renderSuccess('', compact('orderInfo', 'template_arr', 'store_open', 'show_alipay' , 'balance'));
  43. }
  44. // 创建订单
  45. $order_arr = $orderService->createOrder($orderInfo);
  46. if(!$order_arr){
  47. return $this->renderError($orderService->getError() ?: '订单创建失败');
  48. }
  49. // 构建支付请求
  50. $payment = OrderModel::onOrderPayment($user, $order_arr, $params['pay_type'], $params['pay_source']);
  51. // 返回结算信息
  52. return $this->renderSuccess(['success' => '支付成功', 'error' => '订单未支付'], [
  53. 'order_id' => helper::getArrayColumn($order_arr, 'order_id'), // 订单id
  54. 'pay_type' => $params['pay_type'], // 支付方式
  55. 'payment' => $payment, // 微信支付参数
  56. 'order_type' => OrderTypeEnum::MASTER, //订单类型
  57. ]);
  58. }
  59. /**
  60. * 订单确认-立即购买
  61. */
  62. public function cart()
  63. {
  64. // 立即购买:获取订单商品列表
  65. if ($this->request->isGet()) {
  66. $params = json_decode($this->postData()['params'], true);
  67. }else{
  68. $params = json_decode($this->postData()['params'], true);
  69. }
  70. $user = $this->getUser();
  71. // 商品结算信息
  72. $CartModel = new CartModel($user);
  73. // 购物车商品列表
  74. $supplierData = $CartModel->getList($params['cart_ids']);
  75. // 实例化订单service
  76. $orderService = new MasterOrderSettledService($user, $supplierData, $params);
  77. // 获取订单信息
  78. $orderInfo = $orderService->settlement();
  79. if ($this->request->isGet()) {
  80. // 如果来源是小程序, 则获取小程序订阅消息id.获取支付成功,发货通知.
  81. $template_arr = MessageModel::getMessageByNameArr($params['pay_source'], ['order_pay_user', 'order_delivery_user']);
  82. //是否显示店铺信息
  83. $store_open=SettingModel::getStoreOpen();
  84. // 是否开启支付宝支付
  85. $show_alipay = PayService::isAlipayOpen($params['pay_source'], $user['app_id']);
  86. $balance = $user['balance'];
  87. return $this->renderSuccess('', compact('orderInfo', 'template_arr','store_open', 'show_alipay', 'balance'));
  88. }
  89. // 订单结算提交
  90. if ($orderService->hasError()) {
  91. return $this->renderError($orderService->getError());
  92. }
  93. // 创建订单
  94. $order_arr = $orderService->createOrder($orderInfo);
  95. if(!$order_arr){
  96. return $this->renderError($orderService->getError() ?: '订单创建失败');
  97. }
  98. // 移出购物车中已下单的商品
  99. $CartModel->clearAll($params['cart_ids']);
  100. // 构建支付请求
  101. $payment = OrderModel::onOrderPayment($user, $order_arr, $params['pay_type'], $params['pay_source']);
  102. // 返回结算信息
  103. return $this->renderSuccess('', [
  104. 'order_id' => helper::getArrayColumn($order_arr, 'order_id'), // 订单id
  105. 'pay_type' => $params['pay_type'], // 支付方式
  106. 'payment' => $payment, // 微信支付参数
  107. 'order_type' => OrderTypeEnum::MASTER, //订单类型
  108. ]);
  109. }
  110. }