(2)Asp.net网页开发
1. 打开vs,创建一个Asp.net web应用程序,名称、路径以及Framework的版本根据自己的情况设置和选择。
此主题相关图片如下:4.png
2. 默认会生成一个Default.aspx的页面,右键选择查看代码,看到代码如下
Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
End Class
在Page_Load过程添加代码:
Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim echostr As String = Request("echostr")
If Request.HttpMethod = "GET" Then
Response.Write(echostr) '返回随机字符串则表示验证通过
Response.End()
End If
End Sub
End Class
在上面微信服务器端配置的时候,如果点击提交,微信就会调用URL中配置的地址,传入一些签名验证的数据。
echostr是其中一个。我们在页面中获取到echostr数据之后原样返回给微信,微信收到这串数据,就表示开发者的服务器验证通过了。如果没有返回这串数据而是返回其它内容,微信就会认为验证错误,而返回Token验证错误的提示。
3. 保存生成网站,然后发布出去。
(3)网站发布
1. 安装并确保服务器IIS可以使用,具体方法百度一下
https://www.baidu.com/s?tn=87048150_pg&word=IIS
2. 打开IIS,添加一个站点,比如MicroMsgWebApp
3. 在上面创建的Aspnet项目中右键菜单选择发布
此主题相关图片如下:5.png
4. 进入发布web页面
发布方法根据自己情况进行选择,如果开发电脑和服务器在一个局域网内,可以采用文件系统方式,跨网段的话可以采用ftp或者web部署的方式。
这里使用文件系统方式,目标位置选择IIS中配置好的网站,点击发布就完成了
此主题相关图片如下:6.png
5. 外网的访问设置
a、服务器网络对外需要有固定的IP,如果没有可以上网搜索下如何设置动态域名如花生壳等,这里不做描述
b、如果是固定IP,在路由中做端口映射配置,端口必须使用80,因为现在微信接口服务只认80端口。web服务可以不用设置DMZ主机。
(4)继续微信端的配置
1. 在服务器配置中填好URL,比如
http://120.198.222.222/MicroMsgWebApp/Default.aspx
2. 点击提交,如果URL可以正常连接的话,就可以看到修改成功的提示了,否则就会提示Token验证失败。
(5)关于接口安全验证
1. 实际上微信接口在调用服务器URL(即我们开发的网页)时,传递了4个和签名有关的参数,分别是
signature :微信加密签名
timestamp :当前时间戳
nonce :随机数
echostr :随机字符串
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,则原样返回echostr参数内容,微信才认为是正确的服务调用者,则接入生效,否则接入失败。
2. 加密/校验流程:
a. 将token、timestamp、nonce三个参数进行字典序排序
b. 将三个参数字符串拼接成一个字符串进行sha1加密
c. 加密后的字符串可与signature对比,如果一致则说明请求验证通过
函数如下:
Public Shared Function Verify(ByVal token As String, ByVal timeStamp As String, ByVal nonce As String, ByVal signature As String) As Boolean
Dim arrTmp() As String = {token, timeStamp, nonce}
Array.Sort(arrTmp)
Dim tmpStr As String = String.Join("", arrTmp)
tmpStr = Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1")
tmpStr = tmpStr.ToLower()
Return tmpStr = signature
End Function
在Page_Load过程中增加验证代码:
If Request.HttpMethod = "GET" Then
If Verify(Token, timestamp, nonce, signature) Then
Response.Write(echostr) '返回随机字符串则表示验证通过
Response.End()
End If
End If
[此贴子已经被作者于2015/11/25 10:14:17编辑过]