位置: IT常识 - 正文

vue实现将自己网站(h5链接)分享到微信中形成小卡片(超详细)(vue引入网络js)

编辑:rootadmin
vue实现将自己网站(h5链接)分享到微信中形成小卡片(超详细)

推荐整理分享vue实现将自己网站(h5链接)分享到微信中形成小卡片(超详细)(vue引入网络js),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue编写网页,vue开发的网站如何部署,vue嵌入其他网页,vue写网站,如何用vue写网页,vue引入网络js,vue嵌入其他网页,vue引入网络js,内容如对您有帮助,希望把文章链接给更多的朋友!

大家好,我是雄雄。

最新更新

2022年12月24日23:58:30 发现了个问题,解决了好久,问题如下:

当我直接将链接发送到微信中的时候,然后打开,发现分享出去还是个链接。当我将链接分享到QQ时,发现是自定义卡片形式。我将QQ的卡片在分享到微信里面时,打开分享到微信,是自定义卡片形式。

这个问题看了好久,淘宝找人花80没有解决,退款给我了,各大技术群问了个遍,也没有解决,CSDN悬赏问答,也未能解决,最后发现是: 微信不支持直接进去链接分享,不然分享的还是链接,需要从微信的入口进去,比如先将内容生成二维码,然后扫描进去在分享,就可以了!!!

前言

我们在分享公众号信息到微信或者群中的时候,会出现一个小卡片,如下所示:

但是呢,这种小卡片只能走微信的接口来实现,比如我们从公众号、小程序中分享的内容可以是这样的。如果我们将自己的博客分享到微信的话,只会出现个链接。

那么,试问一下你,分享出来个这样的链接,你会去点吗?会不会以为这就是个钓鱼链接。

vue实现将自己网站(h5链接)分享到微信中形成小卡片(超详细)(vue引入网络js)

今天,我们就来看看,如何将我们自己的站,搞一个和微信一样的分享卡片出来。

准备工作注册一个公众号,该公众号需要能认证的(企业认证)准备好你的站,前端展示的是vue,别的可以自己对应的转换。后端用java实现的,别的语言自己转换一下即可。

请注意,公众号可以是订阅号,也可以是服务号,但是必须是需要企业可以认证的,个人虽然说有的也可以认证,但是没有调用分享接口的权限。

前端业务实现(超详细)

weixin-js-sdk帮助文档在这里,可以提现看看,免得后面看到之后,显得那么陌生~ 帮助文档

下面我们来介绍一下实现步骤:

打开微信公众平台,在“公众号设置”的“功能设置”里填写“JS接口安全域名”。 不设置会被拦截,没法使用,大家可以仔细看看是如何设置的,第三点最重要: 在【基本配置】里面,配置一下你的ip白名单,不设置没法获取access_token,没有toekn,一切都免谈。

3. 在vue项目中,安装weixin-js-sdk的依赖:

npm install weixin-js-sdk --save在需要分享的vue页面中写代码,先引入安装好的依赖。// 引入wxjsimport wx from "weixin-js-sdk"; 在methods中实现分享的功能: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, // 开启调试模式,调用的所有 api 的返回值会在客户端 alert 出来,若要查看传入的参数,可以在 pc 端打开,参数信息会通过 log 打出,仅在 pc 端时才会打印。 appId: res.data.appId, // 必填,公众号的唯一标识 timestamp: parseInt(res.data.timestamp), // 必填,生成签名的时间戳 nonceStr: res.data.nonceStr, // 必填,生成签名的随机串 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://www.yuucn.com/wp-content/uploads/2023/04/1682825171-0f497d3f638fc81.jpg" }; //自定义“分享给朋友”及“分享到QQ”按钮的分享内容 wx.updateAppMessageShareData(shareData); //自定义“分享到朋友圈”及“分享到 QQ 空间”按钮的分享内容(1.4.0) wx.updateTimelineShareData(shareData); }); //错误了会走 这里 wx.error(function (res) { console.log("微信分享错误信息", res); }); }); },

代码说明:

url 是我们要分享页面的链接,需要传递到后端进行加密签名(后端的代码我们待会儿看)getSing方法是后端进行签名的方法,安全起见,所有config初始化中的关键信息,都从后端往回拿。jsApiList是我们需要实现的功能的方法列表,逗号隔开。在created中调用一下getShareInfo方法:// 调用分享的事件 this.getShareInfo();

前端内容就这些,下面我们看看后端做了哪些操作。

后端代码实现(超详细)获取token:为什么要获取token,微信公众号开发中,不管你做啥操作,都需要这个token,并且有效时间是7200s,也就是两个小时,两小时后就失效,下面是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,返回数据" + body); JSONObject object = JSON.parseObject(body); //获取token token = object.getString("access_token"); //失效时间 String expires_in = object.getString("expires_in"); //将token值的值放在redis里面 redisService.setCacheObject("gzh_access_token", token,7190,TimeUnit.SECONDS); return token; }

