微信分享內容給朋友、朋友圈、QQ、QQ空間等
示例網頁
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="renderer" content="webkit"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"> <meta name="author" content="ershuai" /> <meta name="Copyright" content="ershuai" /> <title>二帥</title> <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script type="text/javascript" src="../scripts/common/wx_share/wechat_common_share.js"></script> </head> <body> init share </body> <script type="text/javascript"> $(document).ready(function() { var initUrl = window.location.href; var shareLogo = "http://img3.imgtn.bdimg.com/it/u=224917259,3388622236&fm=21&gp=0.jpg"; var lineLink = "https://www.baidu.com"; var shareContent = "分享的內容描述"; var shareTitle = "分享的標題描述"; initShare(initUrl, lineLink, shareTitle, shareContent, shareLogo); }); </script> </html>
wechat_common.share.js
var init_share_url = "http://[host]/wechat/initWechatConfig.xhtml"; /** * 初始化分享 * @param initUrl 當前初始化網頁地址 * @param lineLink 點選後跳轉地址 * @param shareTitle 分享標題 * @param shareContent 分享內容 * @param shareLogo 分享logo */ function initShare(initUrl, lineLink, shareTitle, shareContent, shareLogo) { $.ajax({ type : "post", url : init_share_url, data : { "initUrl" : initUrl, "initType" : "jsapi" }, dataType : "json", error : function(request) { alert('初始化分享失敗,請稍後重試'); }, success : function(ajaxRes) { var state = ajaxRes.state; if (state == 1) { var data = ajaxRes.data; //初始化微信配置 wxShareConfig(data.appId, data.timestamp, data.nonceStr, data.signature); //分享準備 wxShareReady(lineLink, shareTitle, shareContent, shareLogo); } else { alert(ajaxRes.msg); } } }); }; /** * 初始化微信分享配置 * @param appId * @param timestamp * @param nonceStr * @param signature */ function wxShareConfig(appId, timestamp, nonceStr, signature) { wx.config({ debug: false, appId: appId, timestamp: timestamp, nonceStr: nonceStr, signature: signature, jsApiList: [ 'checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareQZone' ] }); wx.error(function (res) { alert(res.errMsg); }); } /** * 分享準備 * @param lineLink * @param shareTitle * @param shareContent * @param shareLogo */ function wxShareReady(lineLink, shareTitle, shareContent, shareLogo) { wx.ready(function () { //獲取“分享到朋友圈” wx.onMenuShareTimeline({ title: shareTitle, // 分享標題 link: lineLink, // 分享連結 imgUrl: shareLogo, // 分享圖示 success: function () { // 使用者確認分享後執行的回撥函式 }, cancel: function () { // 使用者取消分享後執行的回撥函式 } }); //獲取“分享給朋友” wx.onMenuShareAppMessage({ title: shareTitle, // 分享標題 desc: shareContent, // 分享描述 link: lineLink, // 分享連結 imgUrl: shareLogo, // 分享圖示 type: 'link', // 分享型別,music、video或link,不填預設為link dataUrl: '', // 如果type是music或video,則要提供資料鏈接,預設為空 success: function () { // 使用者確認分享後執行的回撥函式 //alert('已分享'); //window.location.href = "https://www.baidu.com"; }, cancel: function () { // 使用者取消分享後執行的回撥函式 //alert('已取消'); } }); //獲取“分享到QQ” wx.onMenuShareQQ({ title: shareTitle, // 分享標題 desc: shareContent, // 分享描述 link: lineLink, // 分享連結 imgUrl: shareLogo, // 分享圖示 success: function () { // 使用者確認分享後執行的回撥函式 }, cancel: function () { // 使用者取消分享後執行的回撥函式 } }); //獲取“分享到QQ空間” wx.onMenuShareQZone({ title: shareTitle, // 分享標題 desc: shareContent, // 分享描述 link: lineLink, // 分享連結 imgUrl: shareLogo, // 分享圖示 success: function () { // 使用者確認分享後執行的回撥函式 }, cancel: function () { // 使用者取消分享後執行的回撥函式 } }); //獲取“分享到騰訊微博” wx.onMenuShareWeibo({ title: shareTitle, // 分享標題 desc: shareContent, // 分享描述 link: lineLink, // 分享連結 imgUrl: shareLogo, // 分享圖示 success: function () { // 使用者確認分享後執行的回撥函式 }, cancel: function () { // 使用者取消分享後執行的回撥函式 } }); }); }
到這裡,前端就完事了
現在實現,init_share_url方法
var init_share_url = "http://[host]/wechat/initWechatConfig.xhtml";
initWechatConfig方法內容:
(因為我這個有多個服務號要維護,是根據rawId來判斷的;一般情況是不用rawId引數的)
@RequestMapping("/initWechatConfig.xhtml") public void initWechatConfig(HttpServletRequest request, HttpServletResponse response) throws Exception { try { String initUrl = getParams("initUrl");//當前網頁地址 String initType = getParams("initType"); if (CommonUtil.isNull(initUrl) || CommonUtil.isNull(initType)) {//判斷null throw new BizException(ErrorMsg.PARAMS_NULL); } String rawId = getParams("rawId"); if (CommonUtil.isNull(rawId)) { rawId = Constants.RawId_broker; } HashMap<String, Object> respMap = new HashMap<String, Object>(); if ("jsapi".equals(initType)) {//初始化分享 String noncestr = RandomUtil.nextInt(initType.toUpperCase(), 100, 999);//隨機數,用uuid什麼的也可以 String timestamp = DateUtil.getTimestampWx();//時間戳 Long.toString(System.currentTimeMillis() / 1000) String signature = null; //獲取 Ticket ticket = this.wechatService.getJsapiTicket(rawId); signature = SHA1Util.signForJsapiTicket(ticket.getTicket(), noncestr, timestamp, initUrl); respMap.put("appId", Constants.getAppId(rawId)); respMap.put("timestamp", timestamp); respMap.put("nonceStr", noncestr); respMap.put("signature", signature); } else if ("pay".equals(initType)) {//初始化支付 } writeSuccMsg(response, respMap); } catch (Exception e) { log.error("初始化微信配置 異常:", e); writeErrorMsg(response, e.getMessage()); } }
RequestAddr的引數配置
// 獲取access_token的介面地址(GET) API要求每天限制2000 - 全域性access_token
public static final String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET";
// 獲取ticket_url的介面地址(GET) API
public static final String ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";
// 獲取ticket_url的引數
public static final String ticket_url_params = "jsapi_ticket=JSAPI_TICKET&noncestr=NONCESTR×tamp=TIMESTAMP&url=INIT_URL";
getJsapiTicket方法
public Ticket getJsapiTicket(String rawId) throws Exception {
//請求全域性access_token
AccessToken accessToken = getAccessToken(rawId);
//獲取jsapi_ticket
Ticket ticket = WeChatUtils.getJsapiTicket(accessToken.getAccess_token());
return ticket;
}
/**
* 獲取全域性access_token 公共方法
* @author ershuai
* @version V1.0
* @param rawId
* @return
* @throws Exception
*/
public AccessToken getAccessToken(String rawId) throws Exception {
//請求全域性access_token
AccessToken accessToken = WeChatUtils.getAccessToken(rawId);
return accessToken;
}
WeChatUtils類
/**
* 憑證access_token的獲取方法 - 全域性access_token
* @author ershuai
* @version V1.0
* @return
* @throws Exception
*/
public static AccessToken getAccessToken(String rawId) throws Exception {
String appId = Constants.getAppId(rawId);
String appSecret = Constants.getAppSecret(rawId);
//url
String access_token_url = RequestAddr.access_token_url;
//匹配引數
access_token_url = access_token_url.replace("APPID", appId);
access_token_url = access_token_url.replace("SECRET", appSecret);
//匹配引數
//請求
String respStr = WebUtils.doGet(access_token_url, null);
AccessToken accessToken = null;
if (null != respStr) {
accessToken = JSON.parseObject(respStr, AccessToken.class);
}
return accessToken;
}
/**
* 憑證JsapiTicket的獲取方法
* @author ershuai
* @version V1.0
* @param accessToken
* @return
* @throws Exception
*/
public static Ticket getJsapiTicket(String accessToken) throws Exception {
//url
String jsapi_ticket_url = RequestAddr.ticket_url.replace("ACCESS_TOKEN", accessToken);
//匹配引數
jsapi_ticket_url = jsapi_ticket_url.replace("ACCESS_TOKEN", accessToken);
//請求
String respStr = WebUtils.doGet(jsapi_ticket_url, null);
Ticket ticket = null;
if (null != respStr) {
ticket = JSON.parseObject(respStr, Ticket.class);
}
return ticket;
}
SHA1Util類
/**
* sign簽名,對於 jsapi_ticket
* @author ershuai
* @version V1.0
* @param jsapiTicket
* @param noncestr
* @param timestamp
* @param initUrl
* @return
*/
public static String signForJsapiTicket(String jsapiTicket, String noncestr, String timestamp, String initUrl) {
String signature = null;
// 注意這裡引數名必須全部小寫,且必須有序
String signatureStr = RequestAddr.ticket_url_params;
signatureStr = signatureStr.replace("JSAPI_TICKET", jsapiTicket);
signatureStr = signatureStr.replace("NONCESTR", noncestr);
signatureStr = signatureStr.replace("TIMESTAMP", timestamp);
signatureStr = signatureStr.replace("INIT_URL", initUrl);
try {
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(signatureStr.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return signature;
}
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash) {
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
PS:做完以上流程,應該就可以完成分享功能了;出現最多的錯誤應該就是簽名不正確,這個問題檢查幾個微信引數就好了;
config:invalid url domain 錯誤是需要去 公眾號設定 - 功能設定 - JS介面安全域名;配置域名
相關推薦
微信分享內容給朋友、朋友圈、QQ、QQ空間等
示例網頁 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="renderer" content="webkit"> <meta
自定義微信分享內容
bsp log 域名 span times con sign grant 頁面 1、公眾號設置 -> 功能設置 :填寫“JS接口安全域名” 2、引入js文件:http://res.wx.qq.com/open/js/jweixin-1.2.0.js 3、獲取Acces
.Net微信網頁開發之使用微信JS-SDK自定義微信分享內容
第一步、微信JS-SDK的使用步驟,配置資訊的生成獲取講解: 關於JS-SDK的使用步驟和timestamp(時間戳),nonceStr(隨機串),signature(簽名),access_token(介面呼叫憑據)生成獲取的詳細說明在這裡:https://www.cnblogs.com/Can-day
微信分享到朋友圈、傳送給朋友開發注意事項
1、invalid url domain 當前頁面所在域名與使用的appid沒有繫結,請確認正確填寫繫結的域名,如果使用了埠號,則配置的繫結域名也要加上埠號(一個appid可以繫結三個有效域名,見 目錄1.1.1)。 2、invalid signature簽名錯誤。 建議按如下順序檢查:
關於微信分享朋友圈、分享給朋友、隱藏“傳播類”和“保護類”按鈕
1、引入微信官方的js檔案,將該js檔案放到最前面引入:<script src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 2、初始化微信所需引數: 2.1 注意:wx.con
微信分享朋友圈分享程式碼自定義標題、說明、圖示和分享連結
最近在做手機網站在分享到微信時,通過微信內建瀏覽器訪問頁面分享後,希望可以自定義小圖示(imgUrl)和分享連結(lineLink),下面下微信內建瀏覽器分享功能的JS程式碼,希望對大家有所幫助。 JS程式碼如下: var imgUrl = "http://www.gdibn.com/m/im
簡單粗暴教你在VUE中引入微信SDK 呼叫微信分享、朋友圈分享、QQ分享......
寫在前面: 剛做了一個微信端的網頁,用到了微信分享,在網上看了好多的資料,發現好多文件都寫得雲裡霧裡,讓人看的頭疼。通過對很多大佬文章的綜合整理,才完成了微信分享的部分。所以我想著自己寫一篇文章,能讓看到我這篇文章的親們能夠清楚的明白在vue上怎麼使用微信分享SDK,能夠按照
iOS開發之第三方分享微信分享、朋友圈分享,史上最新最全第三方分享微信方式實現、朋友圈方式實現
微信分享前提: 1.需要成功在微信開發者平臺註冊了賬號, 並取的對應的 appkey appSecret。 2. 針對iOS9 添加了微信的白名單,以及設定了 scheme url 。 這都可以參照上面的連結,進行設定好。 3. 分享不跳轉的時
微信分享到朋友圈,分享給朋友JS程式碼
</body> <script> $(document).ready(function(){ /* * 注意: * 1. 所有的JS介面只能在公眾號繫結的域名下呼叫,公眾號開發者需要先登入微信公眾平臺進入“公眾號設定”的“功能設定”裡填寫“JS介面安全域名”
微信“分享到朋友圈”介面— wx.onMenuShareTimeline() 和 onMenuShareAppMessage — 分享給朋友介面
微信“分享到朋友圈”介面—— wx.onMenuShareTimeline() 注意事項: 1. 圖片大小要大於300pix才能顯示; 2. 這個方法必須先config成功,然後再wx.ready裡才能呼叫。直接放到$(function(){})裡執行,實踐證明是不行的。
微信分享到朋友圈失敗,分享給朋友等正常
微信分享朋友圈,提示 獲取資源失敗,僅支援分享照片至朋友圈 原因:繞過稽核分享到朋友圈一定要加一張圖片才可以的 ShareSDK.xml裡面 BypassAppr
原 微信分享自定義樣式&微信分享給朋友自定義圖文資訊
下圖為效果圖:上圖為沒有設定得樣式,下圖是設定樣式分享後的效果,差距甚遠。 做的過程也遇到了一些問題,我會在博文最下方標明. 下面是我的程式碼: <!DOCTYPE html> <html lang="en"> <head>
iOS9中實現微信分享到好友、朋友圈
微信SDKdemo執行錯誤問題 微信SDK接入設定 實現分享到好友、朋友圈 微信SDKdemo執行錯誤問題 下載了官方的demo,激動地運行了一下,十幾個錯誤,內心其實是崩潰的。 根據錯誤提示,去修改a
Android APP中跳轉至微信,分享圖文給好友或者朋友圈(加跳轉QQ好友或QQ群)
/** * 分享圖片給好友 * * @param file */ private void shareToFriend(File file) { Intent intent = new Intent(); ComponentName comp = new
微信分享給朋友及朋友圈JS程式碼
<script> var imgUrl = "圖片地址"; var lineLink = "網址"; var descContent = '描述文字在這裡.....'; var shareTitle
微信公眾平臺網頁開發實戰--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