Order.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. /**
  11. * 普通订单
  12. */
  13. class Order extends Controller
  14. {
  15. /**
  16. * 订单确认-立即购买
  17. */
  18. public function buy()
  19. {
  20. // 立即购买:获取订单商品列表
  21. $params = $this->request->param();
  22. // $params = array(
  23. // 'delivery' =>0,
  24. // 'store_id' =>'undefined',
  25. // 'coupon_id' => 6,
  26. // 'is_use_points' =>1,
  27. // 'phone'=>null,
  28. // 'linkman' =>null,
  29. // 'remark' =>'',
  30. // 'pay_type' => 10,
  31. // 'pay_source' =>'h5',
  32. // 'product_id' => 33,
  33. // 'product_num' => 2,
  34. // 'product_sku_id' => 2,
  35. // );
  36. // p($params);
  37. $productList = OrderModel::getOrderProductListByNow($params);
  38. $user = $this->getUser();
  39. // 实例化订单service
  40. $orderService = new MasterOrderSettledService($user, $productList, $params);
  41. // 获取订单信息
  42. $orderInfo = $orderService->settlement();
  43. // p($orderInfo);
  44. if ($this->request->isGet()) {
  45. // 如果来源是小程序, 则获取小程序订阅消息id.获取支付成功,发货通知.
  46. $template_arr = MessageModel::getMessageByNameArr($params['pay_source'], ['order_pay_user', 'order_delivery_user']);
  47. // 是否开启支付宝支付
  48. $show_alipay = PayService::isAlipayOpen($params['pay_source'], $user['app_id']);
  49. // 用户余额
  50. $balance = $user['balance'];
  51. return $this->renderSuccess('', compact('orderInfo', 'template_arr', 'show_alipay', 'balance'));
  52. }
  53. // 订单结算提交
  54. if ($orderService->hasError()) {
  55. return $this->renderError($orderService->getError());
  56. }
  57. // 创建订单
  58. $order_id = $orderService->createOrder($orderInfo);
  59. if(!$order_id){
  60. return $this->renderError($orderService->getError() ?: '订单创建失败');
  61. }
  62. // 构建支付请求
  63. $payment = OrderModel::onOrderPayment($user, $orderService->model, $params['pay_type'], $params['pay_source']);
  64. log_write(json_encode($payment));
  65. // 记录发起支付
  66. log_write(sprintf('build order buy request. [buy] order_no[%s]', $order_id));
  67. // 返回结算信息
  68. return $this->renderSuccess(['success' => '支付成功', 'error' => '订单未支付'], [
  69. 'order_id' => $order_id, // 订单id
  70. 'pay_type' => $params['pay_type'], // 支付方式
  71. 'payment' => $payment, // 微信支付参数
  72. 'order_type' => OrderTypeEnum::MASTER, //订单类型
  73. ]);
  74. }
  75. /**
  76. * 订单确认-立即购买
  77. */
  78. public function cart()
  79. {
  80. // 立即购买:获取订单商品列表
  81. $params = $this->request->param();
  82. $user = $this->getUser();
  83. // 商品结算信息
  84. $CartModel = new CartModel($user);
  85. // 购物车商品列表
  86. $productList = $CartModel->getList($params['cart_ids']);
  87. // p($productList);
  88. // 实例化订单service
  89. $orderService = new MasterOrderSettledService($user, $productList, $params);
  90. // 获取订单信息
  91. $orderInfo = $orderService->settlement();
  92. if ($this->request->isGet()) {
  93. // 如果来源是小程序, 则获取小程序订阅消息id.获取支付成功,发货通知.
  94. $template_arr = MessageModel::getMessageByNameArr($params['pay_source'], ['order_pay_user', 'order_delivery_user']);
  95. // 是否开启支付宝支付
  96. $show_alipay = PayService::isAlipayOpen($params['pay_source'], $user['app_id']);
  97. // 用户余额
  98. $balance = $user['balance'];
  99. return $this->renderSuccess('', compact('orderInfo', 'template_arr', 'show_alipay', 'balance'));
  100. }
  101. // 订单结算提交
  102. if ($orderService->hasError()) {
  103. return $this->renderError($orderService->getError());
  104. }
  105. // 创建订单
  106. $order_id = $orderService->createOrder($orderInfo);
  107. if(!$order_id){
  108. return $this->renderError($orderService->getError() ?: '订单创建失败');
  109. }
  110. // 移出购物车中已下单的商品
  111. $CartModel->clearAll($params['cart_ids']);
  112. // 构建支付请求
  113. $payment = OrderModel::onOrderPayment($user, $orderService->model, $params['pay_type'], $params['pay_source']);
  114. // 记录发起支付
  115. log_write(sprintf('build order buy request. order_no[%s]', $order_id));
  116. // 返回结算信息
  117. return $this->renderSuccess('', [
  118. 'order_id' => $orderService->model['order_id'], // 订单id
  119. 'pay_type' => $params['pay_type'], // 支付方式
  120. 'payment' => $payment, // 微信支付参数
  121. 'order_type' => OrderTypeEnum::MASTER, //订单类型
  122. ]);
  123. }
  124. }