ASP.NET MVC微信JS-SDK認(rèn)證,具體內(nèi)容:
寫(xiě)在前面
前陣子因?yàn)橛袀€(gè)項(xiàng)目需要做微信自定義分享功能,因而去研究了下微信JS-SDK相關(guān)知識(shí)。
此文做個(gè)簡(jiǎn)單的記(tu)錄(cao)...
開(kāi)始
所有的東西都從文檔開(kāi)始:微信JSSDK說(shuō)明文檔
項(xiàng)目需要用到的是分享接口 不過(guò)使用微信JS-SDK之前,需要做JS接口認(rèn)證。
認(rèn)證如下:
步驟一:綁定域名
步驟二:引入JS文件
步驟三:通過(guò)config接口注入權(quán)限驗(yàn)證配置
步驟四:通過(guò)ready接口處理成功驗(yàn)證
步驟五:通過(guò)error接口處理失敗驗(yàn)證
具體解釋:
步驟一中允許使用域名/子域名,只要xx.com/xxx.txt或者xx.com/mp/xxx.txt能訪問(wèn)就好。域名認(rèn)證通過(guò)之后,此域名下的所有端口的網(wǎng)站都可以使用JS-SDK。
步驟二沒(méi)什么問(wèn)題,略過(guò)。
步驟三最磨人,下面單獨(dú)講解。
config接口注入權(quán)限驗(yàn)證配置
先來(lái)一段說(shuō)明:
所有需要使用JS-SDK的頁(yè)面必須先注入配置信息,否則將無(wú)法調(diào)用(同一個(gè)url僅需調(diào)用一次,對(duì)于變化url的SPA的web app可在每次url變化時(shí)進(jìn)行調(diào)用,目前Android微信客戶端不支持pushState的H5新特性,所以使用pushState來(lái)實(shí)現(xiàn)web app的頁(yè)面會(huì)導(dǎo)致簽名失敗,此問(wèn)題會(huì)在Android6.2中修復(fù))。
wx.config({ debug: true, // 開(kāi)啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái), //若要查看傳入的參數(shù),可以在pc端打開(kāi),參數(shù)信息會(huì)通過(guò)log打出,僅在pc端時(shí)才會(huì)打印。 appId: '', // 必填,公眾號(hào)的唯一標(biāo)識(shí) timestamp: , // 必填,生成簽名的時(shí)間戳 nonceStr: '', // 必填,生成簽名的隨機(jī)串 signature: '',// 必填,簽名,見(jiàn)附錄1 jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表見(jiàn)附錄2 });
看到這里肯定懵逼了,這是都什么鬼...怎么玩啊。
提示我們?nèi)タ锤戒?...看完之后總結(jié)如下:
1.使用config接口注入權(quán)限驗(yàn)證配置,重點(diǎn)是生成合法的signatrue
2.生成signature需要通過(guò)appid和secret獲取token
3.時(shí)間戳和調(diào)用接口URL必不可少
4.此操作需要服務(wù)端完成,不能使用客戶端實(shí)現(xiàn)
整個(gè)過(guò)程變成:
1.通過(guò)appid和secret獲取access_token,接著使用token獲取jsapi_ticket;
2.拿到j(luò)sapi_ticket之后,把jsapi_ticket、時(shí)間戳、隨機(jī)字符串、接口調(diào)用頁(yè)面URL 拼接成完整字符串,使用sha1算法加密得到signature。
3.最后返回至頁(yè)面,在wx.config里面填入appid,上一步的時(shí)間戳timestamp,上一部的隨機(jī)字符串、sha1拿到的signature,想要使用的JS接口。
廢話少說(shuō),直接上代碼吧。
代碼時(shí)間
public class WeiXinController : Controller { public static readonly string appid = System.Web.Configuration.WebConfigurationManager.AppSettings["wxappid"]; public static readonly string secret = System.Web.Configuration.WebConfigurationManager.AppSettings["wxsecret"]; public static readonly bool isDedug = System.Web.Configuration.WebConfigurationManager.AppSettings["IsDebug"] =="true"; public static string _ticket = ""; public static DateTime _lastTimestamp; public ActionResult Info(string url,string noncestr) { if (string.IsNullOrEmpty(_ticket) || _lastTimestamp == null || (_lastTimestamp - DateTime.Now).Milliseconds > 7200) { var resultString = HTTPHelper.GetHTMLByURL("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret); dynamic resultValue = JsonConvert.DeserializeObject<dynamic>(resultString); if (resultValue == null || resultValue.access_token == null || resultValue.access_token.Value == null) { return Json(new { issuccess = false, error = "獲取token失敗" }); } var token = resultValue.access_token.Value; resultString = HTTPHelper.GetHTMLByURL ("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + token + "&type=jsapi"); dynamic ticketValue = JsonConvert.DeserializeObject<dynamic>(resultString); if (ticketValue == null || ticketValue.errcode == null || ticketValue.errcode.Value != 0 || ticketValue.ticket == null) return Json(new { issuccess = false, error = "獲取ticketValue失敗" }); _ticket = ticketValue.ticket.Value; _lastTimestamp = DateTime.Now; var timestamp = GetTimeStamp(); var hexString = string.Format("jsapi_ticket={0}&noncestr={3}×tamp={1}&url={2}", _ticket, timestamp, url,noncestr); return Json(new { issuccess = true, sha1value = GetSHA1Value(hexString), timestamp = timestamp, url = url, appid = appid, debug=isDedug, tiket=_ticket }); } else { var timestamp = GetTimeStamp(); var hexString = string.Format("jsapi_ticket={0}&noncestr=1234567890123456×tamp={1}&url={2}", _ticket, timestamp, url); return Json(new { issuccess = true, sha1value = GetSHA1Value(hexString), timestamp = timestamp, url = url, appid = appid, debug = isDedug,tiket = _ticket }); } } private string GetSHA1Value(string sourceString) { var hash = SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(sourceString)); return string.Join("", hash.Select(b => b.ToString("x2")).ToArray()); } private static string GetTimeStamp() { TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0); return Convert.ToInt64(ts.TotalSeconds).ToString(); } } public class HTTPHelper { public static string GetHTMLByURL(string url) { string htmlCode = string.Empty; try { HttpWebRequest webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); webRequest.Timeout = 30000; webRequest.Method = "GET"; webRequest.UserAgent = "Mozilla/4.0"; webRequest.Headers.Add("Accept-Encoding", "gzip, deflate"); HttpWebResponse webResponse = (System.Net.HttpWebResponse)webRequest.GetResponse(); //獲取目標(biāo)網(wǎng)站的編碼格式 string contentype = webResponse.Headers["Content-Type"]; Regex regex = new Regex("charset\\s*=\\s*[\\W]?\\s*([\\w-]+)", RegexOptions.IgnoreCase); if (webResponse.ContentEncoding.ToLower() == "gzip")//如果使用了GZip則先解壓 { using (System.IO.Stream streamReceive = webResponse.GetResponseStream()) { using (var zipStream = new System.IO.Compression.GZipStream(streamReceive, System.IO.Compression.CompressionMode.Decompress)) { //匹配編碼格式 if (regex.IsMatch(contentype)) { Encoding ending = Encoding.GetEncoding (regex.Match(contentype).Groups[1].Value.Trim()); using (StreamReader sr = new System.IO.StreamReader(zipStream, ending)) { htmlCode = sr.ReadToEnd(); } } else { using (StreamReader sr = new System.IO.StreamReader(zipStream, Encoding.UTF8)) { htmlCode = sr.ReadToEnd(); } } } } } else { using (System.IO.Stream streamReceive = webResponse.GetResponseStream()) { var encoding = Encoding.Default; if (contentype.Contains("utf")) encoding = Encoding.UTF8; using (System.IO.StreamReader sr = new System.IO.StreamReader(streamReceive, encoding)) { htmlCode = sr.ReadToEnd(); } } } return htmlCode; } catch (Exception ex) { return ""; } } }
PS:這里要注意緩存一下_ticket(即access_token),照微信文檔說(shuō)的,access_token兩個(gè)小時(shí)內(nèi)有效,不需要頻繁調(diào)用。而且獲取access_token的接口有調(diào)用次數(shù)的限制,如果超過(guò)了次數(shù),就不允許調(diào)用了。
PPS:建議noncestr和URL由前臺(tái)傳入比較適合,使用 var theWebUrl = window.location.href.split('#')[0] 獲取URL,noncestr就隨意了。
PPPS:遇到詭異的invalid signature的時(shí)候,首先檢查url參數(shù),然后檢查noncestr,再不行重啟一下程序獲取一個(gè)新的token回來(lái)繼續(xù)玩。
Atas ialah kandungan terperinci ASP.NET MVC 微信JS-SDK認(rèn)證的實(shí)例教程. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Komik menyalin tidak diragukan lagi sebagai harta yang tidak dapat dilepaskan. Di sini anda boleh menemui komik bola keranjang dalam pelbagai gaya, dari cerita kompetitif yang bersemangat dan inspirasi untuk komedi harian yang santai dan lucu. Sama ada anda ingin menghidupkan semula klasik atau menemui karya baru, menyalin komik dapat memenuhi keperluan anda. Melalui portal bacaan dalam talian yang disediakan oleh Copy Comics, anda akan mengucapkan selamat tinggal kepada masalah sumber cetak rompak, menikmati pengalaman membaca yang tinggi dan lancar, dan dapat menyokong pengarang komik kegemaran anda dan menyumbang kepada pembangunan komik yang sahih.

Menggabungkan trend industri terkini dan data penilaian pelbagai dimensi pada tahun 2025, yang berikut adalah cadangan perisian penulisan AI yang komprehensif, yang meliputi senario arus perdana seperti penciptaan umum, penyelidikan akademik, dan pemasaran komersial, sambil mengambil kira perkhidmatan pengoptimuman dan penyetempatan Cina:

Komik yang bagus, platform pengalaman membaca yang mendalam yang didedikasikan untuk mencipta pencinta komik, menyatukan sejumlah besar sumber komik berkualiti tinggi di rumah dan di luar negara. Ia bukan sahaja platform membaca komik, tetapi juga komuniti yang menghubungkan artis komik dan pembaca dan berkongsi budaya komik. Melalui reka bentuk antara muka yang mudah dan intuitif dan fungsi carian yang kuat, NES Comics membolehkan anda dengan mudah mencari karya kegemaran anda dan menikmati pengalaman membaca yang lancar dan selesa. Katakan selamat tinggal kepada operasi yang lama menunggu dan membosankan, masukkan dunia komik yang bagus dengan serta -merta dan mulakan perjalanan komik anda!

Komik Frogman telah menjadi pilihan pertama bagi banyak pencinta komik dengan sumber komik yang kaya dan pelbagai dan pengalaman membaca dalam talian yang mudah dan lancar. Ia seperti kolam yang bersemangat, dengan cerita -cerita segar dan menarik yang sentiasa muncul, menunggu anda menemui dan meneroka. Frog Man Comics meliputi pelbagai subjek, dari pengembaraan yang ghairah hingga cinta manis, dari fantasi dan fiksyen sains untuk penangguhan yang menggembirakan, tidak kira genre yang anda suka, anda dapat mencari karya kegemaran anda di sini. Reka bentuk antara muka yang mudah dan intuitif membolehkan anda dengan mudah memulakan, dengan cepat mencari komik yang anda ingin baca, dan tenggelamkan diri anda dalam dunia komik yang menarik.

Di sini, anda boleh menikmati lautan komik yang luas dan meneroka karya-karya pelbagai tema dan gaya, dari komik lelaki muda yang ghairah hingga komik gadis yang halus dan bergerak, dari komik misteri yang membosankan dan membakar otak untuk komik harian yang santai dan lucu, ada segala-galanya, dan selalu ada yang dapat menyentuh hati anda. Kami bukan sahaja mempunyai sejumlah besar sumber komik yang tulen, tetapi juga sentiasa memperkenalkan dan mengemas kini kerja -kerja terkini untuk memastikan bahawa anda dapat membaca komik kegemaran anda secepat mungkin.

Laman web rasmi terbaru 2025b anhui adalah: https://www.marketwebb.co/zh-cn/join?ref=507720986& ;type=wenzi; Binance Exchange adalah pertukaran cryptocurrency global yang melayani 180 negara dan wilayah termasuk Amerika Utara, Eropah, Taiwan, Timur Tengah, Hong Kong, dan Malaysia. Ia menyediakan lebih daripada 600 kriptografi dan mempunyai 270 juta pengguna berdaftar di seluruh dunia.

Pengguna telefon bimbit Android boleh memuat turun dan memasang aplikasi Huobi/Huobi melalui langkah -langkah berikut: 1. Pastikan rangkaian stabil dan ruang penyimpanan mencukupi; 2. Muat turun aplikasi melalui laman web rasmi Huobi/Huobi, gunakan penyemak imbas untuk mengakses laman web rasmi dan klik pautan muat turun atau mengimbas kod QR, atau cari dan muat turun melalui kedai aplikasi pihak ketiga seperti Apptreasure dan Huawei App Market, dan anda juga boleh mendapatkan pakej pemasangan melalui perkongsian rakan-rakan; 3. Cari fail .apk yang dimuat turun, aktifkan kebenaran pemasangan "Sumber Sumber Tidak Diketahui", ikuti arahan untuk menyelesaikan pemasangan, dan lain -lain.

Ya, tetapi ada sekatan. ① Anda boleh log masuk ke akaun yang sama pada kedua -dua telefon iPhone dan Android, tetapi log masuk ke peranti terkini akan menyebabkan sesi terawal menjadi luar talian; ② Anda boleh log masuk pada masa yang sama pada telefon bimbit dan desktop komputer, tetapi fungsi tidak disegerakkan; ③ Walaupun menggunakan alat pihak ketiga atau fungsi dwi-apl boleh membolehkan pembalakan di antara dua telefon bimbit, ia tidak disokong secara tidak rasmi dan boleh melanggar peraturan; ④ Penyelesaian alternatif termasuk menggunakan versi Web/Desktop untuk memadankan telefon utama, atau memindahkan rekod sembang melalui sandaran awan dan alat fail. Sesetengah mesin Android juga boleh menggunakan "aplikasi dwi" untuk menjalankan dua contoh akaun.
