C# 微信公众号开发

1.验证token

        /// 
        /// 初始化
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public ContentResult Wechat(string signature, string timestamp, string nonce, string echostr)
        {
            WechatBase wechat = WechatBase.GetWechat("wshl");

            if (string.IsNullOrEmpty(echostr))
            {
                using (Stream req = Request.InputStream)
                {
                    req.Seek(0, System.IO.SeekOrigin.Begin);
                    string xml = new StreamReader(req).ReadToEnd();
                    ///异步调用处理
                    System.Threading.Tasks.Task.Run(() =>
                    {
                        wechat.Subscribe(xml);
                    });
                }

                return Content("success");
            }
            else
            {
                if (wechat.CheckSignature(signature, timestamp, nonce, echostr))
                {
                    return Content(echostr);
                }
                return Content("Error!");
            }
        }
                /// 
        /// 校验消息是否来源于微信
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public bool CheckSign(string signature, string timestamp, string nonce, string echostr)
        {
            List signList = new List();
            signList.Add(timestamp);
            signList.Add(nonce);
            signList.Add(_token);

            signList.Sort();

            string signStr = string.Join("", signList.ToArray());
            byte[] dataToHash = Encoding.ASCII.GetBytes(signStr);

            byte[] hashvalue = ((HashAlgorithm)CryptoConfig.CreateFromName("SHA1")).ComputeHash(dataToHash);

            StringBuilder sb = new StringBuilder();

            foreach (byte b in hashvalue)
            {
                sb.Append(b.ToString("x2"));
            }

            if (signature == sb.ToString())
            {
                return true;
            }
            else
            {
                return false;
            }
        }

2.回复文本消息

/// 
        /// 给用户发送文本消息
        /// 
        /// 
        /// 
        /// 
        public bool SendTextMsg(string openID, string message)
        {
            string url = string.Format("{0}/cgi-bin/message/custom/send?access_token=={1}", _accessPoint, AccessToken);
            string backJson = string.Empty;
            string postJson = new
            {
                touser = openID,
                msgtype = "text",
                text = new 
                {
                    content = message
                }
            }.ToJson();

            if(_http.Post(ref backJson, url, postJson))
            {
                JsonBase result = backJson.Deserialize();
                if(result.ErrCode == 0)
                {
                    return true;
                }
                return false;
            }
            else
            {
                return false;
            }
        }

3.回复图片信息

                /// 
        /// 给用户发送图片消息
        /// 
        /// 
        /// 
        /// 
        public bool SendImgMsg(string openID, string message)
        {
            string url = string.Format("{0}/cgi-bin/message/custom/send?access_token=={1}", _accessPoint, AccessToken);
            string backJson = string.Empty;
            string postJson = new
            {
                touser = openID,
                template_id = "",
                data = ""
            }.ToJson();

            return true;
        }

4.单个发送模板信息

/// 
        /// 单个发送模板消息
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public MessageJson SendTemplateMsg(string openID, string templateID, string linkUrl, object data, string color = "black")
        {
            try
            {
                string url = string.Format("{0}/cgi-bin/message/template/send?access_token={1}", _accessPoint, AccessToken);
                string backJson = string.Empty;
                string postJson = new
                {
                    touser = openID,
                    template_id = templateID,
                    data = data
                }.ToJson();

                if(_http.Post(ref backJson, url, postJson))
                {
                    MessageJson msg = backJson.Deserialize();
                    if(msg == null)
                    {
                        msg = new MessageJson { ErrCode = 99999, ErrMsg = "Wechat:send template message return json:" + backJson };
                    }
                    return msg;
                }
                return new MessageJson { ErrCode = 99999, ErrMsg = "Wechat:send template message request failed!" }; ;
            }
            catch(Exception e)
            {
                Log.WriteLog(e.Message);
                return new MessageJson { ErrCode = 99999, ErrMsg = e.Message };
            }
        }

6.获取推广信息

/// 
        /// 获取推广二维码 
        /// 
        /// QR_LIMIT_SCENE/QR_LIMIT_STR_SCENE
        /// 
        /// 
        public SceneQRResult GetQrUrl(string actionTp, object actionInfo)
        {
            try
            {
                string url = string.Format("{0}/cgi-bin/qrcode/create?access_token={1}", _accessPoint, AccessToken);
                string backJson = string.Empty;
                string postJson = new
                {
                    action_name = actionTp,
                    action_info = new
                    {
                        scene = actionInfo
                    }
                }.ToJson();

                if (_http.Post(ref backJson, url, postJson))
                {
                    SceneQRResult msg = backJson.Deserialize();

                    if(msg == null)
                    {
                        return new SceneQRResult { ErrCode = 9999, ErrMsg = "Wechat:deserialize json exception!\r\n" + backJson };
                    }
                    return msg;
                }
                return new SceneQRResult { ErrCode = 9999, ErrMsg = "Wechat:QRCode request failed!" };
            }
            catch(Exception e)
            {
                Log.WriteLog(e.Message);
                return new SceneQRResult { ErrCode = 9999, ErrMsg = e.Message };
            }
        }

7.显示接收的微信图片
在head中增加

你可能感兴趣的:(C# 微信公众号开发)