Notify.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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. "pay_time" => $resp['order']['pay_time']
  41. ]);
  42. }
  43. $return = [];
  44. break;
  45. case "life_trade_certificate_notify": // 退款
  46. $resp = json_decode($param['content'], true);
  47. if ($resp['action'] == "refund_success") {
  48. $order = (new SaasOrderLife)->where("certificate_id",$resp['certificate']['certificate_id'])->findOrEmpty();
  49. if (!$order->isEmpty()) {
  50. $order->status = 4;
  51. $order->refund_at = getDateFull();
  52. $order->save();
  53. }
  54. }
  55. $return = [];
  56. break;
  57. default:
  58. $return = [];
  59. break;
  60. }
  61. return json($return);
  62. } catch (\Throwable $e) {
  63. echo $e->getMessage()."\n";
  64. echo $e->getFile()."\n";
  65. echo $e->getLine()."\n";
  66. return error($e->getMessage());
  67. }
  68. }
  69. /**
  70. * 核销工具解决方案-spi
  71. * @param Request $request
  72. * @return Response
  73. */
  74. #[Route(path: "pay",methods: ['get','post'])]
  75. public function getPayStatue(Request $request): Response
  76. {
  77. try {
  78. if ($request->method() == "POST") {
  79. $param = $request->post();
  80. } else {
  81. $param = $request->get();
  82. }
  83. echo getDateFull()."===支付结果回调===方式{$request->method()}\n";
  84. echo getDateFull()."==支付结果回调==\n";
  85. print_r($param);
  86. return json([
  87. "err_no" => 0,
  88. "err_tips" => "success"
  89. ]);
  90. } catch (\Throwable $throwable) {
  91. return error($throwable->getMessage());
  92. }
  93. }
  94. /**
  95. * 核销工具解决方案-spi
  96. * @param Request $request
  97. * @return Response
  98. */
  99. #[Route(path: "mini",methods: ['get','post'])]
  100. public function getSpiData(Request $request): Response
  101. {
  102. try {
  103. print_r($request->rawHead());
  104. print_r($request->rawBody());
  105. if ($request->method() == "POST") {
  106. $param = $request->post();
  107. } else {
  108. $param = $request->get();
  109. }
  110. echo getDateFull()."===统一===方式{$request->method()}\n";
  111. echo getDateFull()."=={$param['type']}==\n";
  112. print_r($param);
  113. return json([
  114. "err_no" => 0,
  115. "err_tips" => "success"
  116. ]);
  117. } catch (\Throwable $throwable) {
  118. return error($throwable->getMessage());
  119. }
  120. }
  121. /**
  122. * 核销工具解决方案-扩展点-spi
  123. * @param Request $request
  124. * @return Response
  125. */
  126. #[Route(path: "expand",methods: ['get','post'])]
  127. public function getExpandData(Request $request): Response
  128. {
  129. try {
  130. print_r($request->rawHead());
  131. print_r($request->rawBody());
  132. if ($request->method() == "POST") {
  133. $param = $request->post();
  134. } else {
  135. $param = $request->get();
  136. }
  137. echo getDateFull()."===扩展点===方式{$request->method()}\n";
  138. switch ($param['type'])
  139. {
  140. case "pre_create_order": // 预下单回调
  141. $orderData = json_decode($param['msg']);
  142. $orderGoods = (new SaasGoods)->where("out_id",$orderData['goods'][0]['goods_id'])->findOrEmpty();
  143. if ($orderGoods->isEmpty()) return json([
  144. "err_no" => 0,
  145. "err_tips" => "success"
  146. ]);
  147. (new SaasOrderLife)->insertGetId([
  148. "open_id" => $orderData['open_id'],
  149. "agent_id" => $orderGoods['agent_id'],
  150. "store_id" => $orderGoods['agent_id'],
  151. "order_id" => $orderData['order_id'],
  152. "product_name" => $orderData['goods'][0]['title'],
  153. "product_img" => $orderData['goods'][0]['img_url'],
  154. "out_id" => $orderData['goods'][0]['goods_id'],
  155. "order_amount" => $orderData['goods'][0]['price'],
  156. "pay_amount" => $orderData['goods'][0]['price'],
  157. "count" => $orderData['goods'][0]['quantity'],
  158. "status" => 0
  159. ]);
  160. return json([
  161. "out_order_no" => $orderData['order_id'],
  162. "order_entry_schema" => [
  163. "path" => "page/order/detail",
  164. "params" => ['order' => $orderData['order_id']]
  165. ],
  166. "pay_notify_url" => "https://hx-mini-api.jsshuita.com.cn/notify/pay"
  167. ]);
  168. break;
  169. case "pre_create_refund": // 退款审核回调
  170. break;
  171. }
  172. echo getDateFull()."=={$param['type']}==\n";
  173. print_r($param);
  174. return json([
  175. "err_no" => 0,
  176. "err_tips" => "success"
  177. ]);
  178. } catch (\Throwable $throwable) {
  179. return error($throwable->getMessage());
  180. }
  181. }
  182. }