微信公眾號推廣,ASP.NET之MVC 微信公眾號授權給第三方平臺的技術實現流程一(獲取第三方平臺access_token)...

 2023-12-06 阅读 21 评论 0

摘要:“出于安全考慮,在第三方平臺創建審核通過后,微信服務器每隔10分鐘會向第三方的消息接收地址推送一次component_verify_ticket,用于獲取第三方平臺接口調用憑據”。這是文檔中的原話,也就是說我們在獲取access_token的時候是要先得到component_ve

“出于安全考慮,在第三方平臺創建審核通過后,微信服務器每隔10分鐘會向第三方的消息接收地址推送一次component_verify_ticket,用于獲取第三方平臺接口調用憑據”。這是文檔中的原話,也就是說我們在獲取access_token的時候是要先得到component_verify_ticket的,而component_verify_ticket每10分鐘向我們的接收地址推送一次

而域名地址是由我們自己去服務器上去部署,如下圖:

?

 /// <summary>/// 一.推送component_verify_ticket/// </summary>/// <param name="collection"></param>/// <returns></returns>[HttpPost]public ActionResult Index(FormCollection collection){//在公眾號第三方平臺創建審核通過后,微信服務器會向其“授權事件接收URL”每隔10分鐘定時推送component_verify_ticket。第三方平臺方在收到ticket推送后也需進行解密byte[] data = Request.BinaryRead(Request.TotalBytes);string postData = Encoding.Default.GetString(data);//公眾號第三方平臺的appidstring appId = ConfigurationManager.AppSettings["WeixinAppID"];//第三方平臺申請時填寫的接收消息的校驗tokenstring token = ConfigurationManager.AppSettings["WeixinToken"];//第三方平臺申請時填寫的接收消息的加密symmetric_keystring encodingAesKey = ConfigurationManager.AppSettings["WeixinEncodingAESKey"];string sMsg = "";//解密后的內容var msg = new Tencent.WXBizMsgCrypt(token, encodingAesKey, appId);int ret = msg.DecryptMsg(Request.QueryString["msg_signature"],Request.QueryString["timestamp"],Request.QueryString["nonce"],postData,ref sMsg);var xDoc = XDocument.Parse(sMsg);var q = (from c in xDoc.Elements() select c).ToList();var infoType = q.Elements("InfoType").First().Value;switch (infoType){case "component_verify_ticket"://q.Elements("ComponentVerifyTicket").First()//這里就是component_verify_ticket的值,保存起來就可以了,處理完成后在頁面上輸出success,通知微信服務器已經接收到ticketstring _AppId = q.Elements("AppId").First().Value;string _CreateTime = q.Elements("CreateTime").First().Value;string _InfoType = q.Elements("InfoType").First().Value;string _ComponentVerifyTicket = q.Elements("ComponentVerifyTicket").First().Value;DateTime dt = DateTime.Now;var datacvt = from t in dbContext.tb_ComponentVerifyTicketselect t;tb_ComponentVerifyTicket tb = new tb_ComponentVerifyTicket();if (datacvt.ToList().Count == 0)//添加{tb.Cvt_AppId = _AppId;tb.Cvt_CreateTime = _CreateTime;tb.Cvt_InfoType = _InfoType;tb.Cvt_ComponentVerifyTicket = _ComponentVerifyTicket;tb.Cvt_DateTime = dt;dbContext.tb_ComponentVerifyTicket.Add(tb);dbContext.SaveChanges();}else//修改{foreach (var item in datacvt){item.Cvt_Id = item.Cvt_Id;item.Cvt_AppId = _AppId;item.Cvt_CreateTime = _CreateTime;item.Cvt_InfoType = _InfoType;item.Cvt_ComponentVerifyTicket = _ComponentVerifyTicket;item.Cvt_DateTime = dt;}dbContext.SaveChanges();}Response.Write("success");Response.End();break;default:break;}return View();}

  這里我們得到了component_verify_ticket,也就是我要的“?string _ComponentVerifyTicket = q.Elements("ComponentVerifyTicket").First().Value;?”

OK,到這里之后我們接下來的就是要獲取access_token。

因為access_token的有效期為兩個小時“第三方平臺compoment_access_token是第三方平臺的下文中接口的調用憑據,也叫做令牌(component_access_token)。每個令牌是存在有效期(2小時)的,且令牌的調用不是無限制的,請第三方平臺做好令牌的管理,在令牌快過期時(比如1小時50分)再進行刷新。” So,我們可以考慮做一個Windows服務每兩個小時去執行向微信服務發送請求又或者是時間對比法 (先記錄得到component_access_token的時間再取component_access_token值的時候查得當前時間,通過兩個時間差做比較,如果大于等于2小時就重新去查詢,否則去查詢數據庫或緩存中的component_access_token)

 protected override void OnStart(string[] args){string str = "服務開啟";System.Threading.Timer t = new System.Threading.Timer(new System.Threading.TimerCallback(testTheNet), null, 1000 * 60 * 120, 1000 * 60 * 120);//System.Threading.Timer t = new System.Threading.Timer// (new System.Threading.TimerCallback(_testime), null, 1000 * 60, 1000 * 60);}

  

到這里access_token我們就已經獲取到了~~

?

轉載于:https://www.cnblogs.com/MingQiu/p/5591870.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/192133.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息