- Update notification templates to include action context in user nicknames (unlock, favorite, message, reminder)
- Refactor subscription message request to use manual HttpRequestMessage for better control
- Add empty response validation with specific warning log
- Enhance error logging to include ToUser identifier for better diagnostics
- Improve exception handling with ToUser context in error logs
- These changes provide better visibility into subscription message failures and clearer user action context in notifications
- Add BuildDefaultTemplateData method to construct fallback template data
- Map notification fields to WeChat template placeholders (first, keyword1-3, remark)
- Provide default template structure when database field mapping is not configured
- Ensures template messages can be sent with sensible defaults as safety net
- Add field mapping properties to NotificationTemplatesConfig interface for unlock, favorite, message, and daily recommend templates
- Add UI form fields in system config view for configuring JSON-based field mappings with helper text
- Implement dynamic template data construction using configured field mappings in NotificationService
- Add fallback to traditional first/keyword format when field mapping is not configured
- Support flexible field mapping with value types: title, name, content, time, remark
- Update SystemConfigService to persist and retrieve field mapping configurations
- Enable backend-driven template field customization without code changes
- Set HTTP client to use HTTP/1.1 with exact version policy for WeChat API compatibility
- Replace PostAsJsonAsync with manual HttpRequestMessage construction for better control
- Add User-Agent and Accept headers to template message requests
- Use StringContent with explicit UTF-8 encoding for JSON serialization
- Update error logging to include request body and remove sensitive app secret from logs
- Improve diagnostic information for template message failures
- Add AppSecret to template message failure logging for better diagnostics
- Include full access token in logs instead of truncated version for complete debugging context
- Improve error visibility by logging complete credentials information when template message sending fails
- Include response headers in diagnostic logging when template message send fails
- Extract headers as formatted key-value pairs for better error visibility
- Update log message to include Headers parameter alongside existing diagnostics
- Improves troubleshooting capability by capturing full HTTP response metadata
- Add forceRefresh parameter to GetServiceAccountAccessTokenAsync for cache bypass capability
- Implement automatic token refresh retry logic for HTTP 412 and token expiration error codes (40001, 42001)
- Extract SendServiceAccountTemplateMessageAsync into internal method to support retry mechanism
- Enhance logging with contextual parameters (AppId, ToUser, TemplateId, AccessToken prefix) for better diagnostics
- Add conditional logging for failed requests with full diagnostic information
- Improve error handling to distinguish between token expiration scenarios and other failures
- Add informational logging when requesting new access tokens
- Add HTTP status code to template message response logging for better debugging
- Include serialized request body in logs to facilitate troubleshooting
- Improve observability of WeChat service account template message operations
- 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