首先要明白,连接是双向的,但有两种不同的模式:
1、微信服务器调用你的服务器(主要模式)
当用户做了什么? 比如用户在公众号里发送一条消息、点击一个菜单、或者小程序里调用了一个支付接口。
发生了什么? 微信服务器会把这个事件(消息或请求)打包成一个 XML 或 JSON 格式的数据包,主动发送(HTTP POST) 到你预先配置好的服务器地址上。
你该做什么? 你的服务器需要接收这个数据包,处理其中的信息(理解用户消息、处理支付结果),然后组织一个同样格式的数据包返回给微信服务器,微信服务器再最终呈现给用户。
2、你的服务器调用微信服务器的接口(主动模式)
当你想做什么? 比如你想主动给用户发送一条客服消息、生成一个带参数的二维码、或者获取用户的基本信息。
发生了什么? 你的服务器需要主动发起一个 HTTP 请求(通常是 GET 或 POST) 到微信提供的 API 地址上。
重要前提 调用绝大多数微信 API 都需要一个access_token
,这是一个有有效期(通常2小时)的访问凭证,你的服务器需要先调用另一个 API,用你的 AppID 和 AppSecret 来获取它。
核心步骤一:配置你的服务器(模式1的基础)
这是让微信服务器能找到你、并与你安全通信的第一步,通常在你的公众号或小程序后台的“开发 > 基本配置”里进行。
1、准备一个服务器:你需要一台有公网 IP 地址(或域名)的服务器,并编写了一个接口(API)来处理微信发来的请求,你用 Python(Flask/Django)、Java(SpringBoot)、PHP 或 Node.js 写了一个接口,URL 是https://yourdomain.com/wechat/callback
。
2、填写服务器配置:
URL(服务器地址)填入你准备好的接口地址,例如https://yourdomain.com/wechat/callback
。
Token(令牌)你自己设定一个字符串,用于生成签名,验证请求的来源是否合法,例如YourSecretToken123
。
EncodingAESKey(消息加解密密钥)可选,但推荐选择“安全模式”并让微信自动生成,用于加密和解密消息内容,保证通信安全。
3、验证服务器所有权(最重要的一步):
当你点击“提交”按钮时,微信服务器会向你填写的 URL 发送一个GET 请求,携带以下参数
signature
微信加密签名
timestamp
时间戳
nonce
随机数
echostr
随机字符串
你的服务器需要做以下计算来验证
1. 将你配置的Token
、收到的timestamp
、nonce
三个参数按字典序排序后拼接成一个字符串。
2. 对这个字符串进行SHA1 加密。
3. 将加密得到的字符串与微信传来的signature
进行对比。
4.如果相同,说明这个请求确实来自微信,你的服务器就应该原样返回echostr
参数的内容。
5.如果不同,或者你没有响应,则验证失败。
* 验证成功后,微信才会相信这个 URL 是你的,后续才会把用户消息等 POST 消息发过来。
核心步骤二:与微信 API 交互(模式2)
在你的服务器通过验证后,你就可以主动调用微信的各种功能了。
1、获取 Access Token:
* 这是调用几乎所有 API 的“钥匙”。
请求地址https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
* 由于它有调用频率限制且每天次数有限,你的服务器必须缓存它(例如存到 Redis 或数据库里),并在快过期时重新获取,而不是每次调用 API 前都去获取一次。
2、调用具体 API:
发送客服消息POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN
创建自定义菜单POST https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
获取用户信息GET https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID
小程序代码模版消息、微信支付、微信登录等都有其特定的 API。
整体通信流程可以概括为:
graph LR A[用户] -- 发送消息/事件 --> B[微信服务器] B -- 1. POST 消息/事件 --> C[你的服务器] C -- 2. 处理业务逻辑 & 数据库操作 --> C C -- 3. 返回回复内容 XML/JSON --> B B -- 将回复展现给用户 --> A D[你的服务器] -- 4. 获取 access_token --> E[微信API服务器] D -- 5. 携带 token 调用微信API --> E E -- 返回API结果 --> D
技术要点总结:
1、必备条件:一台有公网IP/域名的服务器,支持 HTTPS(微信强制要求)。
2、核心配置:在微信后台正确配置 URL、Token、EncodingAESKey,并通过验证。
3、双向通信:
接收编写 API 接口处理微信推送来的 POST 消息(XML/JSON)。
主动调用获取并缓存access_token
,然后调用微信的各种 RESTful API。
4、安全:通过签名(Token)验证请求来源,通过 AES 加密(EncodingAESKey)保障消息体安全。
5、数据处理:你的服务器需要能够解析 XML(公众号常用)和 JSON(小程序常用),并生成相应格式的响应。
微信官方文档永远是第一选择,非常详细。
公众号开发文档https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
小程序开发文档https://developers.weixin.qq.com/miniprogram/dev/framework/
在线调试工具微信官方提供,可用于测试 API 调用是否正确。
https://mp.weixin.qq.com/debug/
Postman/Insomnia用于模拟和测试你的服务器接口以及调用微信 API。
希望这个解释能帮助你彻底理解服务器和微信是如何连接起来的!如果你有更具体的场景(比如是做公众号还是小程序),我可以提供更针对性的说明。
文章摘自:https://idc.huochengrm.cn/fwq/16165.html
评论