微信公衆平臺設置URL和Token接收接口事件推送

最近作對接微信閃開發票-微信發票名片,裏面有個接收用戶提交擡頭接口是微信推送事件到公衆號後臺,該事件將發送至開發者填寫的URL(登陸公衆平臺進入【開發者中心設置】)。 開發者可經過事件推送完成數據統計、用戶身份識別等操做。服務器

微信服務器在五秒內收不到響應會斷掉鏈接,而且從新發起請求,總共重試三次。關於重試的消息排重,推薦使用FromUserName + CreateTime 排重。假如服務器沒法保證在五秒內處理並回復,能夠直接回復空串,微信服務器不會對此做任何處理,而且不會發起重試。微信

 

做爲一名微信公衆號開發者,別人進入你的微信公衆號,確定會看見某些網頁,或者給你發某些信息,你須要實時自動回覆,因此你須要一個24小時爲用戶服務的服務器。咱們所要填寫的url就是你提供的服務器的地址,前提是這個服務器的地址你要可以訪問,且可以控制。而token是用來驗證的。加密

 

/// <summary>
    /// 微信用戶提交發票擡頭-事件推送頁面
    /// </summary>
    public class WechartTitleController : Controller
    {
        // GET: WechartTitle
        public void Index()
        {
            #region 驗證token
            string echoString = Request.QueryString["echoStr"];
            string signature = Request.QueryString["signature"];
            string timestamp = Request.QueryString["timestamp"];
            string nonce = Request.QueryString["nonce"];

            if (CheckSignature())
            {
                if (!string.IsNullOrEmpty(echoString))
                {
                    Response.Write(echoString);
                }
            } 
            #endregion
        }
        private bool CheckSignature()
        {
            string Token = "12345678";
            string signature = Request.QueryString["signature"];
            string timestamp = Request.QueryString["timestamp"];
            string nonce = Request.QueryString["nonce"];
            string[] ArrTmp = { Token, timestamp, nonce };
            Array.Sort(ArrTmp);   //字典排序  
            string tmpStr = string.Join("", ArrTmp);
            tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
            tmpStr = tmpStr.ToLower();
            if (tmpStr == signature)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

 

checkSignature是驗證簽名的,當開發者在公衆平臺提交URL和token時,微信服務器將發送GET請求到填寫的URL上,而且帶上四個參數:url

參數描述
signature 微信加密簽名 
timestamp 時間戳 
nonce 隨機數 
echostr 隨機字符串

開發者在本身的網頁內請公衆平臺的請求作簽名驗證,經過以後輸出echostr字段便可。至於具體的驗籤規則,能夠看checkSignature的實現,這裏再也不贅述。spa

相關文章
相關標籤/搜索