H5文章分享給好友或朋友圈後如何生成自定義分享內容
前言
以前h5網頁在微信裡開啟,右上角分享到微信好友或者朋友圈 是微信自己抓取的首圖 現在 好像不行了。這是因為微信更新了API,必須自行配置,接入jssdk,才能實現自定義分享資訊的功能。詳細可以檢視微信官方開發者文件,地址:
JS介面安全域名
接入jssdk時,就需要配置JS介面安全域名,因此需要登入微信公眾平臺,在公眾號設定→功能設定中,填寫JS介面安全域名,域名即為H5專案的域名(如:www.baidu.com),同時需要下載一個txt驗證檔案,並放置到伺服器的根路徑下,實際操作時根據提示即可。
設定白名單
這一步其實應該放到後面獲取access_token步驟中,我這裡正好已經登入在公眾號平臺,所以就一併操作了。後面講到獲取access_token和jsapi_ticket時,需要訪問伺服器,因此需要將H5專案伺服器的IP地址新增到白名單中,否則介面將無法呼叫成功。具體設定方法:在開發→基本設定→IP白名單中進行新增相應的IP地址即可。如下圖所示
獲取access_token
access_token是公眾號的全域性唯一介面呼叫憑據,公眾號呼叫各介面時都需使用access_token。詳細說明詳見官當開發文件:
首先需要在H5頁面內中引入js檔案
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
具體獲取的程式碼如下:
$.ajax({ url: "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=AppSecret";, //介面地址 type: "Get", dataType: 'jsonp', crossDomain: true,//與上一項解決跨域問題 success: function (data) { //將access_token快取起來 localStorage.setItem("access_token", data.access_token); } });
其中引數appid和secret均可以在公眾號後臺檢視獲取。
獲取jsapi_ticket
jsapi_ticket是公眾號用於呼叫js介面的臨時票據。有效期7200秒,跟公眾號普通access_token一樣,必須全域性快取起來,因為這個ticket獲取次數有限,超過次數將無法使用。獲取jsapi_ticket也是為了後面生成signature簽名做準備。具體方法與access_token類似,替換訪問介面即可。
$.ajax({ url: "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi", //介面地址 type: "Get", dataType: 'jsonp', crossDomain: true, success: function (data) { //快取jsapi_ticket localStorage.setItem("jsapi_ticket", ticket); } });
生成signature,並自定義分享資訊
前臺的程式碼實現:
var url = location.href.split('#')[0]; //分享的文章地址
var requestUrl = "/app/getticket?ticket=" + ticket + "&url=" + url;
$.ajax({
url: requestUrl,
type: "Get",
dataType: 'json',
success: function (data) {
var appId = data.appId;
var timestamp = data.timestamp;
var nonceStr = data.noncestr;
var signature = data.signature;
wx.config({
debug: false, // 開啟除錯模式,呼叫的所有api的返回值會在客戶端alert出來,
// 若要檢視傳入的引數,可以在pc端開啟,引數資訊會通過log打出,僅在pc端時才會列印。
appId: appId + '', // 必填,公眾號的唯一標識
timestamp: timestamp + '', // 必填,生成簽名的時間戳
nonceStr: nonceStr + '', // 必填,生成簽名的隨機串
signature: signature + '',// 必填,簽名,見附錄1
jsApiList: ["onMenuShareTimeline", "onMenuShareAppMessage", "onMenuShareQQ"]
// 必填,需要使用的JS介面列表,所有JS介面列表見附錄2
});
wx.ready(function () {
var imgurl = '縮圖完整地址';
var title = '自定義標題';
var desc = '自定義描述資訊';
wx.onMenuShareTimeline({
title: title, // 分享標題
desc: desc, // 分享描述
link: url, // 分享連結
imgUrl: imgurl, // 分享圖示
success: function () {
// 使用者確認分享後執行的回撥函式
},
cancel: function () {
// 使用者取消分享後執行的回撥函式
}
});
wx.onMenuShareAppMessage({
title: title, // 分享標題
desc: desc, // 分享描述
link: url, // 分享連結
imgUrl: imgurl, // 分享圖示
type: '', // 分享型別,music、video或link,不填預設為link
dataUrl: '', // 如果type是music或video,則要提供資料鏈接,預設為空
success: function () {
// 使用者確認分享後執行的回撥函式
},
cancel: function () {
// 使用者取消分享後執行的回撥函式
}
});
wx.onMenuShareQQ({
title: title, // 分享標題
desc: desc, // 分享描述
link: url, // 分享連結
imgUrl: imgurl, // 分享圖示
success: function () {
// 使用者確認分享後執行的回撥函式
},
cancel: function () {
// 使用者取消分享後執行的回撥函式
}
});
});
}
});
後臺生成簽名的邏輯程式碼:
/// <summary>
/// 根據傳入的jsapi_ticket生成signature簽名
/// </summary>
/// <param name="ticket"></param>
/// <returns></returns>
public JsonResult GetTicket(string ticket, string url)
{
SignatureTicket model = new SignatureTicket();
model.appId = CommonSharp.appId;
model.noncestr = CommonSharp.GetRnd(16, true, true, true, false, "");
model.timestamp = CommonSharp.GetTimeStamp();
string _url = System.Web.HttpUtility.UrlDecode(url);
string string1 = "jsapi_ticket=" + ticket + "&noncestr=" + model.noncestr + "×tamp=" + model.timestamp + "&url=" + url;
model.signature = CommonSharp.GetPwd(string1);
return Json(model);
}
其中GetPwd方法的邏輯如下:
public static string GetPwd(string str)
{
byte[] cleanBytes = Encoding.Default.GetBytes(str);
byte[] hashedBytes = System.Security.Cryptography.SHA1.Create().ComputeHash(cleanBytes);
return BitConverter.ToString(hashedBytes).Replace("-", "");
}
至此,需要配置的以及後臺程式碼均已完畢,釋出後放到伺服器上進行測試使用。
---------------------------------- 完美的分割線 ---------------------------------------
根據上面的方式,開始確實可以實現想要的功能,但晚上下班回家了,無意中再次開啟時發現又不行了,在電腦上檢視時,報瞭如下錯誤:
invalid credential, access_token is invalid or not latest hint
一番折騰之後發現,是由於access_token過期了,導致生成的簽名失敗。分析上面的程式碼,發現將獲取到的access_token快取到localstorage的邏輯是有問題的,獲取到的access_token預設有效期為2小時,如果重新請求API介面,新的access_token會覆蓋原來的值,而我將access_token存入localstorage後,其實並沒有做進一步的有效期的校驗和定時重新整理,所以過了有效期之後,自然就會出現上面的那個錯誤了。
知道了原因,那就開始動手修改吧。當在前端利用jsonp訪問微信API介面時,莫名其妙的又出現了另一個錯誤:
Uncaught SyntaxError: Unexpected token :
這個應該是跟ajax跨域請求返回的資料格式有關係,但是試了很多方法都不行,無奈,只好換一種思路,打算不再從前端獲取access_token了,改從後端去獲取,這樣就可以避免了ajax訪問時跨域的問題。還是直接上程式碼吧~~
後臺C#程式碼實現如下:
/// <summary>
/// 獲取access_token
/// </summary>
/// <returns></returns>
public JsonResult GetAccessToken()
{
AccessToken result = new AccessToken();
if (HttpRuntime.Cache == null)
{
result = GetToken();
}
var accessTokenCache = HttpRuntime.Cache.Get(CommonSharp.token_cahekey);
if (accessTokenCache != null)
{
result.Token = accessTokenCache.ToString();
}
else
{
result = GetToken();
}
return Json(result);
}
private AccessToken GetToken()
{
AccessToken result = new AccessToken();
var client = new WebClient();
client.Encoding = System.Text.Encoding.UTF8;
var responseData = client.DownloadString(string.Format(@"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential
&appid={0}&secret={1}", CommonSharp.appId, CommonSharp.app_secret));
var serializer = new JavaScriptSerializer();
var accessDictionary = serializer.Deserialize<Dictionary<string, object>>(responseData);
var accessToken = accessDictionary[CommonSharp.token_cahekey];
if (accessToken != null)
{
HttpRuntime.Cache.Insert(CommonSharp.token_cahekey, accessToken, null, DateTime.Now.AddSeconds(7100),
TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Normal, null);
result.Token = accessToken.ToString();
}
return result;
}
相關推薦
H5文章分享給好友或朋友圈後如何生成自定義分享內容
前言以前h5網頁在微信裡開啟,右上角分享到微信好友或者朋友圈 是微信自己抓取的首圖 現在 好像不行了。這是因為微信更新了API,必須自行配置,接入jssdk,才能實現自定義分享資訊的功能。詳細可以檢視微信官方開發者文件,地址:JS介面安全域名接入jssdk時,就需要配置JS介
微信JSSDK分享朋友圈微信自定義分享接口
永久 blank 公眾號 sdk 項目 開發 inf src height 服務項目 新手技術咨詢 企業技術咨詢 定制開發 服務說明 QQ有問必答 QQ、微信、電話 微信開發、php開發,網站開發,系統定制,小程序開發 價格說明 200元/月 1000/月 商
微信JSSDK分享朋友圈微信自定義分享介面
服務專案 新手技術諮詢 企業技術諮詢 定製開發 服務說明 QQ有問必答 QQ、微信、電話 微信開發、php開發,網站開發,系統定製,小程式開發 價格說明 200元/月 100
Android APP中跳轉至微信,分享圖文給好友或者朋友圈(加跳轉QQ好友或QQ群)
/** * 分享圖片給好友 * * @param file */ private void shareToFriend(File file) { Intent intent = new Intent(); ComponentName comp = new
H5分享帶縮圖,描述,微信內分享到好友,朋友圈等
準備工作 需要一個認證的微信公眾號,一定要確定認證 在公眾號設定–>功能設定,填寫設定Js介面安全域名 Js安全域名是需要把微信提供的檔案,放在指定域名或者目錄下面可以訪問的。 配置資訊 在獲取signature之前,需要獲取acc
微信分享到好友或者朋友圈的截圖圖片
寫了一個Demo,裡邊的介面不太好看,一部分是我自己PS的,菜鳥PS,但是寫的過程中遇到了一些問題,在這裡做一遍記錄,以便今後查證,程式碼中做了大量的註釋: 重點突出以下幾個知識點; 一:跳轉傳值 intent傳值,可以是String/boolean/int/byte[]
iOS9中實現微信分享到好友、朋友圈
微信SDKdemo執行錯誤問題 微信SDK接入設定 實現分享到好友、朋友圈 微信SDKdemo執行錯誤問題 下載了官方的demo,激動地運行了一下,十幾個錯誤,內心其實是崩潰的。 根據錯誤提示,去修改a
TP5 微信分享朋友圈介面顯示自定義圖片和標題
在tp5框架下對接微信分享朋友圈介面,並顯示圖片和標題。準備步驟:1,先登入微信公眾平臺進入“公眾號設定”的“功能設定”裡填寫“JS介面安全域名”。2,獲取公眾號對應的 appid 和 appsecret。3.公眾號取得認證。不羅嗦,直接上程式碼:1,js 程式碼,在需要分享
如何實現分享連結到微信朋友圈時顯示自定義LOGO以及名稱介紹
當下朋友圈很火,很多企業都將微信朋友圈作為品牌傳播的途徑,經常會發一些精彩的文章到微信朋友圈供大家自發傳播,這樣的想法很好,對於優
Next Cloud通過修改資料庫表,達到替換檔案而不改變分享的連結地址的效果,以及自定義分享連結地址
# Next Cloud如何通過修改資料庫表,達到替換檔案而不改變分享的連結地址的效果,以及自定義分享的連結地址 本文首發於我的個人部落格:https://chens.life/nextcloud-change-share-files.html ## 前言 本站 [失眠孤島](https://chens
h5網頁在微信裏打開 右上角分享到微信好友或者朋友圈
sta can debug 簽名 AS get res tle 鏈接 首先你需要一個分享接口地址,然後在自定義圖片 標題 描述 如下: <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"&
使用微信api將內容分享給好友,或者傳送到朋友圈
http://blog.csdn.net/u012591761/article/details/42263009 現在我們給應用新增一個功能,能在應用內將訊息分享給微信好友,或者分享到朋友圈中。 我們首先來到微信開放平臺官網,跟著組織走,官網指南: https://ope
如何修改手機端分享網頁給微信好友和朋友圈顯示的圖片和標題
最初,我以為這個東西很複雜,還微信開發者哪裡找了文件來看。準備使用微信JS-SDK裡面的方法….. 但是它僅僅只是這樣子的簡單。 微信好友和朋友圈都差不多,以分享到微信好友的為例 &l
android 分享到微信朋友圈或微信好友
一、首先建立一個數字簽名(keystore檔案)這裡不再講述keystore的建立過程! 二、用keystore給app簽名,注意最後如下圖所示 圖中的md5就是 申請apkid時所需的 簽名,這裡需要注意MD5需要將其中的“:”去掉並將其中的大寫字母改為小寫 三、申請微
apiCloud 三方分享,微信好友分享,微信朋友圈分享,QQ分享,微博分享
-s -a nbsp 分享 ocs 配置 博客 微信朋友圈 icloud 首先查看我的這篇有關三方登錄的博客,地址是http://www.cnblogs.com/gqx-html/p/8303567.html,配置完三方數據後可以從上一篇文章中的鏈接跳轉到各個登錄查看api
h5怎麽做分享到QQ 、朋友圈、微信 、微博等功能
必備工具 con null 描述 one url key cts function 微信已經成為我們日常聊天聯系基本的必備工具,所以小菜我首先介紹一下如何調用微信的分享功能。其實除了可以在微信上分享到朋友圈和發送給好友,微信的分享接口還提供了分享到QQ和分享到騰訊微博等,
微信分享到朋友或朋友圈
直接上程式碼 說明:因為微信的jsapi_ticket和token有時效性(7200秒)但微信那邊有限制你不能頻繁訪問,所以,我這裡是將這兩個引數存放至資料庫的,為避免剛好到7200秒時造成的分享失效,所以,在從資料庫查詢的時候,時效失效時間比較是比較的5
網狐榮耀版房卡房間分享給好友,好友點選後空白,或沒反應的解決辦法
最近總遇到網友反應,網狐榮耀版房卡遊戲,在建立房間後,邀請好友等操作後。好友點選分享連結沒反應或是空白,或是出錯。經過仔細檢查,發現他的遊戲系統的lua客戶端與伺服器端與網站根本就不是配套的,不是一個
Android之微信開放平臺實現分享(分享好友和朋友圈)
開發中分享操作往往經常遇到,而且還是一些比較大型一定的平臺,如微信,QQ,微博等。寫這篇部落格主要是把微信的的分享和相關操作表達一下,分享可以包含:文字,視訊,音樂,圖片等分享。分享可以有 分享給好友,群,朋友圈等。效果如下圖:(注意:功能根據自己的需要選擇就可以了)
Android 實現微信分享好友和朋友圈
1.在微信開放平臺 建立移動應用,並通過稽核,這裡要注意的是應用簽名要一致,(下載官網上的APK,輸入包名就可以生成了) 2.具體用法可以看官網的文件,這裡只總結使用過程遇到的問題和解決方法 3. 參照這個用法分享是可以的,但是如果你的圖片大於32kb就不