微信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,里面包含服務端請求認證的所有邏輯過程,下面是過程的流程圖:

關(guān)鍵代碼分析
為保證第三方服務器與微信服務器之間數(shù)據(jù)傳輸?shù)陌踩?,所有微信接口采用https方式調(diào)用,所以.net里引用了比較高版本(.Net 4.5+)的網(wǎng)絡包進行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秒),則重新到微信服務器獲取。
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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- 解析微信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)文章
relaxlife.net發(fā)布一個自己開發(fā)的中文分詞程序
relaxlife.net發(fā)布一個自己開發(fā)的中文分詞程序...2007-03-03
詳解ASP.NET數(shù)據(jù)綁定操作中Repeater控件的用法
.NET中的Repeater控件支持數(shù)據(jù)模板,而且可以自由地定義樣式,這里我們就來詳解ASP.NET數(shù)據(jù)綁定操作中Repeater控件的用法,需要的朋友可以參考下2016-06-06

