一、开发前的准备
1.要有一个公网的地址空间(Azure,阿里云....)
2.自己定义一个Token(自己定义一个字符串就行,后面写代码时候也会用到)
3.信息在客户端,微信服务器,网站之间的处理过程
二、验证服务器地址的有效性
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
参数 | 描述 |
---|---|
signature | 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 |
timestamp | 时间戳 |
nonce | 随机数 |
echostr | 随机字符串 |
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
1.创建一个MVC的空工程
2.创建一个微信使用的Controller
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 using System.Web.Security; 7 namespace MvcWeiXin.Controllers 8 { 9 public class WeChatController : Controller 10 { 11 public const string TOKEN = "*********"; 12 // 13 // GET: /WeChat/ 14 [HttpGet] 15 public string Index(string signature, string timestamp, string nonce, string echoStr) 16 { 17 if (checkSignature(signature, timestamp, nonce)) 18 { 19 return echoStr; 20 } 21 return string.Empty; 22 } 23 /// <summary> 24 /// 加密/校验流程如下: 25 ///1. 将token、timestamp、nonce三个参数进行字典序排序 26 ///2. 将三个参数字符串拼接成一个字符串进行sha1加密 27 ///3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 28 /// </summary> 29 /// <param name="signature"></param> 30 /// <param name="timestamp"></param> 31 /// <param name="nonce"></param> 32 /// <returns></returns> 33 private bool checkSignature(string signature, string timestamp, string nonce) 34 { 35 string[] checkArray = { TOKEN, timestamp, nonce }; 36 //进行字典排序 37 Array.Sort(checkArray); 38 //将数组内的项进行串联 39 string resultTempStr = string.Join("", checkArray); 40 //将字符串进行SHA1加密 41 string resultStr = FormsAuthentication.HashPasswordForStoringInConfigFile(resultTempStr, "SHA1"); 42 if (resultStr.ToLower() == signature) 43 { 44 return true; 45 } 46 return false; 47 } 48 } 49 }
四、将项目发布到虚拟主机里面
1.关于网络主机的选择
这里我使用了万网的免费虚拟主机,简单申请请看下面的图片,具体申请的步骤就不赘述了。
2.发布项目
这里我采用了先在本地生成文件的方式,然后再上传。
发布成功后,桌面就会出现生成后的文件,然后采用FTP的方式上传到网络空间就行了
这里我遇到了一个问题,就是我在上传到万网的时候,出现了以下的信息:
是什么原因导致的我还不清楚,解决办法如下,在你的工程中运行"程序包管理控制台",执行 Update-Package Microsoft.AspNet.WebApi -reinstall
然后重新发布一下,然后上传到虚拟主机
3.测试一下是否成功
如果下图点击“提交”成功的话,证明整个过程就已经通了