Test.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <?php
  2. namespace app\controller\notify;
  3. use app\extra\basic\Base;
  4. use app\extra\dyLife\data\OrderData;
  5. use app\extra\tools\LifeWeb;
  6. use app\model\saas\SaasOrder;
  7. use app\model\saas\SaasOrderExpress;
  8. use app\model\saas\SaasOrderItem;
  9. use app\model\saas\SaasOrderVerify;
  10. use LinFly\Annotation\Attributes\Route\Controller;
  11. use LinFly\Annotation\Attributes\Route\GetMapping;
  12. use support\Request;
  13. use support\Response;
  14. #[Controller("/test")]
  15. class Test extends Base
  16. {
  17. #[GetMapping("verify")]
  18. public function setVerify(Request $request): Response
  19. {
  20. try {
  21. $param = $this->_valid([
  22. 'order.require' => trans("empty.require")
  23. ]);
  24. if (!is_array($param)) return error($param);
  25. $order = (new SaasOrder)->where("order_sn",$param["order"])->with(['product','poi','user'])->findOrEmpty();
  26. echo "订单状态==={$order['status']}\n";
  27. if ($order->isEmpty()) return errorTrans("empty.data");
  28. if ($order['status'] <> 7) return error("该订单状态不支持核销");
  29. // if ($request->user['store_id'] <> $order['poi_id'] && $request->user['is_super'] == 0) return errorTrans("empty.data");
  30. $orderExpress = (new SaasOrderExpress)->where("order_sn",$order['out_order_no'])->findOrEmpty();
  31. if ($orderExpress->isEmpty()) return error("订单尚未发货");
  32. if (!empty($order['error_at'])) {
  33. if (strtotime("+24 hour",strtotime($order['error_at'])) < time()) return error("新订单需24小时后方可核销");
  34. }
  35. [$state,$expressData] = (new LifeWeb)->getExpressData($orderExpress['express_sn'],$orderExpress['mobile']);
  36. if (!$state) return error("查询物流失败,请联系管理员");
  37. if (!in_array($expressData['logisticsStatusDesc'],['派件中',"已签收"])) return error("当前物流状态不允许核销");
  38. $startTime = $order['poi']['order_start']??'09:00';
  39. $endTime = $order['poi']['order_end']??'22:30';
  40. $startTimeStamp = strtotime(date("Y-m-d {$startTime}:00"));
  41. $endTimeStamp = strtotime(date("Y-m-d {$endTime}:00"));
  42. if (time() > $startTimeStamp && time() < $endTimeStamp) {
  43. $data = (new OrderData)->config([
  44. "appid" => sConf("wechat.mini_appid"),
  45. "secret" => sConf("wechat.mini_secret")
  46. ])->token()->verifyOrder($order->toArray());
  47. if (empty($data['verify_results'])) return error($data['description']); // 核销失败
  48. $order->status = 2;
  49. $order->express_status = 3;
  50. $order->done_at = getDateFull();
  51. $order->save();
  52. (new SaasOrderItem)->where(['order_sn'=>$order['order_sn'],'status'=>1])->update(['status'=>3]);
  53. (new SaasOrderVerify)->insertGetId([
  54. "poi_id" => $order['poi_id'],
  55. "order_sn" => $order['order_sn'],
  56. "money" => $order['price'],
  57. "certificate_id" => $data['verify_results'][0]['certificate_id']??'0',
  58. "verify_id" => $data['verify_results'][0]['verify_id']??'0',
  59. ]);
  60. return success("核销成功");
  61. } else {
  62. return error("当前时间段不支持核销");
  63. }
  64. // if ($order['status'] <> 2)
  65. // {
  66. // echo getDateFull()."===订单状态不符合核销\n";
  67. // return error("订单状态不符合核销",$order->toArray());
  68. // }
  69. // // 获取到订单encrypted_code
  70. // $orderCode = (new OrderData)->config([
  71. // "appid" => sConf("wechat.appid"),
  72. // "secret" => sConf("wechat.secret"),
  73. // "account" => sConf("wechat.shop_id"),
  74. // ])->token()->getCertificate($order['order_sn'],$order['poi']['store_id']);
  75. // if (empty($orderCode['certificates']))
  76. // {
  77. // echo getDateFull()."===获取订单数据失败\n";
  78. // return error("获取订单数据失败",$orderCode);
  79. // }
  80. // echo getDateFull()."===核销数据\n";
  81. // print_r($orderCode['certificates']);
  82. // $encrypted_code = [];
  83. // foreach ($orderCode['certificates'] as $key=>$v)
  84. // {
  85. // if (empty($v['encrypted_code']))
  86. // {
  87. // echo getDateFull()."===获取订单数据失败\n";
  88. // continue;
  89. // }
  90. // if ($v['status'] <> 1) {
  91. // echo getDateFull()."===该订单状态不支持核销\n";
  92. // continue;
  93. // }
  94. // $encrypted_code[$key] = $v['encrypted_code'];
  95. // }
  96. // echo getDateFull()."===券码数据\n";
  97. // print_r($encrypted_code);
  98. // if (empty($encrypted_code))
  99. // {
  100. // echo getDateFull()."===没有可核销券码\n";
  101. // $order->express_status = 3;
  102. // $order->done_at = getDateFull();
  103. // $order->save();
  104. // return error("没有可核销券码",$encrypted_code);
  105. // }
  106. // // 核销订单
  107. // $orderDone = (new OrderData)->config([
  108. // "appid" => sConf("wechat.appid"),
  109. // "secret" => sConf("wechat.secret"),
  110. // "account" => sConf("wechat.shop_id"),
  111. // ])->token()->verifyCertificate([
  112. // "account_id" => $order['poi']['store_id'],
  113. // "pay_sn" => $order['pay_sn'],
  114. //// "encrypted_code" => $orderCode['certificates'][0]['encrypted_code'],
  115. // "encrypted_code" => array_values($encrypted_code),
  116. // "order_id" => $order['order_sn'],
  117. // "poi_id" => $order['poi_id']
  118. // ]);
  119. // echo getDateFull()."===核销返回\n";
  120. // print_r($orderDone);
  121. // if (empty($orderDone['verify_results']))
  122. // {
  123. // echo getDateFull()."===核销失败\n";
  124. // return error("核销失败",$orderDone);
  125. // }
  126. // $doneData = [];
  127. // foreach ($orderDone['verify_results'] as $key=>$v)
  128. // {
  129. // if(empty($v['verify_id'])) {
  130. // continue;
  131. // }
  132. // if(empty($v['certificate_id'])) {
  133. // continue;
  134. // }
  135. // $doneData[$key] = [
  136. // "poi_id" => $order['poi_id'],
  137. // "order_sn" => $order['order_sn'],
  138. // "money" => $order['price'],
  139. // "certificate_id" => $v['certificate_id'],
  140. // "verify_id" => $v['verify_id'],
  141. // ];
  142. // }
  143. // if (empty($doneData))
  144. // {
  145. // echo getDateFull()."===核销完成无数据返回\n";
  146. // return error("核销完成无数据返回",$doneData);
  147. // }
  148. // $order->express_status = 3;
  149. // $order->done_at = getDateFull();
  150. // $order->save();
  151. // (new SaasOrderItem)->where(['order_sn'=>$order['order_sn'],'status'=>1])->update(['status'=>3]);
  152. // (new SaasOrderVerify)->insertAll(array_values($doneData));
  153. } catch (\Throwable $throwable) {
  154. echo $throwable->getMessage()."\n";
  155. echo $throwable->getFile()."\n";
  156. echo $throwable->getLine()."\n";
  157. return error($throwable->getMessage());
  158. }
  159. }
  160. #[GetMapping('mini/token')]
  161. public function testToken()
  162. {
  163. try {
  164. $resp = (new OrderData)->config([
  165. "appid" => sConf("wechat.mini_appid"),
  166. "secret" => sConf("wechat.mini_secret"),
  167. ])->token()->getAccessToken();
  168. return success('ok',['data' => $resp]);
  169. } catch (\Throwable $throwable) {
  170. return error($throwable->getMessage());
  171. }
  172. }
  173. }