接入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

 

 

 


本页地址:http://www.foxtable.com/mobilehelp/topics/0175.htm