刚换了个新环境,哎这都快一个月了,还没适应过来,还是怀念老地方呀。老板让开发一个基于微信平台的开发项目,而且是用net实现。当时就蒙了,微信就用了一会个人赶脚不好,所以果断不用,现在让开发,而且查了一些资料很少有。net的,更让我丈二和尚了,当时就有点想打退堂鼓的举动。哎,米有办法在男友的鼓励下继续奋战,相信自己没有实现不了的。现在回头想想也是现在的忙和累与烦恼等到成功的那刻回头想想都是值得的。好了废话不多了,现在开始上正文。
如果想通过微信去开发(当然,指的是开发模式下),首先 建议先申请一个服务号,因为服务号的功能与接口也多,有些功能订阅号是实现不了的。另外申请过以后必须得通过微信 认证才能开发,好像是得付300大洋,高级接口如果需要的话也要通过微信认证才能获得的。
一切都准备齐全后,开始行动。这些代码也就开始认证的时候用一次,以后就不用了: 但是实践证明这些是每次都要认证的。
暂时先借用一下这位大哥的代码吧,因为起初是跟着他的代码慢慢行进的。不过最后就用了别的简单的方式开发了。到最后可能会给大家整理出来一个方案吧。
原文出处:http://blog.csdn.net/hemeng1980/article/details/19501945
const string Token = "XXXXX";//你的token protected void Page_Load(object sender, EventArgs e) { string postStr = ""; if (Request.HttpMethod.ToLower() == "post") { System.IO.Stream s = System.Web.HttpContext.Current.Request.InputStream; byte[] b = new byte[s.Length]; s.Read(b, 0, (int)s.Length); postStr = System.Text.Encoding.UTF8.GetString(b); if (!string.IsNullOrEmpty(postStr)) { //ResponseMsg(postStr); Response.Write(ResponseMsg(postStr)); Response.End(); } //WriteLog("postStr:" + postStr); } else { Valid(); } } /// <summary> /// 验证微信签名 /// </summary> /// * 将token、timestamp、nonce三个参数进行字典序排序 /// * 将三个参数字符串拼接成一个字符串进行sha1加密 /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。 /// <returns></returns> private bool CheckSignature() { string signature = Request.QueryString["signature"].ToString(); string timestamp = Request.QueryString["timestamp"].ToString(); string nonce = Request.QueryString["nonce"].ToString(); string[] ArrTmp = { Token, timestamp, nonce }; Array.Sort(ArrTmp); //字典排序 string tmpStr = string.Join("", ArrTmp); tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); tmpStr = tmpStr.ToLower(); if (tmpStr == signature) { return true; } else { return false; } } private void Valid() { string echoStr = Request.QueryString["echoStr"].ToString(); if (CheckSignature()) { if (!string.IsNullOrEmpty(echoStr)) { Response.Write(echoStr); Response.End(); } } } /// <summary> /// 写日志(用于跟踪) /// </summary> private void WriteLog(string strMemo) { string filename = Server.MapPath("/logs/BugLog.txt"); if (!Directory.Exists(Server.MapPath("//logs//"))) Directory.CreateDirectory("//logs//"); StreamWriter sr = null; try { if (!File.Exists(filename)) { sr = File.CreateText(filename); } else { sr = File.AppendText(filename); } sr.WriteLine(strMemo); } catch { } finally { if (sr != null) sr.Close(); } }
当然很重要的是,你得先把接口文档说明看看,最起码得浏览一遍知道规范和说明。当然如果有好的见解和方法的盆友可以交流交流啊。