C# 微信公眾號(hào)開(kāi)發(fā)

1.驗(yàn)證token

        /// <summary>
        /// 初始化
        /// </summary>
        /// <param name="signature"></param>
        /// <param name="timestamp"></param>
        /// <param name="nonce"></param>
        /// <param name="echostr"></param>
        /// <returns></returns>
        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();
                    ///異步調(diào)用處理
                    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!");
            }
        }
                /// <summary>
        /// 校驗(yàn)消息是否來(lái)源于微信
        /// </summary>
        /// <param name="signature"></param>
        /// <param name="timestamp"></param>
        /// <param name="nonce"></param>
        /// <param name="echostr"></param>
        /// <returns></returns>
        public bool CheckSign(string signature, string timestamp, string nonce, string echostr)
        {
            List<string> signList = new List<string>();
            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.回復(fù)文本消息

/// <summary>
        /// 給用戶(hù)發(fā)送文本消息
        /// </summary>
        /// <param name="openID"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        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<JsonBase>();
                if(result.ErrCode == 0)
                {
                    return true;
                }
                return false;
            }
            else
            {
                return false;
            }
        }

3.回復(fù)圖片信息

                /// <summary>
        /// 給用戶(hù)發(fā)送圖片消息
        /// </summary>
        /// <param name="openID"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        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.單個(gè)發(fā)送模板信息

/// <summary>
        /// 單個(gè)發(fā)送模板消息
        /// </summary>
        /// <param name="openID"></param>
        /// <param name="templateID"></param>
        /// <param name="linkUrl"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        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<MessageJson>();
                    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.獲取推廣信息

/// <summary>
        /// 獲取推廣二維碼 
        /// </summary>
        /// <param name="action">QR_LIMIT_SCENE/QR_LIMIT_STR_SCENE</param>
        /// <param name="objScene"></param>
        /// <returns></returns>
        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<SceneQRResult>();

                    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中增加 <meta name="referrer" content="never">

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容