WX_GZH_API :

//公众号请求的地址 public static String WX_GZH_API = "https://api.weixin.qq.com/cgi-bin/";

APPID 和APPSECRET换成你自己的就行。

获取api_ticket,这个是用在签名里面的,直接请求接口获取就行。/** * 获取jsapi_ticket * @return */ @GetMapping("/getJsapiTicket") public String getJsapiTicket() { //获取redis里面的token Object 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,返回数据" + body); JSONObject object = JSON.parseObject(body); //获取ticket String ticket = object.getString("ticket"); //错误码 Integer errcode = object.getInteger("errcode"); if(errcode==0){ //将ticket值的值放在redis里面 redisService.setCacheObject("gzh_ticket", ticket,7190,TimeUnit.SECONDS); } return ticket; }

这两个方法我都写了缓存,和是失效时间,并且在用的时候都会去判断缓存里面有没有值,没有的话,我们再去请求重新获取,而不是每次都请求获取,这样会造成接口请求频繁受到限制的问题。

开始签名: /** * 开始签名 */ @GetMapping("/getSing") public ResponseResult getSing(String url){ //从redis里面获取ticket Object 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); }

签名的几个工具类如下所示:

//****************************************** // 公众号网页开发 //****************************************** 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 = ""; //注意这里参数名必须全部小写,且必须有序 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); }

加密签名接口请求如下: 然后我们就实现了,你试试你的可以不。

本文链接地址:https://www.jiuchutong.com/zhishi/297429.html 转载请保留说明!

上一篇:数据分析| Pandas200道练习题,使用Pandas连接MySQL数据库(数据分析课)

下一篇:uniapp 开发安卓App实现高德地图路线规划导航(uniapp 开发安卓app怎么打包迭代版本)

  • n28a频段和n28频段有区别吗(n28频段什么意思)

    n28a频段和n28频段有区别吗(n28频段什么意思)

  • 苹果怎么给app悬浮窗权限(苹果怎么给app悬浮窗设置)

    苹果怎么给app悬浮窗权限(苹果怎么给app悬浮窗设置)

  • 微信朋友圈位置怎么自己修改(微信朋友圈位置选择地区改不了)

    微信朋友圈位置怎么自己修改(微信朋友圈位置选择地区改不了)

  • 小米手机怎么制作长图照片(小米手机怎么制作手机铃声)

    小米手机怎么制作长图照片(小米手机怎么制作手机铃声)

  • b站视频播放量计算规则(b站视频播放量旁边的符号是什么意思)

    b站视频播放量计算规则(b站视频播放量旁边的符号是什么意思)

  • 相关信息已隐藏怎么打开(王者荣耀主页相关信息已隐藏)

    相关信息已隐藏怎么打开(王者荣耀主页相关信息已隐藏)

  • 设备管理信任跳不出来(设备信任有什么危害)

    设备管理信任跳不出来(设备信任有什么危害)

  • 手机qq邮箱文件打不开怎么办(手机qq邮箱文件中转站怎么重命名)

    手机qq邮箱文件打不开怎么办(手机qq邮箱文件中转站怎么重命名)

  • 耳机插在充电口无反应(耳机插在充电口没声音)

    耳机插在充电口无反应(耳机插在充电口没声音)

  • 苹果a1660是全网通吗(苹果a1660是什么)

    苹果a1660是全网通吗(苹果a1660是什么)

  • 苹果11mwn72ch/a是什么版本(iphone 11mwn72ch/a)

    苹果11mwn72ch/a是什么版本(iphone 11mwn72ch/a)

  • 页脚怎么设置与上一页不同(页脚怎么设置与文字对齐)

    页脚怎么设置与上一页不同(页脚怎么设置与文字对齐)

  • 电子秤按键部分失灵怎么修(电子秤上的按键)

    电子秤按键部分失灵怎么修(电子秤上的按键)

  • 苹果耳机二代弹窗很慢(苹果耳机二代弹窗)

    苹果耳机二代弹窗很慢(苹果耳机二代弹窗)

  • vivo无法充电咨询售后怎么回事(vivo无法充电咨询售后维修)

    vivo无法充电咨询售后怎么回事(vivo无法充电咨询售后维修)

  • 微信视频通话最多几个人

    微信视频通话最多几个人

  • 苹果7无服务是哪坏了(苹果7无服务是不是摔得)

    苹果7无服务是哪坏了(苹果7无服务是不是摔得)

  • 支付宝怎么在相册扫福卡(支付宝怎么相互扫红包)

    支付宝怎么在相册扫福卡(支付宝怎么相互扫红包)

  • 华为返回图标怎么设置(华为图标返回键在哪里弄出来)

    华为返回图标怎么设置(华为图标返回键在哪里弄出来)

  • iphone8plus的访问限制在哪(苹果8p访问权限)

    iphone8plus的访问限制在哪(苹果8p访问权限)

  • 怎么恢复陌陌聊天记录(怎么恢复陌陌聊天记录不用电脑)

    怎么恢复陌陌聊天记录(怎么恢复陌陌聊天记录不用电脑)

  • 充电宝经常摔会爆炸吗(充电宝经常摔会炸吗)

    充电宝经常摔会爆炸吗(充电宝经常摔会炸吗)

  • 手机wps怎么和电脑同步(手机版wps与电脑版wps怎么互动)

    手机wps怎么和电脑同步(手机版wps与电脑版wps怎么互动)

  • 苹果x掉水里有事吗(苹果x掉水里拿出来没事)

    苹果x掉水里有事吗(苹果x掉水里拿出来没事)

  • 华为畅享9有指纹识别吗(华为畅享9有指纹解锁吗华为畅享9的处理器)

    华为畅享9有指纹识别吗(华为畅享9有指纹解锁吗华为畅享9的处理器)

  • vue项目:大屏自适应解决方案(两种)(vue 大屏可视化设计 开源)

    vue项目:大屏自适应解决方案(两种)(vue 大屏可视化设计 开源)

  • root面具怎么授权,面具root权限(root面具怎么用)

    root面具怎么授权,面具root权限(root面具怎么用)

  • 野外探险家亚历克斯·彼得森在胡德山南侧快速滑翔,俄勒冈 (© Richard Hallman/DEEPOL by plainpicture)(野外生存探险家)

    野外探险家亚历克斯·彼得森在胡德山南侧快速滑翔,俄勒冈 (© Richard Hallman/DEEPOL by plainpicture)(野外生存探险家)

  • 销项税转出是啥意思
  • 偶然所得税起征点800是每月吗
  • 经销商返点方案范文
  • 报销单据粘贴单图片
  • 小规模没有税控怎么办
  • 个税中房屋租赁日期写长跟写短
  • 汇算清缴退款怎么入账
  • 代扣代缴增值税怎么做账
  • 新会计准则下长期股权投资的变化
  • 办理会员卡套路消费
  • 非盈利组织捐赠支出
  • 出口企业增值税税负率
  • 工程款发票备注栏项目名称
  • 跨年度的成本费用发票怎么入账
  • 企业预缴多交税了如何申请退税
  • 一般纳税人收到专票怎么做分录
  • 印花税资金账簿减免税优惠政策2021
  • 应交增值税进项税额转出
  • 公司账户收到车险怎么做账
  • 预付账款收不回来摘要怎么写
  • 减免税附报需要哪些资料?
  • 小规模纳税人企业所得税优惠政策最新2023
  • mac系统如何切换大小写
  • 把试驾车当新车卖,构成欺诈
  • 网站防止被刷票怎么解决
  • window10进程
  • 耕地占用税的税收优惠
  • 贷款的钱转账了怎么办
  • 免抵退税务处理
  • 非合理损耗怎么做分录
  • 发生错误的原始凭证包括
  • cuda torch
  • 期票是不是承兑汇票
  • wordpress文章编辑
  • 转出未交增值税借方余额表示什么
  • 本季度企业所得税
  • 编写一个php程序,展示双引号和单引号的区别
  • 企业利润总额为负
  • 前端使用vue
  • c++如何给指针赋值
  • 常用的css样式有哪些
  • 怎么才能学a1
  • php添加数据到数据库失败error
  • Python运算符的优先级别
  • 固定资产一次性折旧账务处理
  • 留抵税额可以保留几年
  • 织梦怎么采集文章
  • python 读取图片
  • 研发支出属于什么类
  • 取得土地使用权所支付的金额包括契税吗
  • 收到的税费返还怎么算
  • 待报解预算收入什么意思
  • 现金流量表和其他报表的勾稽关系
  • 会计分录结转进项怎么算
  • 本年利润的会计分录怎么写
  • 视同销售是按成本价入账还是按计税价格入账,为什么?
  • 汇算清缴补税的凭证后面需要附件吗
  • 门面转让费做账怎么做
  • 银行存款日记账与银行对账单之间的核对属于
  • 逾期未缴税款法律依据
  • 养老保险 退钱
  • 股权激励有几种形式
  • 体检费用开发票给公司怎么开
  • 外汇申报要在几天之内
  • 跨境汇款汇错
  • Windows 2000中NTFS磁盘权限应用
  • 如果不用2b橡皮擦2b铅笔 能扫的出来吗
  • linux vps 教程
  • netsurf.exe - netsurf是什么进程 有什么用
  • cocos2djs
  • python开发技术详解(全27集),5
  • NodeJS配置HTTPS服务实例分享
  • unity3d,C#使用sqlite作为数据库解决方案思路
  • js函数关键字
  • JavaScript For...In 使用方法
  • JavaScript中iframe实现局部刷新的几种方法汇总
  • 怎么在电脑上下载浙政钉
  • 买二手房土地证怎么过户
  • 西安新公司税务注销流程
  • 增值税专用发票怎么开
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设