日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

vue實(shí)現(xiàn)將自己網(wǎng)站(h5鏈接)分享到微信中形成小卡片的超詳細(xì)教程

瀏覽:172日期:2022-06-01 14:42:13
目錄
  • 最新更新
  • 前言
  • 準(zhǔn)備工作
  • 前端業(yè)務(wù)實(shí)現(xiàn)(超詳細(xì))
  • 后端代碼實(shí)現(xiàn)(超詳細(xì))
  • 總結(jié)

最新更新

2022年12月24日23:58:30

發(fā)現(xiàn)了個(gè)問題,解決了好久,問題如下:

當(dāng)我直接將鏈接發(fā)送到微信中的時(shí)候,然后打開,發(fā)現(xiàn)分享出去還是個(gè)鏈接。當(dāng)我將鏈接分享到QQ時(shí),發(fā)現(xiàn)是自定義卡片形式。我將QQ的卡片在分享到微信里面時(shí),打開分享到微信,是自定義卡片形式。

這個(gè)問題看了好久,淘寶找人花80沒有解決,退款給我了,各大技術(shù)群問了個(gè)遍,也沒有解決,CSDN懸賞問答,也未能解決,最后發(fā)現(xiàn)是:
微信不支持直接進(jìn)去鏈接分享,不然分享的還是鏈接,需要從微信的入口進(jìn)去,比如先將內(nèi)容生成二維碼,然后掃描進(jìn)去在分享,就可以了!!!

前言

我們在分享公眾號(hào)信息到微信或者群中的時(shí)候,會(huì)出現(xiàn)一個(gè)小卡片,如下所示:

但是呢,這種小卡片只能走微信的接口來實(shí)現(xiàn),比如我們從公眾號(hào)、小程序中分享的內(nèi)容可以是這樣的。如果我們將自己的博客分享到微信的話,只會(huì)出現(xiàn)個(gè)鏈接。

那么,試問一下你,分享出來個(gè)這樣的鏈接,你會(huì)去點(diǎn)嗎?會(huì)不會(huì)以為這就是個(gè)釣魚鏈接。

今天,我們就來看看,如何將我們自己的站,搞一個(gè)和微信一樣的分享卡片出來。

準(zhǔn)備工作

  • 注冊一個(gè)公眾號(hào),該公眾號(hào)需要能認(rèn)證的(企業(yè)認(rèn)證)
  • 準(zhǔn)備好你的站,前端展示的是vue,別的可以自己對應(yīng)的轉(zhuǎn)換。
  • 后端用java實(shí)現(xiàn)的,別的語言自己轉(zhuǎn)換一下即可。

請注意,公眾號(hào)可以是訂閱號(hào),也可以是服務(wù)號(hào),但是必須是需要企業(yè)可以認(rèn)證的,個(gè)人雖然說有的也可以認(rèn)證,但是沒有調(diào)用分享接口的權(quán)限。

前端業(yè)務(wù)實(shí)現(xiàn)(超詳細(xì))

weixin-js-sdk幫助文檔在這里,可以提現(xiàn)看看,免得后面看到之后,顯得那么陌生~

下面我們來介紹一下實(shí)現(xiàn)步驟:

打開微信公眾平臺(tái),在“公眾號(hào)設(shè)置”的“功能設(shè)置”里填寫“JS接口安全域名”。

不設(shè)置會(huì)被攔截,沒法使用,大家可以仔細(xì)看看是如何設(shè)置的,第三點(diǎn)最重要:

在【基本配置】里面,配置一下你的ip白名單,不設(shè)置沒法獲取access_token,沒有toekn,一切都免談。

3. 在vue項(xiàng)目中,安裝weixin-js-sdk的依賴:

npm install weixin-js-sdk --save

在需要分享的vue頁面中寫代碼,先引入安裝好的依賴。

// 引入wxjsimport wx from "weixin-js-sdk"; 

methods中實(shí)現(xiàn)分享的功能:

