VB.net 微信公众平台开发(一) Token验证

登录https://mp.weixin.qq.com/ 后,在公众平台后台管理页面 – 开发者中心页,点击“修改配置”按钮,填写URL、Token和EncodingAESKey,其中URL是开发者用来接收微信服务器数据的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。同时,开发者可选择消息加解密方式:明文模式、兼容模式和安全模式。模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。加解密方式的默认状态为明文模式,选择兼容模式和安全模式需要提前配置好相关加解密代码,详情请参考消息体签名及加解密部分的文档。



上图说的这个URL就是微信公众平台服务器后台和我们二次开发的网站后台的通信地址,所有微信方向我们二次开发的站网通信都由这个地址来完成,所以这里我建议使用.net 的一般处理程序ashx页面来做这个通信页面。


Token就是这个通信验证的钥匙,必须为英文或数字,长度为3-32字符。

微信公众平台服务器后端会提交 4个参数到我们的ashx页面,我们的ashx就要完成安全验证。安全验证的方式是sha1加密

此外请注意,微信公众号接口只支持80接口。通信方式为Get

OK,我们来说说具体的代码

    Dim Token As String = "arctichome"
    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        Dim httpMethod As String = context.Request.HttpMethod.ToUpper()
        If httpMethod = "GET" Then
            context.Response.ContentType = "text/plain"
            Dim echoStr As String = context.Request("echoStr")
            If Not String.IsNullOrEmpty(echoStr) Then
                Dim signature As String = context.Request.QueryString("signature") ' 微信加密签名
                Dim timestamp As String = context.Request.QueryString("timestamp") ' 时间戳
                Dim nonce As String = context.Request.QueryString("nonce") ' 随机数
                echoStr = context.Request.QueryString("echostr") ' 随机字符串
                ' 微信请求参数非空验证
                If Not String.IsNullOrEmpty(signature) AndAlso Not String.IsNullOrEmpty(timestamp) AndAlso Not String.IsNullOrEmpty(nonce) AndAlso Not String.IsNullOrEmpty(echoStr) Then
                    If CheckSignature(signature, timestamp, nonce, Token) Then
                        context.Response.Write(echoStr) '验证通过,响应微信公众平台后台服务器
                        Exit Sub
                    End If
                End If
            End If
        End If
    End Sub
Token验证通过后马上就对微信公众平台的后台服务进行响应,对这个响应时间微信方要求是速度是很快的。

那对Sha1加密进程如下:

    Public Function CheckSignature(ByVal signature As String, ByVal timestamp As String, ByVal nonce As String, ByVal WeiXinToken As String) As Boolean
        Dim stringList As New List(Of String)() From {WeiXinToken, timestamp, nonce}
        ' 字典排序
        stringList.Sort()
        Return Sha1Encrypt(String.Join("", stringList)) = signature
    End Function
    ''' <summary>
    ''' 对字符串SHA1加密
    ''' </summary>
    ''' <param name="targetString">源字符串</param>
    ''' <returns>加密后的十六进制字符串</returns>
    Private Function Sha1Encrypt(ByVal targetString As String) As String
        Dim byteArray As Byte() = Encoding.[Default].GetBytes(targetString)
        Dim hashAlgorithm As HashAlgorithm = New SHA1CryptoServiceProvider()
        byteArray = hashAlgorithm.ComputeHash(byteArray)
        Dim stringBuilder As New StringBuilder()
        For Each item As Byte In byteArray
            stringBuilder.AppendFormat("{0:x2}", item)
        Next
        Return stringBuilder.ToString()
    End Function

以上就是这个VB.net 对微信公众平台的Token验证过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值