微信分享到朋友或朋友圈
直接上程式碼
說明:因為微信的jsapi_ticket和token有時效性(7200秒)但微信那邊有限制你不能頻繁訪問,所以,我這裡是將這兩個引數存放至資料庫的,為避免剛好到7200秒時造成的分享失效,所以,在從資料庫查詢的時候,時效失效時間比較是比較的5000秒
注意:我這種寫法雖然可以實現功能,但是不建議使用這種方式,因為js部分是通過後臺註冊到前端的,如果與前端某個js有衝突,或者前端有js報錯,那麼註冊部分的js就不會接著往下執行。正確寫法是寫到js裡面或者直接寫到頁面裡面
微信分享的核心就是帶著appid等引數進行兩次介面對接獲取引數。
前臺需引用的js:
<%--微信分享相關js--%>
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js" ></script>
後臺部分程式碼:
private void RegisterWeiXinShareScript()
{
string aaa = CreateTimeStamp().ToString();
//公眾號的應用ID
string appid = "wxxxxxxxxxxxx";
//公眾號的應用金鑰
string secret = "xxxxxxxxxxxxxx";
//生成簽名的時間戳
TimeSpan ts = DateTime.Now - DateTime.Parse("1970-01-01 00:00:00" );
string timestamp = ts.TotalSeconds.ToString().Split('.')[0];
//生成簽名的隨機串
string nonceStr = Utils.Number(6);
//微信access_token,用於獲取微信jsapi_ticket
string token = GetAccess_token(appid, secret);
if (string.IsNullOrWhiteSpace(token))
{
string tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret;
//移除拼接過程中產生的換行符、空格
tokenUrl = tokenUrl.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "");
string jsonresult = HttpGet(tokenUrl, "UTF-8");
WX_Token wx = JsonDeserialize<WX_Token>(jsonresult);
//重新整理資料庫快取資料
token = wx.access_token;
//Utils.WriteLog("", "token", "token第二次獲取結果:" + token + "---" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
//微信jsapi_ticket
string ticket = GetTicket(token);
if (string.IsNullOrWhiteSpace(ticket))
{
//--------------------------------第二次獲取證書失效,可能是token過期
string ticketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + token + "&type=jsapi";
//移除拼接過程中產生的換行符、空格
ticketUrl = ticketUrl.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "");
string jsonresult = HttpGet(ticketUrl, "UTF-8");
WX_Ticket wxTicket = JsonDeserialize<WX_Ticket>(jsonresult);
ticket = wxTicket.ticket;
}
//當前網頁的URL
string pageurl = Request.Url.AbsoluteUri;
//對所有待簽名引數按照欄位名的ASCII 碼從小到大排序(字典序)後,使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字串
string str = "jsapi_ticket=" + ticket + "&noncestr=" + nonceStr + "×tamp=" + timestamp + "&url=" + pageurl;
//簽名,使用SHA1生成
string signature = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "SHA1").ToLower();
//要註冊到頁面的JS指令碼
StringBuilder sbjsApi = new StringBuilder();
sbjsApi.Append("<script>");
//通過config介面注入許可權驗證配置
sbjsApi.Append("wx.config({debug:false,");
sbjsApi.Append("appId: '" + appid + "',");
sbjsApi.Append("timestamp: " + timestamp + ",");
sbjsApi.Append("nonceStr: '" + nonceStr + "',");
sbjsApi.Append("signature: '" + signature + "',");
sbjsApi.Append("jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'chooseImage', 'uploadImage', 'getNetworkType']});");
//通過ready介面處理成功驗證
sbjsApi.Append("wx.ready(on_weixin_ready);");
sbjsApi.Append("function on_weixin_ready() {weixin_share();}");
//獲取“分享給朋友”按鈕點選狀態及自定義分享內容介面
sbjsApi.Append("function weixin_share(){");
sbjsApi.Append("wx.onMenuShareAppMessage({");
sbjsApi.Append("title:'" + act_detail_title + "',");
sbjsApi.Append("desc:'" + act_detail_desc + "',");
//sbjsApi.Append("link:'分享出去的連結地址',");
sbjsApi.Append("imgUrl:'" + act_detail_img + "',");
sbjsApi.Append("type:'link',");
sbjsApi.Append("dataUrl:'',");
sbjsApi.Append("success: function () { $.post('../programs/Pro_User.ashx', { action: 'AddShareNo',typeId:'" + SjuneRequest.GetQueryString("id") + "' }, '', 'Json');alert('分享成功!【朋友】');},");
sbjsApi.Append("cancel:function () {}");
sbjsApi.Append("});");
//獲取“分享到朋友圈”按鈕點選狀態及自定義分享內容介面
sbjsApi.Append("wx.onMenuShareTimeline({");
sbjsApi.Append("title:'" + act_detail_title + "',");
sbjsApi.Append("imgUrl:'" + act_detail_img + "',");
sbjsApi.Append("success: function () { $.post('../programs/Pro_User.ashx', { action: 'AddShareNo',typeId:'" + SjuneRequest.GetQueryString("id") + "' }, '', 'Json');alert('分享成功!【朋友圈】');},");
sbjsApi.Append("cancel:function () {}");
sbjsApi.Append("});}");
sbjsApi.Append("</script>");
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "weixin", sbjsApi.ToString().Trim());
}
/// <summary>
/// 獲取微信jsapi_ticket
/// </summary>
/// <param name="token">access_token</param>
/// <returns>jsapi_ticket</returns>
public string GetTicket(string token)
{
string tickId = "";
//DataSet ds = new BLL.Ticket().GetList(" id=1");
//int start_time = ds.Tables[0].Rows[0]["Ticket_Dt"].ToInt();
//int new_time = CreateTimeStamp();
//if ((new_time.ToInt() - start_time.ToInt()) > 7000)
//{
//超時,重新生成並更新資料
string ticketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + token + "&type=jsapi";
ticketUrl = ticketUrl.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "");
string jsonresult = HttpGet(ticketUrl, "UTF-8");
WX_Ticket wxTicket = JsonDeserialize<WX_Ticket>(jsonresult);
//重新整理資料庫快取資料
//Model.Ticket db_model = new BLL.Ticket().GetModel(1);
//db_model.Ticket_Dt = CreateTimeStamp().ToString();
//db_model.Ticket_Id = wxTicket.ticket;
//new BLL.Ticket().Update(db_model);
tickId = wxTicket.ticket;
//}
//else
//{
// tickId = ds.Tables[0].Rows[0]["Ticket_Id"].ToString();
//}
return tickId;
}
/// <summary>
/// 獲取微信access_token
/// </summary>
/// <param name="appid">公眾號的應用ID</param>
/// <param name="secret">公眾號的應用金鑰</param>
/// <returns>access_token</returns>
private string GetAccess_token(string appid, string secret)
{
string tokenId = "";
DataSet ds = new BLL.Ticket().GetList(" id=1");
int start_time = ds.Tables[0].Rows[0]["Ticket_Dt"].ToInt();
int new_time = CreateTimeStamp();
if ((new_time.ToInt() - start_time.ToInt()) > 5000)
{
//超時,重新生成並更新資料
string tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret;
tokenUrl = tokenUrl.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "");
string jsonresult = HttpGet(tokenUrl, "UTF-8");
WX_Token wx = JsonDeserialize<WX_Token>(jsonresult);
//重新整理資料庫快取資料
Model.Ticket db_model = new BLL.Ticket().GetModel(1);
db_model.Ticket_Dt = CreateTimeStamp().ToString();
db_model.Token_Id = wx.access_token;
new BLL.Ticket().Update(db_model);
tokenId = wx.access_token;
}
else
{
tokenId = ds.Tables[0].Rows[0]["Token_Id"].ToString();
}
return tokenId;
}
/// <summary>
/// JSON反序列化
/// </summary>
/// <typeparam name="T">實體類</typeparam>
/// <param name="jsonString">JSON</param>
/// <returns>實體類</returns>
private T JsonDeserialize<T>(string jsonString)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T obj = (T)ser.ReadObject(ms);
return obj;
}
/// <summary>
/// HttpGET請求
/// </summary>
/// <param name="url">請求地址</param>
/// <param name="encode">編碼方式:GB2312/UTF-8</param>
/// <returns>字串</returns>
private string HttpGet(string url, string encode)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "application/json; encoding=utf-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding(encode));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
/// <summary>
/// 生成時間戳
/// </summary>
/// <returns></returns>
private int CreateTimeStamp()
{
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalSeconds).ToInt();
}
/// <summary>
/// 通過微信API獲取access_token得到的JSON反序列化後的實體
/// </summary>
public class WX_Token
{
public string access_token { get; set; }
public string expires_in { get; set; }
}
/// <summary>
/// 通過微信API獲取jsapi_ticket得到的JSON反序列化後的實體
/// </summary>
public class WX_Ticket
{
public string errcode { get; set; }
public string errmsg { get; set; }
public string ticket { get; set; }
public string expires_in { get; set; }
}
如有問題,請加我QQ:631931078或352167311
相關推薦
微信分享內容給朋友、朋友圈、QQ、QQ空間等
示例網頁 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="renderer" content="webkit"> <meta
Android 實現微信分享好友和朋友圈
1.在微信開放平臺 建立移動應用,並通過稽核,這裡要注意的是應用簽名要一致,(下載官網上的APK,輸入包名就可以生成了) 2.具體用法可以看官網的文件,這裡只總結使用過程遇到的問題和解決方法 3. 參照這個用法分享是可以的,但是如果你的圖片大於32kb就不
微信分享到朋友或朋友圈
直接上程式碼 說明:因為微信的jsapi_ticket和token有時效性(7200秒)但微信那邊有限制你不能頻繁訪問,所以,我這裡是將這兩個引數存放至資料庫的,為避免剛好到7200秒時造成的分享失效,所以,在從資料庫查詢的時候,時效失效時間比較是比較的5
微信公眾平臺網頁開發實戰--1.微信分享一個網頁到朋友圈
微信開發 html5 jssdk 實戰 網頁開發 對微信的JSSDK進行封裝一下,創建一份類似的文件結構,增加index.html與shareApi.js文件,結構如圖3.3所示。 圖3.3 3.2節文件結構另外,提醒讀者一下,wxJSSDK.js文件的JSSDK環境配置中,需要
h5 微信分享朋友和朋友圈
lose reat 加載 -1 微信 host ces menus html 生成JS-SDK權限驗證簽名 實現發送給朋友和分享到朋友圈時內容參數自定義 一、微信JS-SDK 1. 獲得Access Token access token的獲得方法在前面有介紹,詳情見
php實現微信分享朋友圈
public private abcd ushare name preview set PE char class JSSDK { private $appId; private $appSecret; public function __construct($a
iOS 微信分享到朋友圈
最近要加微信朋友圈分享的功能,上官網下檔案,照著文件搭環境,但是總有錯誤,於是百度部落格來看,發現和官方文件一樣,解決不了自己的問題,現在問題解決了,分享出來希望對大家有幫助。 1.首先要向微信註冊你的應用程式IDhttps://open.weixin.qq.com/cgi-bin/frame?
Vux+Cordova打包的安卓App實現微信分享朋友和朋友圈
知識儲備 Cordova Plugin ShareSDK 外掛 什麼是Cordova Plugin ShareSDK Cordova Plugin ShareSDK封裝了ShareSDK的android和ios平臺的分享功能。在hybird app開發中可以方便的完成分享功能。如:ion
微信分享朋友圈分享程式碼自定義標題、說明、圖示和分享連結
最近在做手機網站在分享到微信時,通過微信內建瀏覽器訪問頁面分享後,希望可以自定義小圖示(imgUrl)和分享連結(lineLink),下面下微信內建瀏覽器分享功能的JS程式碼,希望對大家有所幫助。 JS程式碼如下: var imgUrl = "http://www.gdibn.com/m/im
簡單粗暴教你在VUE中引入微信SDK 呼叫微信分享、朋友圈分享、QQ分享......
寫在前面: 剛做了一個微信端的網頁,用到了微信分享,在網上看了好多的資料,發現好多文件都寫得雲裡霧裡,讓人看的頭疼。通過對很多大佬文章的綜合整理,才完成了微信分享的部分。所以我想著自己寫一篇文章,能讓看到我這篇文章的親們能夠清楚的明白在vue上怎麼使用微信分享SDK,能夠按照
微信分享到朋友圈、傳送給朋友開發注意事項
1、invalid url domain 當前頁面所在域名與使用的appid沒有繫結,請確認正確填寫繫結的域名,如果使用了埠號,則配置的繫結域名也要加上埠號(一個appid可以繫結三個有效域名,見 目錄1.1.1)。 2、invalid signature簽名錯誤。 建議按如下順序檢查:
iOS開發之第三方分享微信分享、朋友圈分享,史上最新最全第三方分享微信方式實現、朋友圈方式實現
微信分享前提: 1.需要成功在微信開發者平臺註冊了賬號, 並取的對應的 appkey appSecret。 2. 針對iOS9 添加了微信的白名單,以及設定了 scheme url 。 這都可以參照上面的連結,進行設定好。 3. 分享不跳轉的時
vue 微信分享至朋友圈&&分享至朋友程式碼封裝
1.新建share.js檔案 import {shareSDK} from "../api/common";//分享api import wx from 'weixin-js-sdk' export
微信分享到朋友圈,分享給朋友JS程式碼
</body> <script> $(document).ready(function(){ /* * 注意: * 1. 所有的JS介面只能在公眾號繫結的域名下呼叫,公眾號開發者需要先登入微信公眾平臺進入“公眾號設定”的“功能設定”裡填寫“JS介面安全域名”
微信“分享到朋友圈”介面— wx.onMenuShareTimeline() 和 onMenuShareAppMessage — 分享給朋友介面
微信“分享到朋友圈”介面—— wx.onMenuShareTimeline() 注意事項: 1. 圖片大小要大於300pix才能顯示; 2. 這個方法必須先config成功,然後再wx.ready裡才能呼叫。直接放到$(function(){})裡執行,實踐證明是不行的。
微信分享功能(分享到朋友和朋友圈顯示圖片和簡介)
wx.config({ debug: true, // 開啟除錯模式,呼叫的所有api的返回值會在客戶端alert出來,若要檢視傳入的引數,可以在pc端開啟,引數資訊會通過log打出,僅在pc端時才會列印。 appId: '@Model.appId', // 必填,公眾號的唯一
微信分享到好友或者朋友圈的截圖圖片
寫了一個Demo,裡邊的介面不太好看,一部分是我自己PS的,菜鳥PS,但是寫的過程中遇到了一些問題,在這裡做一遍記錄,以便今後查證,程式碼中做了大量的註釋: 重點突出以下幾個知識點; 一:跳轉傳值 intent傳值,可以是String/boolean/int/byte[]
不使用官方SDK,實現微信分享(傳送到朋友,傳送到朋友圈)
發現很多同學發帖說使用微信官方提供的sdk,實現微信分享的過程中遇到問題。我下載了微信的sdk,測試了一下,也失敗了。估計是應用需要通過官方稽核。 既然官方sdk測試不了,那我就使用絕招了:下面便是傳送到朋友,傳送到朋友圈的程式碼。(可以同時傳送圖片和文字感謝@空心糖 的反
微信分享到朋友圈或者好友介面無響應
@Override public void onResp(BaseResp resp) { switch (resp.errCode) { case BaseResp.ErrCode.ERR
微信分享到朋友圈失敗,分享給朋友等正常
微信分享朋友圈,提示 獲取資源失敗,僅支援分享照片至朋友圈 原因:繞過稽核分享到朋友圈一定要加一張圖片才可以的 ShareSDK.xml裡面 BypassAppr