getShareInfo() {      //獲取url鏈接(如果有#需要這么獲取)      var url = encodeURIComponent(window.location.href.split("#")[0]); 		//獲取url鏈接(如果沒有#需要這么獲取)     // var url = encodeURIComponent(window.location.href);      getSing(url).then(res => {wx.config({  debug: false, // 開啟調(diào)試模式,調(diào)用的所有 api 的返回值會(huì)在客戶端 alert 出來,若要查看傳入的參數(shù),可以在 pc 端打開,參數(shù)信息會(huì)通過 log 打出,僅在 pc 端時(shí)才會(huì)打印。  appId: res.data.appId, // 必填,公眾號(hào)的唯一標(biāo)識(shí)  timestamp: parseInt(res.data.timestamp), // 必填,生成簽名的時(shí)間戳  nonceStr: res.data.nonceStr, // 必填,生成簽名的隨機(jī)串  signature: res.data.signature, // 必填,簽名  jsApiList: [    "updateAppMessageShareData",    "updateTimelineShareData"  ] // 必填,需要使用的 JS 接口列表});wx.ready(() => {  var shareData = {    title: "每日新聞",    desc: "2022年12月20日21:47:55每日新聞",    link: window.location.href,    imgUrl: "https://blogobs.88688.team/blog/l-logo-y.jpg"  };  //自定義“分享給朋友”及“分享到QQ”按鈕的分享內(nèi)容  wx.updateAppMessageShareData(shareData);  //自定義“分享到朋友圈”及“分享到 QQ 空間”按鈕的分享內(nèi)容(1.4.0)  wx.updateTimelineShareData(shareData);});//錯(cuò)誤了會(huì)走 這里wx.error(function (res) {  console.log("微信分享錯(cuò)誤信息", res);});      });    },

代碼說明:

  • url 是我們要分享頁面的鏈接,需要傳遞到后端進(jìn)行加密簽名(后端的代碼我們待會(huì)兒看)
  • getSing方法是后端進(jìn)行簽名的方法,安全起見,所有config初始化中的關(guān)鍵信息,都從后端往回拿。
  • jsApiList是我們需要實(shí)現(xiàn)的功能的方法列表,逗號(hào)隔開。

created中調(diào)用一下getShareInfo方法:

// 調(diào)用分享的事件    this.getShareInfo();

前端內(nèi)容就這些,下面我們看看后端做了哪些操作。

后端代碼實(shí)現(xiàn)(超詳細(xì))

獲取token:為什么要獲取token,微信公眾號(hào)開發(fā)中,不管你做啥操作,都需要這個(gè)token,并且有效時(shí)間是7200s,也就是兩個(gè)小時(shí),兩小時(shí)后就失效,下面是java中獲取token的代碼:

 /**     * 獲取access_token的值     * @return     */    @GetMapping("/getToken")    public String getToken() {String token = "";String path = "token?grant_type=client_credential&appid=" + APPID + "&secret=" + APPSECRET;String body = HttpUtil.createGet(WX_GZH_API + path).execute().body();log.info("獲取了token,返回?cái)?shù)據(jù)" + body);JSONObject object = JSON.parseObject(body);//獲取tokentoken = object.getString("access_token");//失效時(shí)間String expires_in = object.getString("expires_in");//將token值的值放在redis里面redisService.setCacheObject("gzh_access_token", token,7190,TimeUnit.SECONDS);return token;    }

WX_GZH_API :

//公眾號(hào)請求的地址    public static String WX_GZH_API = "https://api.weixin.qq.com/cgi-bin/";

APPID APPSECRET換成你自己的就行。

獲取api_ticket,這個(gè)是用在簽名里面的,直接請求接口獲取就行。

/**     * 獲取jsapi_ticket     * @return     */    @GetMapping("/getJsapiTicket")    public String getJsapiTicket() {//獲取redis里面的tokenObject access_token = redisService.getCacheObject("gzh_access_token");if (access_token==null) {    access_token = getToken();}String path = "ticket/getticket?access_token=" + access_token.toString() + "&type=jsapi";String body = HttpUtil.createGet(WX_GZH_API + path).execute().body();log.info("獲取了JsapiTicket,返回?cái)?shù)據(jù)" + body);JSONObject object = JSON.parseObject(body);//獲取ticketString ticket = object.getString("ticket");//錯(cuò)誤碼Integer errcode = object.getInteger("errcode");if(errcode==0){    //將ticket值的值放在redis里面    redisService.setCacheObject("gzh_ticket", ticket,7190,TimeUnit.SECONDS);}return ticket;    }

這兩個(gè)方法我都寫了緩存,和是失效時(shí)間,并且在用的時(shí)候都會(huì)去判斷緩存里面有沒有值,沒有的話,我們再去請求重新獲取,而不是每次都請求獲取,這樣會(huì)造成接口請求頻繁受到限制的問題。

開始簽名:

    /**     * 開始簽名     */    @GetMapping("/getSing")    public ResponseResult getSing(String url){//從redis里面獲取ticketObject ticket = redisService.getCacheObject("gzh_ticket");if(ticket==null){    ticket = getJsapiTicket();}Map<String, String> ret = WeChatUtils.sign(ticket.toString(), url);JSONObject objectData = new JSONObject();for (Map.Entry entry : ret.entrySet()) {    objectData.put(entry.getKey().toString(),entry.getValue());}objectData.put("appId", APPID);return ResponseResult.success(objectData);    }

簽名的幾個(gè)工具類如下所示:

//******************************************    // 公眾號(hào)網(wǎng)頁開發(fā)    //******************************************    public static Map<String, String> sign(String jsapi_ticket, String url) {Map<String, String> ret = new HashMap<String, String>();String nonce_str = create_nonce_str();String timestamp = create_timestamp();String string1;String signature = "";//注意這里參數(shù)名必須全部小寫,且必須有序string1 = "jsapi_ticket=" + jsapi_ticket +"&noncestr=" + nonce_str +"&timestamp=" + timestamp +"&url=" + url;System.out.println(string1);try{    MessageDigest crypt = MessageDigest.getInstance("SHA-1");    crypt.reset();    crypt.update(string1.getBytes("UTF-8"));    signature = byteToHex(crypt.digest());}catch (NoSuchAlgorithmException | UnsupportedEncodingException e){    e.printStackTrace();}ret.put("url", url);ret.put("jsapi_ticket", jsapi_ticket);ret.put("nonceStr", nonce_str);ret.put("timestamp", timestamp);ret.put("signature", signature);return ret;    }    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;    }    private static String create_nonce_str() {return UUID.randomUUID().toString();    }    private static String create_timestamp() {return Long.toString(System.currentTimeMillis() / 1000);    }

加密簽名接口請求如下:

然后我們就實(shí)現(xiàn)了,你試試你的可以不。

總結(jié)

到此這篇關(guān)于vue實(shí)現(xiàn)將自己網(wǎng)站(h5鏈接)分享到微信中形成小卡片的文章就介紹到這了,更多相關(guān)vue將網(wǎng)站分享到微信小卡片內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
在线中文字幕播放| 国产亚洲一区二区手机在线观看| 啪啪国产精品| 中文字幕在线看片| 中文在线免费视频| 精品三级久久| 久久激情中文| 不卡一区2区| 亚洲精品一区二区在线看| 久久中文亚洲字幕| 日韩视频在线一区二区三区 | 中文在线中文资源| 黄色在线观看www| av亚洲一区二区三区| 久久免费国产| av不卡在线看| 亚洲欧美日本国产| 欧美一区自拍| 美女视频一区在线观看| 国产一区二区亚洲| 日韩欧美一区二区三区在线观看 | 日韩一区二区久久| 亚洲精品美女| 国产欧美日韩在线一区二区 | 午夜在线精品偷拍| 日韩不卡手机在线v区| 国产欧美三级| 激情综合婷婷| 欧美日中文字幕| 蜜桃av一区二区| 国产精品入口久久| 国产精品精品| 午夜欧美理论片| 日本免费新一区视频| 麻豆国产91在线播放| 蜜桃av在线播放| 香蕉久久久久久久av网站| 国产亚洲精品美女久久| 国产成人精品一区二区三区视频| 久久一区二区三区电影| 日韩一区二区三区精品| 国产精品国产三级国产在线观看| 日韩电影在线视频| 亚洲尤物在线| 国产精品一区高清| 99久久久久| 日韩av一二三| 日韩精品91| 亚洲精品乱码久久久久久蜜桃麻豆| 久久不见久久见免费视频7| 亚洲www啪成人一区二区| 久久高清免费观看| 久久久久97| 91国语精品自产拍| 国产精品伦一区二区| 91精品久久久久久久久久不卡| 中文字幕av亚洲精品一部二部| 国产精品**亚洲精品| 91精品一区二区三区综合在线爱| 亚洲1区在线| 日韩一区欧美| 日韩av网站在线免费观看| 日韩国产一区| 国产亚洲久久| 欧美精品九九| 国产在线观看91一区二区三区 | 四虎成人av| 亚洲另类黄色| 久久男人av资源站| 蜜芽一区二区三区| 精品国产黄a∨片高清在线| 丝袜亚洲精品中文字幕一区| 久久久久久网| 国产日韩中文在线中文字幕| 美女av在线免费看| 88久久精品| 婷婷综合亚洲| 国产一区二区三区日韩精品| 免费观看久久久4p| 视频福利一区| 欧美成人精品一级| 中文字幕一区二区三区日韩精品| 九九精品调教| 欧美激情精品| 亚洲一区二区三区四区电影 | 久久伊人久久| 日韩有吗在线观看| 黄色亚洲在线| 欧美成a人国产精品高清乱码在线观看片在线观看久| 少妇精品久久久一区二区三区| 99免费精品| 国产a亚洲精品| 国产欧美三级| 日韩和欧美的一区| 男人的天堂亚洲一区| 99成人超碰| 精品国产鲁一鲁****| 7m精品国产导航在线| 在线观看亚洲精品福利片| 免费精品国产的网站免费观看| av最新在线| 免费在线日韩av| 日本久久一区| 玖玖精品视频| 国产午夜精品一区二区三区欧美| 97视频热人人精品免费| 麻豆成人av在线| 国产日本久久| 日韩精品电影一区亚洲| 蜜桃久久久久久| 亚洲经典在线| 欧美日韩中文字幕一区二区三区| 日韩国产一区| 精品丝袜在线| 另类专区亚洲| 免费在线小视频| 国产一区丝袜| 国产成人1区| 国产一区二区久久久久| 久久精品二区亚洲w码| 免费在线日韩av| 麻豆久久一区| 精品视频一区二区三区四区五区 | 电影亚洲精品噜噜在线观看| 亚洲黄色网址| 九色porny丨国产首页在线| 欧美精选视频一区二区| 日本国产精品| 999精品色在线播放| 欧美国产偷国产精品三区| 欧美国产视频| 最新国产精品| 国产aⅴ精品一区二区三区久久| 97久久超碰| 欧美日韩18| 欧美日韩夜夜| 欧美日韩午夜| 免费久久精品| 精品一区欧美| 亚洲欧美日韩国产综合精品二区| 欧美专区一区二区三区| 日韩中文欧美在线| 中文字幕av一区二区三区人| 日韩高清一区二区| 久久国产婷婷国产香蕉| 久久精品超碰| 精品久久久亚洲| 99视频精品全国免费| 亚洲欧美日韩高清在线| 9久re热视频在线精品| 国产极品嫩模在线观看91精品| 日韩精品成人在线观看| 国产日韩电影| 欧美精品一卡| 国产欧美日韩综合一区在线播放| 亚洲天堂一区二区| 天堂精品久久久久| 国产精品久久久久蜜臀| 丝袜美腿成人在线| 久久久精品国产**网站| 欧美精品一区二区三区精品| 日韩一区二区三区四区五区| 国产欧美一区二区三区精品酒店| 巨乳诱惑日韩免费av| 久久不卡日韩美女| 黄色亚洲免费| 精品三级av| 一区二区三区四区日韩| 欧美国产另类| 日韩一级欧洲| 高清av一区| 最新国产精品久久久| 樱桃视频成人在线观看| 午夜a一级毛片亚洲欧洲| 日本不良网站在线观看| 成人国产精品| 日本国产亚洲| 黄色不卡一区| 成人午夜亚洲| 日韩精品免费一区二区夜夜嗨| 久久久五月天| 久久一区精品| 蜜桃久久久久久| 蜜臀久久精品| 91精品国产自产精品男人的天堂| 肉色欧美久久久久久久免费看| 日韩国产欧美在线播放| 久久一区二区三区电影| 久久中文欧美| 蜜臀va亚洲va欧美va天堂 | 色爱av综合网| 久久永久免费| 91精品国产自产观看在线| 欧美午夜不卡| 国产一区二区三区四区五区 | 国产精品亲子伦av一区二区三区 | 蜜桃av.网站在线观看| 国产精品视频一区二区三区| 人人爽香蕉精品| 亚洲欧美日韩高清在线|