加密解密消息

要学习本节内容,必须有正式的微信公众号。

测试号只有明文模式,正式的公众号可以用选择明文模式还是安全模式收发消息:



需要说明的是,安全模式是针对回调方式(包括消息和事件),我们只需调整Foxtable端的HttpRequest事件代码,对消息进行加密或解密,而主动发送消息的代码不需要做任何调整。

关于微信消息的加密和解密,请参考:

https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Message_encryption_and_decryption_instructions.html

我们已经将腾讯提供的C#算法代码编译成DLL,并整合在Foxtable中,命名空间为"Tencent.WXBizMsgCrypt",如果你熟悉用.net进行微信开发,你可以直接调用。

但是对多数用户来说,直接使用封装在DLL总的函数进行加解密还是比较麻烦的,我个人就曾经因为一个参数顺序问题,浪费了一个多小时。

为方便普通用户的使用,我们另外提供了一个类WXBizCrypt,将相关方法进行了简写,请参考:WXBizCrypt类

定义WXBizCrypt的语法为:

Dim wbiz As New WXBizCrypt(AppId, Token, EncodingAESKey)

AppId 公众号的的开发者ID。
Token 上图中指定的Token。
EncodingAESKey 上图中指定的EncodingAESKey。

一个示例

下面是安全模式下HttpRequest事件的一个简单示例,包括对收到消息的解密,以及对要发送消息的加密:

Select Case e.path
    Case "wefox"
        If e.Request.HttpMethod = "GET"
            If Functions.Execute("VerifySignature",e) Then
                e.WriteString(e.GetValues("echostr"))
            End If
        ElseIf e.Request.HttpMethod = "Post"            '
            Dim wbiz As New WXBizCrypt("wxdd6b45ebecd2f81e","foxtable","1f3JudIWHWXTkFa880d1ZXOVbVsZParNEj4uI15wfF6")
            Dim st As New
Date(1970,1,1,8,0,0)
            Dim msg  As String = wbiz.DecryptMsg(e)
'
解密收到的消息
            If  IsNumeric(msg) Then
'
如果解密失败
                Dim err As String = wbiz.GetErorDesc(CInt(msg))
'
获取错误描述
                Return
            End If
            Dim xo As Foxtable.XObject = Foxtable.XObject.Parse(msg)
            Select Case xo("MsgType")
                Case "text","image","voice","video","shortvideo"
                    Dim dr As DataRow = DataTables("Message").AddNew()
                    dr("FromUserName") = xo("FromUserName")
                    dr("CreateTime") = st.AddSeconds(xo("CreateTime"))
                    dr("MsgType") = xo("MsgType")
                    dr("MsgId") = xo("MsgId")
                    dr("MediaId") = xo("MediaId")
                    dr("ThumbMediaId") = xo("ThumbMediaId")
                    dr("PicUrl") = xo("PicUrl")
                    dr("Content") = xo("Content")
                    dr("Format") = xo("Format")
                    dr("Recognition") = xo("Recognition")
                   
'
被动回复消息
                    Dim so As New Foxtable.XObject()
                    so("ToUserName") = xo("FromUserName")
                    so("FromUserName") = xo("ToUserName")
                    so("CreateTime") = (Date.Now - st).TotalSeconds()
                    so("MsgType")= "text"
                    so("Content") =
"
您好,我是Foxtable,今天是" & Format(Date.Today,"yyyyMMdd")
                    msg = wbiz .EncryptMsg(e,so.ToXML )
'
加密要发送的消息
                    If  IsNumeric(msg) Then
'
如果加密失败
                        Dim err As String = wbiz.GetErorDesc(CInt(msg))
'
获取错误描述
                    Else
                        e.WriteString(msg)
                    End If
           
End Select
        End
If

End
Select


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