Order.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace app\api\controller\plus\points;
  3. use app\api\model\plus\points\Product as ProductModel;
  4. use app\api\service\order\settled\PointsOrderSettledService;
  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\api\service\pay\PayService;
  9. use app\common\enum\order\OrderTypeEnum;
  10. use app\common\library\helper;
  11. /**
  12. * 积分商城兑换订单
  13. */
  14. class Order extends Controller
  15. {
  16. /**
  17. * 订单确认
  18. */
  19. public function buy()
  20. {
  21. // 积分商城兑换订单:获取订单商品列表
  22. $params = json_decode($this->postData()['params'], true);
  23. $supplierData = ProductModel::getPointsProduct($params);
  24. $user = $this->getUser();
  25. // 实例化订单service
  26. $orderService = new PointsOrderSettledService($user, $supplierData, $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. // 是否开启支付宝支付
  33. $show_alipay = PayService::isAlipayOpen($params['pay_source'], $user['app_id']);
  34. $balance = $user['balance'];
  35. return $this->renderSuccess('', compact('orderInfo', 'template_arr', 'show_alipay', 'balance'));
  36. }
  37. // 订单结算提交
  38. if ($orderService->hasError()) {
  39. return $this->renderError($orderService->getError());
  40. }
  41. // 创建订单
  42. $order_arr = $orderService->createOrder($orderInfo);
  43. if(!$order_arr){
  44. return $this->renderError($orderService->getError() ?: '订单创建失败');
  45. }
  46. // 构建支付请求
  47. $payment = OrderModel::onOrderPayment($user, $order_arr, $params['pay_type'], $params['pay_source']);
  48. // 返回结算信息
  49. return $this->renderSuccess(['success' => '支付成功', 'error' => '订单未支付'], [
  50. 'order_id' => helper::getArrayColumn($order_arr, 'order_id'), // 订单id
  51. 'pay_type' => $params['pay_type'], // 支付方式
  52. 'payment' => $payment, // 微信支付参数
  53. 'order_type' => OrderTypeEnum::MASTER, //订单类型
  54. ]);
  55. }
  56. }