asp.net mvc 5 微信接入VB版 - 接入认证
微信接入官方文档是php的,网上被抄好几遍的代码是c#的,就是没vb的。今天我把这个坑填了,做vb版的接入认证。
首先是照着开发文档把微信接入的模型写好。在Models文件夹新建一个Model
Public Class WeChatRequestModel ''' <summary> ''' 加密签名 ''' </summary> Public Property signature$ ''' <summary> ''' 时间戳 ''' </summary> Public Property timestamp$ ''' <summary> ''' 随机数 ''' </summary> Public Property nonce$ ''' <summary> ''' 用于传回的随机字符串 ''' </summary> Public Property echostr$ End Class
模型建立完成之后,新建个Controller。
微信认证是把nonce,Token,timestamp排序,然后算SHA1与signature比较。Token作为一个字符串常量,根据申请时填写的Token编写。
Const Token = "你申请的Token"
剩下的代码就是把那个php代码翻译一下,注意不要用过时的成员比如FormsAuthentication,免得以后迁移到asp.net core要重写代码:
1 Private Function SHA1$(str$) 2 Return BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(str))).Replace("-", "")
3 End Function 4 Private Function CheckSignature(data As WeChatRequestModel) As Boolean 5 Return data.signature = SHA1(String.Join("", Aggregate s In {data.nonce, Token, data.timestamp} Order By s Into ToArray)).ToLower() 6 End Function 7 <HttpGet> 8 Public Sub Authenticate(data As WeChatRequestModel) 9 If CheckSignature(data) AndAlso Not String.IsNullOrEmpty(data.echostr) Then 10 Response.Write(data.echostr) 11 Response.End() 12 End If 13 End Sub
编辑路由设定, 把模板里面带的用不上的主页路由去掉,换成微信接入认证的
Public Module RouteConfig Public Sub RegisterRoutes(routes As RouteCollection) routes.IgnoreRoute("{resource}.axd/{*pathInfo}") routes.MapRoute( name:="Authenticate", url:="{controller}/{action}/{id}", defaults:=New With {.controller = "Home", .action = "Authenticate", .id = UrlParameter.Optional} ) End Sub End Module
这样修改后,只要填写Url的时候写上
你的域名/Home/Authenticate
然后把Token之类的东西写上就行了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步