Order.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. namespace app\controller\merchant;
  3. use app\extra\basic\Base;
  4. use app\extra\service\saas\OrderService;
  5. use app\middleware\AuthMiddleware;
  6. use app\model\saas\SaasOrder;
  7. use app\model\saas\SaasOrderDetail;
  8. use app\model\saas\SaasUser;
  9. use app\model\saas\SaasUserLog;
  10. use DI\Attribute\Inject;
  11. use LinFly\Annotation\Route\Controller;
  12. use LinFly\Annotation\Route\Middleware;
  13. use LinFly\Annotation\Route\Route;
  14. use support\Request;
  15. use support\Response;
  16. use think\facade\Db;
  17. #[Controller(prefix: "/api/mer/order"),Middleware(AuthMiddleware::class)]
  18. class Order extends Base
  19. {
  20. #[Inject]
  21. protected OrderService $service;
  22. #[Inject]
  23. protected SaasOrder $model;
  24. #[Route(path: "list",methods: "get")]
  25. public function getPriceList(Request $request): Response
  26. {
  27. try {
  28. $param = $request->get();
  29. if (empty($param['shop'])) {
  30. $param['shop'] = $request->user['agent_id'];
  31. }
  32. if (empty($param['status'])) $param['statusGt'] = 1;
  33. $list = $this->service->getList($param);
  34. return successTrans("success.data",pageFormat($list),200);
  35. } catch (\Throwable $throwable) {
  36. return error($throwable->getMessage());
  37. }
  38. }
  39. /**
  40. * 返回统计结果
  41. * @param Request $request
  42. * @return Response
  43. */
  44. #[Route(path: "fail",methods: "post")]
  45. public function setOrderFail(Request $request): Response
  46. {
  47. try {
  48. $param = $this->_valid(['order.require' => "error"],$request->method());
  49. if (!is_array($param)) return error($param);
  50. $order = $this->model->where("order_sn",$param['order'])->findOrEmpty();
  51. if ($order->isEmpty()) return errorTrans("empty.data");
  52. $order->status = 2;
  53. $order->save();
  54. (new SaasOrderDetail)->where("order_sn",$param['order'])->update(['status' => 3]);
  55. return successTrans("success.data");
  56. } catch (\Throwable $throwable) {
  57. return error($throwable->getMessage());
  58. }
  59. }
  60. /**
  61. * 返回统计结果
  62. * @param Request $request
  63. * @return Response
  64. */
  65. #[Route(path: "total",methods: "get")]
  66. public function getTotalData(Request $request): Response
  67. {
  68. try {
  69. $param = $request->get();
  70. if (empty($param['shop'])) {
  71. $param['shop'] = $request->user['agent_id'];
  72. }
  73. $total = $this->service->getTotal($param);
  74. return successTrans("success.data",compact("total"));
  75. } catch (\Throwable $throwable) {
  76. return error($throwable->getMessage());
  77. }
  78. }
  79. /**
  80. * 申请退款
  81. * @param Request $request
  82. * @return Response
  83. */
  84. #[Route(path: "refund",methods: "post")]
  85. public function setRefund(Request $request): Response
  86. {
  87. try {
  88. $param = $this->_valid([
  89. "id.require" => trans("empty.require")
  90. ],$request->method());
  91. if (!is_array($param)) return error($param);
  92. $order = $this->model->where("id",$param['id'])->where("shop_id",$request->user['agent_id'])->findOrEmpty();
  93. if ($order->isEmpty()) return errorTrans("empty.data");
  94. if ($order['pay_type'] == 1) { // 微信退款
  95. $wechat = new \WeChat\Pay($this->getWxConfig());
  96. $resp = $wechat->createRefund([
  97. "transaction_id" => $order['transaction_id'],
  98. "out_refund_no" => $order['order_sn']."-".date("is"),
  99. "total_fee" => $order['discount'],
  100. "refund_fee" => $order['discount'],
  101. "notify_url" => 'https://panel.huiyinduo.cn/notify/refund',
  102. ]);
  103. $order->status = 4;
  104. $state = $order->save();
  105. (new SaasOrderDetail)->where("shop_id",$request->user['agent_id'])->where("order_sn",$order['order_sn'])->update(['status' => 4]);
  106. } else { // 会员卡退款
  107. $card = (new SaasUser)->where("card_no",md5($order['openid'].$request->user['agent_id']))->findOrEmpty();
  108. if ($card->isEmpty()) return error("会员不存在");
  109. $card->balance = Db::raw("balance+".$order['discount']);
  110. $card->total_consume = Db::raw("total_consume-".$order['discount']);
  111. $card->save();
  112. (new SaasUserLog)->insertGetId([
  113. "order_sn" => $order['order_sn'],
  114. "openid" => $order['openid'],
  115. "shop_id" => $order['shop_id'],
  116. "card_no" => md5($order['openid'].$order['shop_id']),
  117. "money" => $order['discount'],
  118. "type" => 2,
  119. "balance" => $card->balance,
  120. "remark" => "订单退款"
  121. ]);
  122. $order->status = 6;
  123. $state = $order->save();
  124. (new SaasOrderDetail)->where("shop_id",$request->user['agent_id'])->where("order_sn",$order['order_sn'])->update(['status' => 6]);
  125. }
  126. if (!$state) return error("申请失败");
  127. return success("申请成功");
  128. } catch (\Throwable $throwable) {
  129. echo $throwable->getLine()."\n";
  130. echo $throwable->getFile()."\n";
  131. return error($throwable->getMessage());
  132. }
  133. }
  134. protected function getWxConfig(): array
  135. {
  136. return [
  137. 'token' => 'test',
  138. 'appid' => sConf("wechat.mini_appid"),
  139. 'appsecret' => sConf("wechat.mini_secret"),
  140. 'encodingaeskey' => 'BJIUzE0gqlWy0GxfPp4J1oPTBmOrNDIGPNav1YFH5Z5',
  141. // 配置商户支付参数(可选,在使用支付功能时需要)
  142. 'mch_id' => sConf("wechat.mch_id"),
  143. 'mch_key' => sConf("wechat.mch_key"),
  144. "ssl_cer" => public_path().sConf("wechat.mch_ssl_cer"),
  145. "ssl_key" => public_path().sConf("wechat.mch_ssl_key"),
  146. ];
  147. }
  148. }