接入HTTP服务
用户发到公众号(包括测试号)的信息,都是直接发给腾讯的微信服务器的,我们怎样才能在Foxtable中接收并回复用户发来的信息呢?
很简单,我们只需在Foxtable端开启一个HTTP服务,并在微信后台进行配置,通知微信服务器将收到的用户信息,转发给此HTTP服务即可。
所以我们首先要在后台接入一个HTTP服务,通常也称为回调模式设置。
出于简单和适用更多用户考虑,本文档的不少内容是基于测试号的,但相关内容同样适用正式的公众号,测试号和公众号在编程上是相同的,不同的只是后台管理页面。
在测试号的后台管理页面中,按下图所示进行填写HTTP服务的地址和Token:
此时我们还没有办法提交设置,因为单击提交按钮后,微信服务器会发送一个GET访问请求到上述URL,Foxtable需要对这个访问请求做出正确的回应
(验证真实性),才能接入成功。
关于真实性验证的方法,可以参考微信官方文档:
https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
根据官方说明,我们将HttpRequet事件代码设为:
Select
Case e.path
Case "wefox"
If e.Request.HttpMethod = "GET"
Then
Dim
token = "foxtable"
'必须和设置的Token相同
Dim
signature As
String = e.GetValues("signature")
Dim
timestamp As
String = e.GetValues("timestamp")
Dim
nonce As
String = e.GetValues("nonce")
Dim
echostr As
String = e.GetValues("echostr")
Dim
aryTmp() As
String = {token,timestamp,nonce}
Array.Sort(aryTmp)
Dim
strTmp As
String = String.Join("",
aryTmp)
strTmp =
Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strTmp,
"SHA1")
If
signature = strTmp.ToLower()
Then
e.WriteString(echostr)
End
If
End
If
End
Select
现在我们可以在测试号的设置页面,单击提交按钮提交设置了。
实际开发的时候,可以将验证部分的代码做成一个自定义函数,函数名为VerifySignature,代码代码为:
Dim
e As
RequestEventArgs =
Args(0)
Dim
token = "foxtable"
'必须和设置的Token相同
Dim
signature As
String = e.GetValues("signature")
Dim
timestamp As
String = e.GetValues("timestamp")
Dim
nonce As
String = e.GetValues("nonce")
Dim
echostr As
String = e.GetValues("echostr")
Dim
aryTmp() As
String = {token,timestamp,nonce}
Array.Sort(aryTmp)
Dim
strTmp As
String = String.Join("",
aryTmp)
strTmp =
Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strTmp,
"SHA1")
Return
signature = strTmp.ToLower
然后将HttpRequet事件代码改为:
Select
Case e.path
Case "wefox"
If e.Request.HttpMethod.ToUpper
= "GET"
If
Functions.Execute("VerifySignature",e)
Then
e.WriteString(e.GetValues("echostr"))
End
If
End If
End
Select