Notify.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <?php
  2. namespace app\controller\mini;
  3. use app\extra\basic\Base;
  4. use app\model\saas\SaasGoods;
  5. use app\model\saas\SaasOrderLife;
  6. use app\model\saas\SaasOrderLog;
  7. use app\model\saas\SaasStore;
  8. use LinFly\Annotation\Route\Controller;
  9. use LinFly\Annotation\Route\Route;
  10. use support\Request;
  11. use support\Response;
  12. #[Controller(prefix: "/notify")]
  13. class Notify extends Base
  14. {
  15. /**
  16. * 小程序webhook
  17. * @param Request $request
  18. * @return Response
  19. */
  20. #[Route(path: "hook/{id}",methods: "post")]
  21. public function webhook(Request $request,$id): Response
  22. {
  23. try {
  24. $param = $request->post();
  25. echo getDateFull()."==webhook==\n";
  26. print_r($param);
  27. if (empty($param['event'])) return error("参数错误");
  28. if (empty($param['content'])) return error("参数错误");
  29. switch ($param['event']) {
  30. case "verify_webhook":
  31. $return = ['challenge' => $param['content']['challenge']];
  32. break;
  33. case "life_trade_order_notify": // 支付成功
  34. $resp = json_decode($param['content'], true);
  35. if ($resp['action'] == "pay_success") {
  36. $order = (new SaasOrderLife)->where("order_id",$resp['order']['order_id'])->findOrEmpty();
  37. if ($order->isEmpty()) {
  38. $store = (new SaasStore)->where("store_id",$resp['order']['account_id'])->findOrEmpty();
  39. $order->insertGetId([
  40. "agent_id" => $store['agent_id']??'',
  41. "store_id" => $store['store_id']??'',
  42. "order_id" => $resp['order']['order_id'],
  43. "pay_amount" => $resp['order']['pay_amount'],
  44. "order_amount" => $resp['order']['original_amount'],
  45. "pay_at" => date("Y-m-d H:i:s",$resp['order']['pay_time']),
  46. "status" => 1
  47. ]);
  48. // (new SaasOrderLog)->insertGetId([
  49. // "order_id" => $resp['order']['order_id'],
  50. // "title" => "发起订单",
  51. // "remark" => "下单并完成支付"
  52. // ]);
  53. }
  54. }
  55. $return = [];
  56. break;
  57. case "life_trade_certificate_notify": // 退款
  58. $resp = json_decode($param['content'], true);
  59. if ($resp['action'] == "refund_success") {
  60. $order = (new SaasOrderLife)->where("order_id",$resp['certificate']['order_id'])->findOrEmpty();
  61. if (!$order->isEmpty()) {
  62. $order->status = 4;
  63. $order->refund_at = getDateFull();
  64. $order->save();
  65. }
  66. }
  67. $return = [];
  68. break;
  69. default:
  70. $return = [];
  71. break;
  72. }
  73. return json($return);
  74. } catch (\Throwable $e) {
  75. echo $e->getMessage()."\n";
  76. echo $e->getFile()."\n";
  77. echo $e->getLine()."\n";
  78. return error($e->getMessage());
  79. }
  80. }
  81. /**
  82. * 核销工具解决方案-spi
  83. * @param Request $request
  84. * @return Response
  85. */
  86. #[Route(path: "pay",methods: ['get','post'])]
  87. public function getPayStatue(Request $request): Response
  88. {
  89. try {
  90. if ($request->method() == "POST") {
  91. $param = $request->post();
  92. } else {
  93. $param = $request->get();
  94. }
  95. echo getDateFull()."===支付结果回调===方式{$request->method()}\n";
  96. echo getDateFull()."==支付结果回调==\n";
  97. print_r($param);
  98. return json([
  99. "err_no" => 0,
  100. "err_tips" => "success"
  101. ]);
  102. } catch (\Throwable $throwable) {
  103. return error($throwable->getMessage());
  104. }
  105. }
  106. /**
  107. * 核销工具解决方案-spi
  108. * @param Request $request
  109. * @return Response
  110. */
  111. #[Route(path: "mini",methods: ['get','post'])]
  112. public function getSpiData(Request $request): Response
  113. {
  114. try {
  115. print_r($request->rawHead());
  116. print_r($request->rawBody());
  117. if ($request->method() == "POST") {
  118. $param = $request->post();
  119. } else {
  120. $param = $request->get();
  121. }
  122. echo getDateFull()."===统一===方式{$request->method()}\n";
  123. echo getDateFull()."=={$param['type']}==\n";
  124. print_r($param);
  125. return json([
  126. "err_no" => 0,
  127. "err_tips" => "success"
  128. ]);
  129. } catch (\Throwable $throwable) {
  130. return error($throwable->getMessage());
  131. }
  132. }
  133. /**
  134. * 核销工具解决方案-扩展点-spi
  135. * @param Request $request
  136. * @return Response
  137. */
  138. #[Route(path: "expand",methods: ['get','post'])]
  139. public function getExpandData(Request $request): Response
  140. {
  141. try {
  142. print_r($request->rawHead());
  143. print_r($request->rawBody());
  144. if ($request->method() == "POST") {
  145. $param = $request->post();
  146. } else {
  147. $param = $request->get();
  148. }
  149. echo getDateFull()."===扩展点===方式{$request->method()}\n";
  150. switch ($param['type'])
  151. {
  152. case "pre_create_order": // 预下单回调
  153. $orderData = json_decode($param['msg']);
  154. $orderGoods = (new SaasGoods)->where("out_id",$orderData['goods'][0]['goods_id'])->findOrEmpty();
  155. if ($orderGoods->isEmpty()) return json([
  156. "err_no" => 0,
  157. "err_tips" => "success"
  158. ]);
  159. (new SaasOrderLife)->insertGetId([
  160. "open_id" => $orderData['open_id'],
  161. "agent_id" => $orderGoods['agent_id'],
  162. "store_id" => $orderGoods['agent_id'],
  163. "order_id" => $orderData['order_id'],
  164. "product_name" => $orderData['goods'][0]['title'],
  165. "product_img" => $orderData['goods'][0]['img_url'],
  166. "out_id" => $orderData['goods'][0]['goods_id'],
  167. "order_amount" => $orderData['goods'][0]['price'],
  168. "pay_amount" => $orderData['goods'][0]['price'],
  169. "count" => $orderData['goods'][0]['quantity'],
  170. "status" => 0
  171. ]);
  172. return json([
  173. "out_order_no" => $orderData['order_id'],
  174. "order_entry_schema" => [
  175. "path" => "page/order/detail",
  176. "params" => ['order' => $orderData['order_id']]
  177. ],
  178. "pay_notify_url" => "https://hx-mini-api.jsshuita.com.cn/notify/pay"
  179. ]);
  180. break;
  181. case "pre_create_refund": // 退款审核回调
  182. break;
  183. }
  184. echo getDateFull()."=={$param['type']}==\n";
  185. print_r($param);
  186. return json([
  187. "err_no" => 0,
  188. "err_tips" => "success"
  189. ]);
  190. } catch (\Throwable $throwable) {
  191. return error($throwable->getMessage());
  192. }
  193. }
  194. }