This is a WeChat Official Account plugin developed for the Dify platform, providing complete WeChat Official Account API integration with support for material management, draft operations, and message publishing.
- Get Access Token: Retrieve WeChat Official Account access tokens with automatic refresh support
- Credential Validation: Automatically validate App ID and App Secret validity
- Secure Storage: Securely manage and store access credentials
- Upload Permanent Materials: Support for multiple media types including images, audio, video, and thumbnails
- Get Permanent Materials: Retrieve uploaded permanent material information using media IDs
- Delete Permanent Materials: Remove unnecessary permanent materials
- Smart File Processing: Automatic handling of file size limits, format validation, and error processing
- Multiple Upload Methods: Support for both URL links and local file uploads
- Create Article Drafts: Create article message drafts with complete information including titles, content, and cover images
- Publish Drafts: Submit drafts for publication to WeChat Official Account
- Parameter Validation: Complete parameter validation and error prompts
- Chinese Character Support: Perfect support for Chinese content encoding and display
wechat_official_plugin/
βββ manifest.yaml # Plugin configuration file
βββ main.py # Plugin entry file
βββ requirements.txt # Python dependencies
βββ README.md # Project documentation
βββ .env.example # Environment variable example
βββ _assets/
β βββ icon.svg # Plugin icon
βββ provider/
β βββ wechat_official.yaml # Provider configuration
β βββ wechat_official_provider.py # Provider implementation
βββ tools/
βββ __init__.py # Tool package initialization
βββ wechat_api_utils.py # WeChat API utility class
βββ get_access_token.yaml # Get access token tool configuration
βββ get_access_token.py # Get access token tool implementation
βββ upload_material.yaml # Upload material tool configuration
βββ upload_material.py # Upload material tool implementation
βββ get_material.yaml # Get material tool configuration
βββ get_material.py # Get material tool implementation
βββ delete_material.yaml # Delete material tool configuration
βββ delete_material.py # Delete material tool implementation
βββ create_draft.yaml # Create draft tool configuration
βββ create_draft.py # Create draft tool implementation
βββ publish_draft.yaml # Publish draft tool configuration
βββ publish_draft.py # Publish draft tool implementation
- Python Version: 3.12+
- Architecture Support: AMD64, ARM64
- Memory Requirements: 1MB
- Dependencies:
dify_plugin: Dify plugin development frameworkpython-dotenv>=1.0.0: Environment variable managementPillow>=10.0.0: Image processing support
Ensure your system has Python 3.12 or higher installed.
cd wechat_official_plugin
pip install -r requirements.txtCopy the environment variable example file and configure your WeChat Official Account information:
cp .env.example .envEdit the .env file and fill in your WeChat Official Account configuration:
# WeChat Official Account Configuration
WECHAT_APP_ID=your_app_id_here
WECHAT_APP_SECRET=your_app_secret_herepython main.pyIf you encounter an exception message during plugin installation:
plugin verification has been enabled, and the plugin you want to install has a bad signature
Solution (Simple and Direct):
Directly modify Dify's .env file:
FORCE_VERIFYING_SIGNATURE=falseNote: After adding this, you need to restart Docker by executing the following commands in the command line:
cd docker # First switch to the docker directory under your local Dify installation directory
docker compose down
docker compose up -dBefore using the plugin, you need to obtain the following information from WeChat Official Account Platform:
- App ID: WeChat Official Account application ID
- App Secret: WeChat Official Account application secret
- Login to WeChat Official Account Platform
- Go to "Development" -> "Basic Configuration"
- Get "Developer ID (AppID)" and "Developer Password (AppSecret)"
- Ensure the official account is verified and has relevant interface permissions enabled
Used to display file preview or download links to the frontend, or as multimodal input; links are signed and have expiration times.
File processing plugins must configure FILES_URL:
- If the address is
https://example.com, setFILES_URL=https://example.com - If the address is
http://example.com, setFILES_URL=http://example.com
Modify Dify's .env file:
FILES_URL=http://<your_IP_address>Restart Docker service:
docker compose down
docker compose up -d# Get access token
result = get_access_token_tool.invoke({
# No additional parameters needed, uses configured App ID and App Secret
})# Upload image material
result = upload_material_tool.invoke({
"media_type": "image",
"file_url": "https://example.com/image.jpg"
})
# Upload video material
result = upload_material_tool.invoke({
"media_type": "video",
"file_url": "https://example.com/video.mp4",
"title": "Video Title",
"introduction": "Video Description"
})
# Upload audio material
result = upload_material_tool.invoke({
"media_type": "voice",
"file_url": "https://example.com/audio.mp3"
})# Get material information
result = get_material_tool.invoke({
"media_id": "your_media_id"
})
# Delete material
result = delete_material_tool.invoke({
"media_id": "your_media_id"
})# Create article draft
result = create_draft_tool.invoke({
"title": "Article Title",
"content": "<p>Article Content HTML</p>",
"author": "Author Name",
"digest": "Article Summary",
"thumb_media_id": "cover_image_media_id",
"content_source_url": "https://example.com",
"need_open_comment": "1",
"only_fans_can_comment": "0"
})
# Publish draft
result = publish_draft_tool.invoke({
"media_id": "draft_media_id"
})The plugin includes comprehensive error handling mechanisms, including:
- Network Errors: Automatic retry and timeout handling (30-second timeout)
- API Errors: Detailed error code explanations and handling suggestions
- Parameter Validation: Input parameter format and validity checks
- File Processing: File size, format, and permission checks
- Encoding Processing: Perfect support for Chinese character encoding and display
- Credential Management: Automatic validation and refresh of access tokens
The plugin has completely resolved Chinese character encoding issues:
- β Perfect support for Chinese in draft titles, content, authors, and other fields
- β Correct handling of Unicode characters during JSON data transmission
- β Proper display of Chinese content in WeChat API responses
- β No manual handling of Unicode escape sequences required
- Title length limit (β€64 characters)
- Author name length limit (β€8 characters)
- Summary length limit (β€120 characters)
- Cover image media_id format validation
- HTML content security checks
- Interface Permissions: Ensure your WeChat Official Account has the relevant interface permissions enabled
- Call Frequency: Comply with WeChat API call frequency limits
- File Size: Different material types have different file size limits
- Content Review: Published content needs to pass WeChat platform review
- Original Protection: If there are original declarations, they need to pass original review
- Character Encoding: The plugin automatically handles Chinese character encoding, no additional configuration needed
If you encounter an "Invalid credentials" error when configuring the plugin, please follow these troubleshooting steps:
# Use built-in diagnostic tool
python diagnostic.py --app-id YOUR_APP_ID --app-secret YOUR_APP_SECRET-
Verify Credential Format
- App ID: Must start with
wx, total length 18 characters - App Secret: Must be a 32-character hexadecimal string
- Ensure no extra spaces or line breaks
- App ID: Must start with
-
Confirm Credential Source
- Login to WeChat Official Account Platform
- Go to "Development" -> "Basic Configuration"
- Copy the correct "Developer ID (AppID)" and "Developer Password (AppSecret)"
-
Check Official Account Status
- β Official account is verified
- β Material management interface permissions are enabled
- β Draft box/publishing interface permissions are enabled
-
Network Connection Test
# Test if WeChat API is accessible curl -I https://api.weixin.qq.com
| Error Code | Description | Solution |
|---|---|---|
| 40013 | Invalid AppID | Check App ID format and validity |
| 41004 | Missing secret parameter | Confirm App Secret is correctly filled |
| 42001 | access_token timeout | Re-obtain access token |
| 48001 | API function not authorized | Confirm official account has relevant interface permissions enabled |
Detailed Troubleshooting Guide: Please refer to TROUBLESHOOTING.md
If you encounter problems during use, please check:
- WeChat Official Account configuration is correct
- Network connection is normal
- API permissions are enabled
- Call parameters meet requirements
- Run Diagnostic Tool:
python diagnostic.py --app-id YOUR_APP_ID --app-secret YOUR_APP_SECRET - Check Detailed Logs: Check error information in Dify system logs
- Reference Documentation: See
TROUBLESHOOTING.mdfor detailed solutions
- π Initial version release
- β Support for access token acquisition and management
- β Support for permanent material upload, retrieval, and deletion
- β Support for article draft creation and publishing
- β Complete error handling and parameter validation mechanisms
- β Fixed Chinese character encoding issues, perfect Unicode support
- β Smart file processing and format validation
- β 30-second timeout setting adapted to WeChat API response times
- β Detailed error diagnosis and user-friendly error prompts
This project is licensed under the MIT License. See the LICENSE file for details.