1、阅读这段系列以前,你必须花半天时间大体阅读微信公众平台的API文档,我尽可能以简短快速的语言与你们分享一个过程html
2、借助微信公众平台SDK Senparc.Weixin for C#,因此你必须对Senparc进行独立的了解 http://weixin.senparc.com/浏览器
3、若是配置遇到困难,下载文章尾部源码进行参考服务器
---------------------------------------------------资源----------------------------------------------------------微信
1.微信公众平台登陆地址:https://mp.weixin.qq.com/app
2.注册为公众帐号后,会让你选择类型,类型分三种:订阅号(我是我的只能选择这个)、服务号、企业微信公众平台
三个类型接口开放程度不一样,咱们做为开发者,没必要理会什么接口,只要成为开发者,所有高级接口均可以调用工具
3.登陆后 成为开发者 post
4. SDK Senparc.Weixin封装了微信6.x的全部高级接口支持微信公众号、企业号、开放平台、微信支付、JSSDK测试
登陆测试号后,能够看到一些配置,公开的接口,及说明,大体浏览全部接口名称以后。能够总结出:微信支付
1.开发环境利用appID,appsecret来得到Token
2.咱们利用拿到的Token来访问提供的接口,如:修改菜单,发送信息
3.咱们提供咱们的服务器地址给微信,关注者经过微信服务器中转站访问咱们的开发环境得到消息
VS2015+MVC5
能够看到系统分配了一个AppID(应用ID)和
其余的须要咱们手动填写服务器配置并启用开发者模式: URL地址,Token令牌,EncodingAESKey消息加密密钥
除了URL,咱们均可以随便填写,那么URL是什么?
图上的URL是咱们的资源服务器,资源服务器是给微信中转的服务器,微信将对这个接口(咱们的站点)进行Get和POST的请求。
查看官方接入文档,咱们来建立一个资源服务器,尝试交互
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数以下表所示:
参数 | 描述 |
signature | 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 |
timestamp | 时间戳 |
nonce | 随机数 |
echostr | 随机字符串 |
开发者经过检验signature对请求进行校验(下面有校验方式)。若确认这次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,不然接入失败。加密/校验流程以下:
1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者得到加密后的字符串可与signature对比,标识该请求来源于微信 |
Install-Package Senparc.Weixin.MP
安装完成再再安装一个MVC的扩展包
Install-Package Senparc.Weixin.MP.MVC
控制器包含一个GET和Post的请求,Get是验证使用,Post是微信提交信息使用,好比关注者发送信息
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Web; using System.Web.Configuration; using System.Web.Mvc; using Senparc.Weixin.MP.Entities.Request; using Senparc.Weixin.MP.MvcExtension; using Senparc.Weixin.MP; using Apps.Web.Areas.WC.Core; namespace Apps.Web.Areas.WC.Controllers { public class WeChatController : Controller { public static readonly string Token ="WeixinToken";//与微信公众帐号后台的Token设置保持一致,区分大小写。 public static readonly string EncodingAESKey = "dEq1BjMgmkEyOvva8pQfFwX95hBLOYKpAzBJ5y9pdSK";//与微信公众帐号后台的EncodingAESKey设置保持一致,区分大小写。 public static readonly string AppId = "wx3.......f5";//与微信公众帐号后台的AppId设置保持一致,区分大小写。 // GET: WC/WeChat public ActionResult Index() { return View(); } [HttpGet] [ActionName("Index")] public Task<ActionResult> Get(string signature, string timestamp, string nonce, string echostr) { return Task.Factory.StartNew(() => { if (CheckSignature.Check(signature, timestamp, nonce, Token)) { return echostr; //返回随机字符串则表示验证经过 } else { return "failed:" + signature + "," + CheckSignature.GetSignature(timestamp, nonce, Token) + "。" + "若是你在浏览器中看到这句话,说明此地址能够被做为微信公众帐号后台的Url,请注意保持Token一致。"; } }).ContinueWith<ActionResult>(task => Content(task.Result)); } /// <summary> /// 最简化的处理流程 /// </summary> [HttpPost] [ActionName("Index")] public Task<ActionResult> Post(PostModel postModel) { return Task.Factory.StartNew<ActionResult>(() => { if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token)) { return new WeixinResult("参数错误!"); } postModel.Token = Token; postModel.EncodingAESKey = EncodingAESKey; //根据本身后台的设置保持一致 postModel.AppId = AppId; //根据本身后台的设置保持一致 var messageHandler = new CustomMessageHandler(Request.InputStream, postModel, 10); messageHandler.Execute(); //执行微信处理过程 return new FixWeixinBugWeixinResult(messageHandler); }).ContinueWith<ActionResult>(task => task.Result); } } }
(代码中的方法CustomMessageHandler)且看做者的解析:http://www.cnblogs.com/szw/p/3414862.html
咱们先设置固定的三个值:
Token ="WeixinToken";//与微信公众帐号后台的Token设置保持一致,区分大小写。
EncodingAESKey = "dEq1BjMgmkEyOvva8pQfFwX95hBLOYKpAzBJ5y9pdSK";//与微信公众帐号后台的EncodingAESKey设置保持一致,区分大小写。
AppId = "wx3.......f5";//与微信公众帐号后台的AppId设置保持一致,区分大小写。
这几个值要和上面的相互对应起来才能!到此,咱们的服务器资源就完成了,能够看到Senparc.Weixin SDK,帮咱们完成不少不少的东西,咱们根本不须要作什么。
此次咱们上一篇文章,环境准备就派上用场了,咱们把刚刚新建的MVC发布到本地的IIS!而后利用内网穿透,得到外网访问
当你的运行与我同样时候,证实这个地址是能够做为资源服务器的,其实就是废话,咱们从头至尾就只建立了一个控制器,加了以下代码,让控制器,可以支持一个GET和POST的Action方法而已。
把URL配置到微信里面
点击菜单:
点击开发者工具,拉到中间位置能够看到,这个测试公众号的二维码,用手机扫一下关注一下
关注以后给他发送一个信息!
若是发送信息后公众号提示:该公众号暂时没法提供服务,请稍后再试
那么要检查配置的APPID已经TOKEN是否一致,我刚开始就是由于配置错了,觉得代码出错,调试了大半天!
(若是你扫我上面哪一个二维码,那么你必定会获得红色那句话)
但愿本文能给你们带来一些启发,咱们开发者是如何与微信交流的。
同时也可见开源SDK Senparc的强大!什么都帮咱们作好了,咱们须要关心的只有咱们的业务。
若是你在动手配置过程遇到什么困难,那么下载示例源码来进行参考
https://yunpan.cn/cMMwK2VAhMxS7 访问密码 b477