Notify.php 7.0 KB

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