Notify.php 8.3 KB

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