zoukankan      html  css  js  c++  java
  • C#-MVC开发微信应用(1)--开始使用微信接口

    1、微信账号

    要开发使用微信的平台API,就需要到微信的公众平台(https://mp.weixin.qq.com/)去注册,拥有一个服务号或者订阅号,服务号主要面对企业和组织,订阅号主要面向组织和个人,他们之间有一定的差异,根据不同的需要自己申请对应的账号即可。

    2、微信菜单定义

    微信有两种方式的菜单定义,一种是编辑模式,一种是开发模式,两者互斥,也就是说,一旦我们采用了开发模式,就不能使用编辑模式了,反过来也一样。编辑下的菜单,其实也是可以管理的,但是微信不支持,觉得很不爽。

    一般情况下,如果我们刚刚申请了微信号码,可以使用编辑菜单测试一下,根据说明编辑一些菜单试试。虽然微信说24小时内更新,不过一般很快,最快可能一两分钟就更新了,感觉还是不错的。

    使用开发者模式,你需要根据微信的要求,在服务器上放置一个页面链接,使用C#开发的,可以采用***.ashx的命名方式,使用Asp.NET的一般处理程序即可,不需要使用普通的页面,或者也可以使用MVC进行对接。

    使用开发模式的菜单,也就是可以调用微信API进行菜单创建的工作,对于调用微信的API(微信有很多API可以调用),我们需要知道,有几个参数的重要性,所以在开发模式打开的时候,会给你列出这些参数,如下所示。

    在进入自己的订阅号后里面有一个开发工具:

     3、接入微信的链接处理

    上面说了,你申请开发模式对菜单或者对其他API的调用,你需要顺利通过接入微信的测试,也就是确认你填写的链接存在并能顺利经过微信的回调测试。微信提供了一个PHP的页面处理例子,如果我们是C#开发的呢,可以搜一下就会得到答案,我的处理方式如下所示。

    创建一个MVC处理程序,然后在其处理页面里面增加一个处理逻辑,如果是非POST方式的内容,就是表示微信进行的Get测试,你需要增加一些处理逻辑,把它给你的内容传回去即可,如果是POST方式的,就是微信服务器对接口消息的请求操作了,后面介绍。

            /// <summary>
            /// 微信后台验证地址(使用Get),微信后台的“接口配置信息”的Url
            /// </summary>
            [HttpGet]
            public ActionResult Index(string signature, string timestamp, string nonce, string echostr)
            {
                string token = System.Configuration.ConfigurationManager.AppSettings["Token"];
                var ent = "";
                if (CheckSignature(signature, timestamp, nonce, token, out ent))
                {
                    return Content("参数错误!");
                }
                return Content(echostr); //返回随机字符串则表示验证通过
    
            }

    通用验证方法:

            /// <summary>
            /// 检查签名是否正确:
            /// http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97
            /// </summary>
            /// <param name="signature"></param>
            /// <param name="timestamp"></param>
            /// <param name="nonce"></param>
            /// <param name="token">AccessToken</param>
            /// <returns>
            /// true: check signature success
            /// false: check failed, 非微信官方调用!
            /// </returns>
            public static bool CheckSignature(string signature, string timestamp, string nonce, string token, out string ent)
            {
                var arr = new[] { token, timestamp, nonce }.OrderBy(z => z).ToArray();
                var arrString = string.Join("", arr);
                var sha1 = System.Security.Cryptography.SHA1.Create();
                var sha1Arr = sha1.ComputeHash(Encoding.UTF8.GetBytes(arrString));
                StringBuilder enText = new StringBuilder();
                foreach (var b in sha1Arr)
                {
                    enText.AppendFormat("{0:x2}", b);
                }
                ent = enText.ToString();
                return signature == sha1Arr.ToString();
            }

    如果是post请求就是开始进行交互了(暂时先设置为空,不然公众号会返回:该公众号暂时无法提供服务,请稍后再试)

            /// <summary>
            /// 用户发送消息后,微信平台自动Post一个请求到这里,并等待响应XML。
            /// </summary>
            [HttpPost]
            public ActionResult Index()
            {
                Stream requestStream = System.Web.HttpContext.Current.Request.InputStream;
                byte[] requestByte = new byte[requestStream.Length];
                requestStream.Read(requestByte, 0, (int)requestStream.Length);
                string requestStr = Encoding.UTF8.GetString(requestByte);
    
                //SNFWeiXinProcess.Log("请求值:" + requestStr);
                //return Content(SNFWeiXinProcess.Run(requestStr));
                //return Content(sss(signature, timestamp, nonce, echostr) );
                //return Content(ReceiveXml());
                return Content("");
    
            }

    以上就是从申请到MVC程序连接微信账号的过程,之后会讲到怎么与微信进行交互

  • 相关阅读:
    3D照片放大展示窗口
    [NOI2015]品酒大会
    [SDOI2016]排列计数
    [SCOI2008]奖励关
    HDU4336 Card Collector
    CF540D Bad Luck Island
    [NOI2016]网格
    HDU3076 ssworld VS DDD
    [USACO10HOL]赶小猪
    CF113D Museum
  • 原文地址:https://www.cnblogs.com/yechangzhong-826217795/p/6519081.html
Copyright © 2011-2022 走看看