小編這次要給大家分享的是詳解如何開發(fā)微信公眾號網(wǎng)頁分享功能,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、成都微信小程序、公眾號商城、等建站開發(fā),創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。
現(xiàn)在每天都可以看到很多微信分享的鏈接上面有網(wǎng)站或者商家的自定義的分享標題,和分享鏈接的描述及分享出去的圖像,例如下面的分享出去的鏈接:
上面這個是微信的js-SDK頁面分享給微信好友在聊天列表中顯示的視覺效果。
微信JS-SDK Demo :這個是微信網(wǎng)頁分享出去的標題。
微信JS-SDK,幫助第三方為用戶提供更優(yōu)質(zhì)的移動web服務:這個是被分享的這個頁面的分享描述。
微信圖標:這個就是自己網(wǎng)站或者自己自定義的圖像。
上面這個是微信官方網(wǎng)頁分享出去的定義描述,那么怎樣實現(xiàn)自己網(wǎng)站網(wǎng)頁的自定義分享的標題,描述及分享出去的顯示圖片呢,下面就具體的來探討一下微信網(wǎng)頁第三方分享自定的實現(xiàn)方式。
關(guān)于微信網(wǎng)頁分享自定義主要有兩方面的工作需要我們來做,一是:分享頁面的js分享代碼的編寫,二是:微信分享網(wǎng)頁的鏈接地址簽名。
首先來看一下網(wǎng)頁的連接地址簽名,這個功能主要是在服務端來時實現(xiàn)。
第一步:基礎(chǔ)數(shù)據(jù)的準備,需要如下數(shù)據(jù)信息:
APPID:微信公眾號的id; APP_SECRECT:公眾號號的密鑰。簽名的網(wǎng)站域名(這個建議配置在配置文件中)。
第二步:微信簽名數(shù)據(jù)的準備:
appid,secret,url將這三個參數(shù)放入map中, 鍵值為:appid=微信公眾號的id,secret=APP_SECRECT,url=網(wǎng)站的域名+網(wǎng)頁的請求地址+請求的參數(shù)。
代碼的實現(xiàn)方式如下:
1. controller層的代碼實現(xiàn):
@RequestMapping("cover") public String identifyCover(HttpServletRequest request, HttpServletResponse response) //微信分享授權(quán)開始 String appId = ;//取項目中配置的公眾號id String secret = ;//取項目中配置的公眾號密鑰 //例如我們有一個分享的鏈接為:http://test.weixinfwenx.cn/project/fenxiang.do?id=1&name=2; //那么domainAddr = http://test.weixinfwenx.cn,這個可以動態(tài)的配置在項目里,方便測試環(huán)境和生產(chǎn) //域名的切換 String domainAddr = "";//項目中配置的網(wǎng)站的域名 //這個取的是鏈接上的參數(shù),例如在上面的這個鏈接中,id=1&name=2就是我們要動態(tài)去的參數(shù),可能有人 //會想到,這個兩個參數(shù)直接寫在地址中不是挺簡單的為啥還要動態(tài)去獲取這個參數(shù)呢;在這里我們引出了一 //個微信二次分享的問題,就是別人轉(zhuǎn)發(fā)的鏈接給你,然后你再轉(zhuǎn)發(fā)給別人,在你轉(zhuǎn)發(fā)給別人后這個鏈接的簽 //名就會失敗,為啥呢,因為經(jīng)過再次轉(zhuǎn)發(fā)的鏈接,微信會自動加上一些自己的參數(shù),這樣會導致頁面上微信 //分享的鏈接和簽名的鏈接不一致。直接導致自定義的標題和鏈接描述,顯示失敗,失敗原因是微信默認的在 //我們的分享鏈接上加上了&from=singlemessage。 String str = request.getQueryString(); Mapmap = new HashMap (); map.put("appid", appId); map.put("secret", secret); String url = domainAddr + "/project/fenxiang.do?"+str; map.put("url", url); //這個地址是傳給頁面使用 request.setAttribute("fenxurl", url); //開始微信分享鏈接簽名 Map params = weixinService.weixinjsIntefaceSign(map); request.setAttribute("params", params); return "自己的頁面";
2.service層的實現(xiàn)代碼:
接口:
public interface weixinService{ /** * @Title: weixinjsIntefaceSign * @Description: 微信js接口授權(quán) * @param map * @return * @return: Map*/ public Map weixinjsIntefaceSign(Map map);
接口實現(xiàn)類:
public class weixinServiceImpl implements weixinService{ public MapweixinjsIntefaceSign(Map map){ //查看緩存數(shù)據(jù)是否存在 String cacheAccess_token = jedis.get("access_token"); String cacheTicket = jedis.get("ticket"); //取出來為空的話則說明cacheAccess_token緩存過期,重新獲取 if(null == cacheAccess_token){ ///////////////////////////////start //獲取cacheAccess_token //這段代碼實際開發(fā)過程中要寫成一個方法,我這里為了演示方便寫在了一起。 StringBuffer buffer = new StringBuffer(); buffer.append("https://api.weixin.qq.com/cgi-bin/token?"); buffer.append("appid="+map.get("appid")); buffer.append("&secret="+map.get("secret")); buffer.append("&grant_type=client_credential"); String resultMsg = SendUtils.sendGet(buffer.toString(), "UTF-8"); ///////////////////// end JSONObject json = new JSONObject(resultMsg); cacheAccess_token = json.getString("access_token"); jedis.set("access_token",cacheAccess_token, "NX", "EX", 3600);//單位是秒 } //取出來為空的話則說明cacheTicket緩存過期,重新獲取 if(null == cacheTicket){ ////////////////////////// start ////獲得jsapi_ticket StringBuffer buffer = new StringBuffer(); buffer.append("https://api.weixin.qq.com/cgi-bin/ticket/getticket?"); buffer.append("access_token="+access_token); buffer.append("&type=jsapi"); String ticket = SendUtils.sendGet(buffer.toString(), "UTF-8"); ///////////////////// end JSONObject json2 = new JSONObject(ticket); cacheTicket = json2.getString("ticket"); jedis.set("ticket",cacheTicket, "NX", "EX", 3600);//單位是秒 } //生成簽名 SortedMap
輔助工具類:
/** * * 加密工具類 * */ public class Sha1 { public static String getSha1Sign(String decript) { try { MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1"); try { digest.update(decript.getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte messageDigest[] = digest.digest(); // Create Hex String StringBuffer hexString = new StringBuffer(); // 字節(jié)數(shù)組轉(zhuǎn)換為 十六進制 數(shù) for (int i = 0; i < messageDigest.length; i++) { String shaHex = Integer.toHexString(messageDigest[i] & 0xFF); if (shaHex.length() < 2) { hexString.append(0); } hexString.append(shaHex); } return hexString.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } }
http請求工具類:
/** * http請求工具類 * */ public class SendUtils { public static String sendGet(String url,String charset){ //新建客戶端 HttpClient httpclient = new HttpClient(); GetMethod getMethod = new GetMethod(url); httpclient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, charset); httpclient.executeMethod(getMethod); String responseMsg = getMethod.getResponseBodyAsString(); return responseMsg; } }
以上是服務器端的微信簽名的實現(xiàn)代碼,下面介紹一下分享頁面中js的編寫。
第一步引入微信的js文件:
第二步:
wx.config({ debug: false, appId: '${params.appId}', timestamp: '${params.timestamp}', nonceStr: '${params.noncestr}', signature:'${params.signature}', jsApiList: [ 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone' ] }); wx.ready(function(){ wx.checkJsApi({ jsApiList: [ 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone' ] }); wx.checkJsApi({ jsApiList: [ 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone' ] }); /*分享到朋友圈*/ wx.onMenuShareTimeline({ title: '計劃書', // 分享標題 desc: '保險讓生活更美好!', // 分享描述 link: '${fenxurl}', // 分享鏈接 imgUrl: '${params.urlg}/PF_IDENTIFY/Cacheable/image/business/plan-cover/product_img.png', // 分享圖標 success: function () { // 用戶確認分享后執(zhí)行的回調(diào)函數(shù) }, cancel: function () { // 用戶取消分享后執(zhí)行的回調(diào)函數(shù) } }); /*分享給朋友*/ wx.onMenuShareAppMessage({ title: '計劃書', // 分享標題 desc: '保險讓生活更美好!', // 分享描述 link: '${fenxurl}', // 分享鏈接 imgUrl: '${params.urlg}/PF_IDENTIFY/Cacheable/image/business/plan-cover/product_img.png', // 分享圖標 type: 'link', // 分享類型,music、video或link,不填默認為link dataUrl: '', // 如果type是music或video,則要提供數(shù)據(jù)鏈接,默認為空 success: function () { // 用戶確認分享后執(zhí)行的回調(diào)函數(shù) alert("您已分享"); }, cancel: function () { // 用戶取消分享后執(zhí)行的回調(diào)函數(shù) alert('您已取消分享'); } }); wx.onMenuShareQQ({ title: '計劃書', // 分享標題 desc: '保險讓生活更美好!', // 分享描述 link: '${fenxurl}', // 分享鏈接 imgUrl: '${params.urlg}/PF_IDENTIFY/Cacheable/image/business/plan-cover/product_img.png', // 分享圖標 success: function () { // 用戶確認分享后執(zhí)行的回調(diào)函數(shù) }, cancel: function () { // 用戶取消分享后執(zhí)行的回調(diào)函數(shù) } }); wx.onMenuShareWeibo({ title: '計劃書', // 分享標題 desc: '保險讓生活更美好!', // 分享描述 link: '${fenxurl}', // 分享鏈接 imgUrl: '${params.urlg}/PF_IDENTIFY/Cacheable/image/business/plan-cover/product_img.png', // 分享圖標 success: function () { // 用戶確認分享后執(zhí)行的回調(diào)函數(shù) }, cancel: function () { // 用戶取消分享后執(zhí)行的回調(diào)函數(shù) } }); wx.onMenuShareQZone({ title: '計劃書', // 分享標題 desc: '保險讓生活更美好!', // 分享描述 link: '${fenxurl}', // 分享鏈接 imgUrl: '${params.urlg}/PF_IDENTIFY/Cacheable/image/business/plan-cover/product_img.png', // 分享圖標 success: function () { // 用戶確認分享后執(zhí)行的回調(diào)函數(shù) }, cancel: function () { // 用戶取消分享后執(zhí)行的回調(diào)函數(shù) } }); });
至此整個微信的整個分享開發(fā)完成,上面的這些js文件,都必須放在頁面上。
看完這篇關(guān)于詳解如何開發(fā)微信公眾號網(wǎng)頁分享功能的文章,如果覺得文章內(nèi)容寫得不錯的話,可以把它分享出去給更多人看到。