如何验证消息是否来自微信公众平台服务器

2015-03-13 10:08:41 +08:00
 lvxudong

微信的文档中是这样说的

此后,每次开发者接收用户消息的时候,微信也都会带上前面三个参数(signature、timestamp、nonce)访问开发者设置的URL,开发者依然通过对签名的效验判断此条消息的真实性。效验方式与首次提交验证申请一致。

可是微信文档却没有说是以什么方式带上这三个参数(signature、timestamp、nonce)的
是放在HTTP的Head头部吗,还是用?带在URL后面?(这不是GET请求吗)

7351 次点击
所在节点    微信
16 条回复
shangjiyu
2015-03-13 10:20:05 +08:00
不是 head 里面是在 URL 参数
faceair
2015-03-13 10:20:48 +08:00
放url后面 query参数
alex321
2015-03-13 10:22:16 +08:00
get 的方式。
kslr
2015-03-13 10:31:44 +08:00
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串
http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html
你没有仔细看
lvxudong
2015-03-13 10:34:29 +08:00
@alex321 GET方式?我是接收来自用户的消息
lvxudong
2015-03-13 10:35:55 +08:00
@kslr 谢谢,接入验证这里是GET请求这个我知道,但是我问的是接收来自用户消息的时候
kslr
2015-03-13 10:36:23 +08:00
@lvxudong 用户消息是POST过来的XML
kslr
2015-03-13 10:39:58 +08:00
@lvxudong 你在之前已经配置的时候已经连接成功,只要token不泄露就没啥问题吧,如果非要搞,恐怕只能判断微信服务器IP了。
http://mp.weixin.qq.com/wiki/0/2ad4b6bfd29f30f71d39616c2a0fcedc.html
{"ip_list":["101.226.62.77","101.226.62.78","101.226.62.79","101.226.62.80","101.226.62.81","101.226.62.82","101.226.62.83","101.226.62.84","101.226.62.85","101.226.62.86","101.226.103.59","101.226.103.60","101.226.103.61","101.226.103.62","101.226.103.63","101.226.103.69","101.226.103.70","101.226.103.71","101.226.103.72","101.226.103.73","140.207.54.73","140.207.54.74","140.207.54.75","140.207.54.76","140.207.54.77","140.207.54.78","140.207.54.79","140.207.54.80"]}
lvxudong
2015-03-13 11:11:01 +08:00
@kslr 要这样搞,太麻烦了把
alex321
2015-03-13 11:11:04 +08:00
@lvxudong 用户发送消息经过微信服务器中转时,微信向你的 api 发起请求的时候都会在 url 上添加 signature、timestamp、nonce 这几个参数以 get 方式传递给你,你可以通过它们校验微信消息是否合法地来自微信服务器。而用户发送的内容会由微信服务器以 xml 的格式以 post 的方式传递给你。
lvxudong
2015-03-13 11:20:23 +08:00
@alex321 谢谢,查看一下微信请求的日志,终于了解了。
纠正你一下,
>用户发送消息经过微信服务器中转时,微信向你的 api 发起请求的时候都会在 url 上添加 signature、timestamp、nonce 这几个参数以 get 方式传递给你

这里用户发送的消息经过微信服务器中转时,微信服务器是用 POST 方式把XML传给我的,不是GET 额
qiayue
2015-03-13 11:24:59 +08:00
签名参数 get
消息体(xml) post
alex321
2015-03-13 11:27:27 +08:00
@lvxudong 这位童鞋,你很需要静下心来看文字。就像上学的时候做题目一样,审题。
siko
2015-03-13 11:40:35 +08:00
看来是没法绕过了?
zieglar
2015-03-13 11:41:06 +08:00
@alex321 @lvxudong 你们都说错了
用户发送消息经过微信服务器中转时,微信向你的 api 发起请求的时候都会在 url 上添加 signature、timestamp、nonce 这三个参数,所以处理微信的 API 需要有个入口方法来接收这三个参数并验证是否能正常解码,再执行正常的请求回应。
lvxudong
2015-03-13 13:59:43 +08:00
@alex321 ,@zieglar 这位同学说的对的,
微信过来的请求,不论GET还是POST,都会在你的URL后面带query参数
(之前没遇到过在 POST 的URL加query参数情况,一直以为只有GET才能在URL后面带query)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/176545

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX