asp.net微信公众平台开发

220 篇文章 18 订阅
140 篇文章 0 订阅

http://blog.csdn.net/yijincoldplay/article/details/9289335

微信公众平台接口指南

微信公众平台的开发比较简单,首先是网址接入

公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:

参数描述
signature微信加密签名
timestamp时间戳
nonce随机数
echostr随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。

signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

加密/校验流程:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
[csharp]  view plain copy
  1. /// <summary>  
  2.  /// 验证签名  
  3.  /// </summary>  
  4.  /// <param name="signature"></param>  
  5.  /// <param name="timestamp"></param>  
  6.  /// <param name="nonce"></param>  
  7.  /// <returns></returns>  
  8.  public static bool CheckSignature(String signature, String timestamp, String nonce)  
  9.  {  
  10.      String[] arr = new String[] { token, timestamp, nonce };  
  11.      // 将token、timestamp、nonce三个参数进行字典序排序    
  12.      Array.Sort<String>(arr);  
  13.   
  14.      StringBuilder content = new StringBuilder();  
  15.      for (int i = 0; i < arr.Length; i++)  
  16.      {  
  17.          content.Append(arr[i]);  
  18.      }  
  19.   
  20.      String tmpStr = SHA1_Encrypt(content.ToString());  
  21.   
  22.   
  23.      // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信    
  24.      return tmpStr != null ? tmpStr.Equals(signature) : false;  
  25.  }  
  26.   
  27.   
  28.  /// <summary>  
  29.  /// 使用缺省密钥给字符串加密  
  30.  /// </summary>  
  31.  /// <param name="Source_String"></param>  
  32.  /// <returns></returns>  
  33.  public static string SHA1_Encrypt(string Source_String)  
  34.  {  
  35.      byte[] StrRes = Encoding.Default.GetBytes(Source_String);  
  36.      HashAlgorithm iSHA = new SHA1CryptoServiceProvider();  
  37.      StrRes = iSHA.ComputeHash(StrRes);  
  38.      StringBuilder EnText = new StringBuilder();  
  39.      foreach (byte iByte in StrRes)  
  40.      {  
  41.          EnText.AppendFormat("{0:x2}", iByte);  
  42.      }  
  43.      return EnText.ToString();  
  44.  }  

接入后是消息推送 当普通微信用户向公众账号发消息时,微信服务器将POST该消息到填写的URL上。
[csharp]  view plain copy
  1.     protected void Page_Load(object sender, EventArgs e)  
  2.     {  
  3.   
  4.         if (Request.HttpMethod.ToUpper() == "GET")  
  5.         {  
  6.             // 微信加密签名    
  7.             string signature = Request.QueryString["signature"];  
  8.             // 时间戳    
  9.             string timestamp = Request.QueryString["timestamp"];  
  10.             // 随机数    
  11.             string nonce = Request.QueryString["nonce"];  
  12.             // 随机字符串    
  13.             string echostr = Request.QueryString["echostr"];  
  14.             if (WeixinServer.CheckSignature(signature, timestamp, nonce))  
  15.             {  
  16.                 Response.Write(echostr);  
  17.             }  
  18.   
  19.         }  
  20.         else if (Request.HttpMethod.ToUpper() == "POST")  
  21.         {  
  22.   
  23.            StreamReader stream = new StreamReader(Request.InputStream);  
  24.            string xml = stream.ReadToEnd();  
  25.   
  26.            processRequest(xml);  
  27.         }  
  28.   
  29.    
  30.     }  
  31.   
  32.   
  33.     /// <summary>  
  34.     /// 处理微信发来的请求   
  35.     /// </summary>  
  36.     /// <param name="xml"></param>  
  37.     public void processRequest(String xml)  
  38.     {  
  39.         try  
  40.         {  
  41.   
  42.             // xml请求解析    
  43.             Hashtable requestHT = WeixinServer.ParseXml(xml);  
  44.   
  45.             // 发送方帐号(open_id)    
  46.             string fromUserName = (string)requestHT["FromUserName"];  
  47.             // 公众帐号    
  48.             string toUserName = (string)requestHT["ToUserName"];  
  49.             // 消息类型    
  50.             string msgType = (string)requestHT["MsgType"];  
  51.   
  52.             //文字消息  
  53.             if (msgType == ReqMsgType.Text)  
  54.             {  
  55.                // Response.Write(str);  
  56.   
  57.                string content = (string)requestHT["Content"];  
  58.                 if(content=="1")  
  59.                 {  
  60.                      // Response.Write(str);  
  61.                     Response.Write(GetNewsMessage(toUserName, fromUserName));  
  62.                     return;  
  63.                 }  
  64.                 if (content == "2")  
  65.                 {  
  66.                     Response.Write(GetUserBlogMessage(toUserName, fromUserName));  
  67.                      return;  
  68.                 }  
  69.                 if (content == "3")  
  70.                 {  
  71.                     Response.Write(GetGroupMessage(toUserName, fromUserName));  
  72.                    return;  
  73.                 }  
  74.                 if (content == "4")  
  75.                 {  
  76.                     Response.Write(GetWinePartyMessage(toUserName, fromUserName));  
  77.                     return;  
  78.                 }  
  79.                 Response.Write(GetMainMenuMessage(toUserName, fromUserName, "你好,我是vinehoo,"));   
  80.   
  81.            }  
  82.            else if (msgType == ReqMsgType.Event)  
  83.            {  
  84.                // 事件类型    
  85.                String eventType = (string)requestHT["Event"];  
  86.                // 订阅    
  87.                if (eventType==ReqEventType.Subscribe)  
  88.                {  
  89.                      
  90.                    Response.Write(GetMainMenuMessage(toUserName, fromUserName, "谢谢您的关注!,"));  
  91.                      
  92.                }  
  93.                // 取消订阅    
  94.                else if (eventType==ReqEventType.Unsubscribe)  
  95.                {  
  96.                    // TODO 取消订阅后用户再收不到公众号发送的消息,因此不需要回复消息    
  97.                }  
  98.                // 自定义菜单点击事件    
  99.                else if (eventType==ReqEventType.CLICK)  
  100.                {  
  101.                    // TODO 自定义菜单权没有开放,暂不处理该类消息    
  102.                }    
  103.            }  
  104.            else if (msgType == ReqMsgType.Location)  
  105.            {  
  106.            }  
  107.   
  108.     
  109.         }  
  110.         catch (Exception e)  
  111.         {  
  112.               
  113.         }  
  114.     }<pre name="code" class="csharp">    protected void Page_Load(object sender, EventArgs e)  
  115.     {  
  116.   
  117.         if (Request.HttpMethod.ToUpper() == "GET")  
  118.         {  
  119.             // 微信加密签名    
  120.             string signature = Request.QueryString["signature"];  
  121.             // 时间戳    
  122.             string timestamp = Request.QueryString["timestamp"];  
  123.             // 随机数    
  124.             string nonce = Request.QueryString["nonce"];  
  125.             // 随机字符串    
  126.             string echostr = Request.QueryString["echostr"];  
  127.             if (WeixinServer.CheckSignature(signature, timestamp, nonce))  
  128.             {  
  129.                 Response.Write(echostr);  
  130.             }  
  131.   
  132.         }  
  133.         else if (Request.HttpMethod.ToUpper() == "POST")  
  134.         {  
  135.   
  136.            StreamReader stream = new StreamReader(Request.InputStream);  
  137.            string xml = stream.ReadToEnd();  
  138.   
  139.            processRequest(xml);  
  140.         }  
  141.   
  142.    
  143.     }  
  144.   
  145.   
  146.     /// <summary>  
  147.     /// 处理微信发来的请求   
  148.     /// </summary>  
  149.     /// <param name="xml"></param>  
  150.     public void processRequest(String xml)  
  151.     {  
  152.         try  
  153.         {  
  154.   
  155.             // xml请求解析    
  156.             Hashtable requestHT = WeixinServer.ParseXml(xml);  
  157.   
  158.             // 发送方帐号(open_id)    
  159.             string fromUserName = (string)requestHT["FromUserName"];  
  160.             // 公众帐号    
  161.             string toUserName = (string)requestHT["ToUserName"];  
  162.             // 消息类型    
  163.             string msgType = (string)requestHT["MsgType"];  
  164.   
  165.             //文字消息  
  166.             if (msgType == ReqMsgType.Text)  
  167.             {  
  168.                // Response.Write(str);  
  169.   
  170.                string content = (string)requestHT["Content"];  
  171.                 if(content=="1")  
  172.                 {  
  173.                      // Response.Write(str);  
  174.                     Response.Write(GetNewsMessage(toUserName, fromUserName));  
  175.                     return;  
  176.                 }  
  177.                 if (content == "2")  
  178.                 {  
  179.                     Response.Write(GetUserBlogMessage(toUserName, fromUserName));  
  180.                      return;  
  181.                 }  
  182.                 if (content == "3")  
  183.                 {  
  184.                     Response.Write(GetGroupMessage(toUserName, fromUserName));  
  185.                    return;  
  186.                 }  
  187.                 if (content == "4")  
  188.                 {  
  189.                     Response.Write(GetWinePartyMessage(toUserName, fromUserName));  
  190.                     return;  
  191.                 }  
  192.                 Response.Write(GetMainMenuMessage(toUserName, fromUserName, "你好,我是vinehoo,"));   
  193.   
  194.            }  
  195.            else if (msgType == ReqMsgType.Event)  
  196.            {  
  197.                // 事件类型    
  198.                String eventType = (string)requestHT["Event"];  
  199.                // 订阅    
  200.                if (eventType==ReqEventType.Subscribe)  
  201.                {  
  202.                      
  203.                    Response.Write(GetMainMenuMessage(toUserName, fromUserName, "谢谢您的关注!,"));  
  204.                      
  205.                }  
  206.                // 取消订阅    
  207.                else if (eventType==ReqEventType.Unsubscribe)  
  208.                {  
  209.                    // TODO 取消订阅后用户再收不到公众号发送的消息,因此不需要回复消息    
  210.                }  
  211.                // 自定义菜单点击事件    
  212.                else if (eventType==ReqEventType.CLICK)  
  213.                {  
  214.                    // TODO 自定义菜单权没有开放,暂不处理该类消息    
  215.                }    
  216.            }  
  217.            else if (msgType == ReqMsgType.Location)  
  218.            {  
  219.            }  
  220.   
  221.     
  222.         }  
  223.         catch (Exception e)  
  224.         {  
  225.               
  226.         }  
  227.     }</pre><br>  
  228. <pre></pre>  
  229. <br>  
  230. <br>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
概述 本平台主要功能是针对微信商家公众号提供与众不同的、有针对性的营销推广服务。通过沐雪微信平台,用户可以轻松管理自己的微信各类信息,对微信公众账号进行维护、开展智能机器人、在线发优惠劵、抽奖、刮奖、派发会员卡、打造微官网、开启微团购等多种活动,对微信营销实现有效监控,极大扩展潜在客户群和实现企业的运营目标。沐雪微信平台很好的弥补了微信公众平台本身功能不足、针对性不强、交互不便利的问题,为商家公众账号提供更为贴心的、且是核心需求的功能和服务。在线优惠劵、转盘抽奖、微信会员卡等推广服务更是让微信成为商家推广的利器。智能客服的可调教功能让用户真正从微信繁琐的日常客服工作中解脱出来,真正成为商家便利的新营销渠道。 二、源码特点 1、微信公众平台开发,对于公众平台所有功能进行完整开发。 2、多用户:可同时进行多公众号的管理和配置。 3、直接性:购买者可直接购买细微修改即是成品的平台商品。 4、开发语言:asp.net,C# ,webform,数据库sqlserver 2005 三、功能介绍 1、菜单回复:关注时回复、默认回复、文本回复、图文回复、语音回复、请求回复、LBS回复。 2、自定义菜单:公众号自定义菜单设置 3、用户列表管理:获取关注公众号的账户信息进行管理 4、微官网:各种微官网模板可自行配置,头部幻灯片,底部,分类模块配置,内容配置 5、微商城:商城模板配置、产品分类管理、商品信息管理、商品录入、客户资源管理、订单管 理、物流配送方式设置 6、支付方式:微信支付,货到付款。 7、微汽车[大模块]、微酒店、点餐系统 8、微会员卡:会员卡商家、会员卡商城、会员卡头部广告设计 9、用户管理:微信用户管理、系统角色管理、系统操作日志 10、后台菜单:后台导航菜单管理 11、系统设置:网站基本信息设置、功能权限设置、短信平台设置、邮件发送设置、文件上传设 置 12、代理商管理:代理商发展下线。 四、环境要求 开发环境: 操作系统:windows7,8 软件:vs2012+sqlserver2005 发布环境: 操作系统:windows server 2003,2008 软件:.netframework4.0,iis6+,sqlserver 2005 后续会更新vs2017+sql2012 ,新功能的开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值