微信JS-SDK分享功能的.Net實現(xiàn)代碼
JS-SDK接口是什么?
為了方便開發(fā)者實現(xiàn)微信內(nèi)的網(wǎng)頁(基于微信瀏覽器訪問的網(wǎng)頁)功能,比如拍照、選圖、語音、位置等手機系統(tǒng)的能力,并方便開發(fā)者直接使用微信分享、掃一掃等微信特有的能力,微信推出了JS-SDK的整體開發(fā)包,供開發(fā)者方便使用。
分享功能
官方文檔里提供了php、java、node.js以及python的示例代碼,唯獨沒有c#版的,為了彌補廣大.net用戶的需求,我把php版本的示例代碼邏輯照搬成了.net版,并在網(wǎng)頁前端中加入了分享功能,希望對大家有用。
程序?qū)崿F(xiàn)
流程圖
程序里關(guān)鍵的類是JSSDK,里面包含服務(wù)端請求認證的所有邏輯過程,下面是過程的流程圖:
關(guān)鍵代碼分析
為保證第三方服務(wù)器與微信服務(wù)器之間數(shù)據(jù)傳輸?shù)陌踩?,所有微信接口采用https方式調(diào)用,所以.net里引用了比較高版本(.Net 4.5+)的網(wǎng)絡(luò)包進行http請求。
private string httpGet(string url) { if (url.StartsWith("https")) System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; HttpClient httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = httpClient.GetAsync(url).Result; if (response.IsSuccessStatusCode) { string result = response.Content.ReadAsStringAsync().Result; return result; } return null; }
獲取access_token,先從本地的access_token.aspx里找,如果沒有或者過期(7000秒),則重新到微信服務(wù)器獲取。
private string getAccessToken() { string accessToken = string.Empty; var data = JObject.Parse(getAspxFile("access_token.aspx", ASPX_HEAD[1])); if (data != null && long.Parse(data["expire_time"].ToString()) < Utils.ConvertTimeStamp(DateTime.Now)) { string url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + this.appId + "&secret=" + this.appSecret; var jRes = JObject.Parse(httpGet(url)); accessToken = jRes["access_token"].ToString(); if (!string.IsNullOrEmpty(accessToken)) { data["expire_time"] = Utils.ConvertTimeStamp(new DateTime()) + 7000; data["access_token"] = accessToken; setAspxFile("access_token.aspx", data.ToString(), ASPX_HEAD[1]); } } else accessToken = data["access_token"].ToString(); return accessToken; }
獲取jsapi_ticket,原理與access_token一樣。
private string getJsApiTicket() { string ticket = string.Empty; var data = JObject.Parse(getAspxFile("jsapi_ticket.aspx", ASPX_HEAD[0])); if (data != null && long.Parse(data["expire_time"].ToString()) < Utils.ConvertTimeStamp(DateTime.Now)) { string accessToken = getAccessToken(); string url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=" + accessToken; var jRes = JObject.Parse(httpGet(url)); ticket = jRes["ticket"].ToString(); if (!string.IsNullOrEmpty(ticket)) { data["expire_time"] = Utils.ConvertTimeStamp(new DateTime()) + 7000; data["jsapi_ticket"] = ticket; setAspxFile("jsapi_ticket.aspx", data.ToString(), ASPX_HEAD[0]); } } else ticket = data["jsapi_ticket"].ToString(); return ticket; }
完整代碼
https://github.com/stozen/jssdk-wxshare
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 解析微信JS-SDK配置授權(quán),實現(xiàn)分享接口
- 微信JS-SDK自定義分享功能實例詳解【分享給朋友/分享到朋友圈】
- 關(guān)于微信jssdk實現(xiàn)多圖片上傳的一點心得分享
- 微信js-sdk+JAVA實現(xiàn)“分享到朋友圈”和“發(fā)送給朋友”功能詳解
- 微信分享調(diào)用jssdk實例
- 淺談微信JS-SDK 微信分享接口開發(fā)(介紹版)
- 微信js-sdk分享功能接口常用邏輯封裝示例
- thinkPHP微信分享接口JSSDK用法實例
- 微信JS-SDK updateAppMessageShareData安卓不能自定義分享詳解
- 微信JSSDK分享功能圖文實例詳解
相關(guān)文章
Asp.net中使用PageDataSource分頁實現(xiàn)代碼
這篇文章主要介紹asp.net中使用PageDataSource分頁的方法,需要的朋友可以參考下2013-04-04詳解ASP.NET Core 在 JSON 文件中配置依賴注入
本篇文章主要介紹了詳解ASP.NET Core 在 JSON 文件中配置依賴注入 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02ASP.NET session.timeout設(shè)置案例詳解
這篇文章主要介紹了ASP.NET session.timeout設(shè)置案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08Asp.Net 文件操作基類(讀取,刪除,批量拷貝,刪除,寫入,獲取文件夾大小,文件屬性,遍歷目錄)
Asp.Net 文件操作基類(讀取,刪除,批量拷貝,刪除,寫入,獲取文件夾大小,文件屬性,遍歷目錄),需要的朋友可以參考下2008-07-07ASP.net 動態(tài)加載控件時一些問題的總結(jié)
經(jīng)常見到有人說在ASP.net中不要使用動態(tài)控件,我想主要的原因在于使用動態(tài)控件會帶來一些問題,在做項目的過程中,我將由動態(tài)加載控件引發(fā)的總是作了一個小小的總結(jié).2009-04-04