- Add IWeChatService dependency injection to WeChatEventController
- Implement GetServiceAccountUserInfoAsync method to fetch user info including UnionId from WeChat API
- Add ServiceAccountUserInfo DTO class with Subscribe, OpenId, and UnionId properties
- Refactor follow event handler to use WeChat API for UnionId instead of XML parsing
- Add validation to ensure UnionId is retrieved before attempting user association
- Update notification URLs in appsettings.json to remove redundant path segment
- Improve error logging when UnionId retrieval fails or user association is not found
- Add token and encodingAESKey fields to NotificationTemplatesConfig interface
- Add UI form inputs for WeChat token and EncodingAESKey in system config page
- Add configuration constants SaTokenKey and SaEncodingAesKeyKey to SystemConfigService
- Update WeChatEventController to fetch token from database instead of hardcoded value
- Make CheckSignature method async and retrieve token from ISystemConfigService
- Update GetNotificationTemplates to include token and encodingAESKey from config
- Update SetNotificationTemplates to persist token and encodingAESKey to database
- Update mini app manifest with new appid
- Enables dynamic WeChat server configuration without code changes
- Update admin API base URL to use nginx reverse proxy path (/api)
- Add nginx reverse proxy configuration for admin-api service with proper headers and timeouts
- Add all services to xyqj-network for internal container communication
- Reorder app-api volume mounts for consistency
- Create bridge network for service-to-service communication in docker-compose