| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- <?php
- namespace App\Http\Controllers\Api;
- use App\Jobs\WxProcessDataJob;
- use App\Model\EnterpriseRecord;
- use App\Service\EnterpriseWechatService;
- use Illuminate\Support\Facades\Http;
- use Illuminate\Support\Facades\Log;
- class EnterpriseWechatController extends BaseController
- {
- /**
- * 企业微信回调统一入口 (验证 URL & 接收事件)
- */
- public function serve()
- {
- $service = new EnterpriseWechatService();
- $app = $service->getApp();
- // 1. 定义收到数据后的逻辑
- $app->server->push(function ($message) use ($app) {
- // 判断是否为审批状态变动通知
- Log::channel('apiLog')->info('企业微信', ['msg' => $message]);
- if ($message['Event'] === 'sys_approval_change') {
- $info = $message['ApprovalInfo'];
- $templateId = $info['TemplateId']; // 拿到模板ID
- $status = (int)$info['SpStatus']; // 强制转为整数防止类型判断坑
- $spNo = $info['SpNo'];
- // 仅在状态为 2 (通过) 或 3 (驳回) 时存入数据库
- if ($status === 2 || $status === 3) {
- $array = [
- 'sp_no' => $spNo,
- 'template_id' => $templateId,
- 'sp_status' => $status,
- 'crt_time' => now(),
- ];
- $count = EnterpriseRecord::insertOrIgnore($array);
- if($count > 0 && $status == 2) WxProcessDataJob::dispatch($array)->onQueue(EnterpriseRecord::$job);
- }
- }
- });
- // 核心逻辑:serve() 会自动判断请求类型
- // 如果是 GET 请求,它会自动处理校验逻辑并返回明文 echostr
- // 如果是 POST 请求,它会进入消息处理流程
- return $app->server->serve();
- }
- }
|