【微信开发第五章】SpringBoot实现微信分享

news2025/2/28 23:13:53

前言

在进行微信公众号业务开发的时候,有些时候需要用到微信分享,以卡片的形式分享出去,例如订单信息,用户信息。该篇文章每一步都有记录,力争理解的同时各位小伙伴也能够实现功能

效果图如下:
在这里插入图片描述

文章目录

  • 前言
  • 1、绑定域名
  • 2、前端代码实现
  • 3、后端代码实现
  • 4、前端使用方式
  • 总结


1、绑定域名

先登录微信公众平台进入“设置与开发”,“公众号设置”的“功能设置”里填写“JS接口安全域名”。
在这里插入图片描述

2、前端代码实现

1、引入JS文件

<script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js" type="text/javascript"></script>

2、在public目录下创建 index.html文件,内容如下
在这里插入图片描述


<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.9.12/skins/default/aliplayer-min.css" />
    <script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/de/prismplayer/2.9.12/aliplayer-min.js"></script>
    <script src="http://res2.wx.qq.com/open/js/jweixin-1.6.0.js" type="text/javascript"></script>
    
    <!-- 引入播放器 css 文件 -->
    <link href="https://cloudcache.tencent-cloud.com/open/qcloud/video/tcplayer/tcplayer.css" rel="stylesheet">
    <!-- 如需在IE8、9浏览器中初始化播放器,浏览器需支持Flash并在页面中引入 -->
    <!--[if lt IE 9]>
    <script src="https://cloudcache.tencent-cloud.com/open/qcloud/video/tcplayer/ie8/videojs-ie8.js"></script>
    <![endif]-->
    <!-- 如果需要在 Chrome 和 Firefox 等现代浏览器中通过 H5 播放 HLS 格式的视频,需要在 tcplayer.v4.1.min.js 之前引入 hls.min.0.13.2m.js -->
    <script src="https://imgcache.qq.com/open/qcloud/video/tcplayer/libs/hls.min.0.13.2m.js"></script>
    <!-- 引入播放器 js 文件 -->
    <script src="https://imgcache.qq.com/open/qcloud/video/tcplayer/tcplayer.v4.1.min.js"></script>
    <!-- 示例 CSS 样式可自行删除 -->
    <title>Eric的分享示例</title>
  </head>
  <body>
    <script type="text/javascript" src="https://static-1.talk-fun.com/open/TalkFun_SDK_Pack/v6.0/TalkFunWebSDK-6.2-2.min.js"></script>

    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

3、创建工具类JS:wxShare.js 文件

/**
 * 微信js-sdk
 * 参考文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
 */
const wxShare = {
    /**
     * [wxRegister 微信Api初始化]
     * @param  {Function} callback [ready回调函数]
     */
    wxRegister(data,option) { //data是微信配置信息,option是分享的配置内容
        
        wx.config({
            debug: true, // 开启调试模式
            appId: data.appId, // 必填,公众号的唯一标识
            timestamp: data.timestamp, // 必填,生成签名的时间戳
            nonceStr: data.nonceStr, // 必填,生成签名的随机串
            signature: data.signature,// 必填,签名,见附录1
            jsApiList: [
                'onMenuShareAppMessage'
            ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
        });
        wx.ready(function(){

            wx.onMenuShareAppMessage({
                title: option.title, // 分享标题
                desc: option.desc, // 分享描述
                link: option.link, // 分享链接
                imgUrl: option.imgUrl, // 分享图标
                success() {
                    // 用户成功分享后执行的回调函数
                    //  option.success()
                    console.log('ok');
                },
                cancel() {
                    // 用户取消分享后执行的回调函数
                    // option.error()
                    console.log('cancel');
                }
            });
        });

        wx.error(function(res){
          // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
          //alert('error:'+JSON.stringify(res));
        });
    }
}
export default wxShare

3、后端代码实现

说明:微信分享要对当前url加密处理,由于我们的url路由都是带“#”符号,服务器端接收不到,因此通过“ericToken”单词代替了“#”。

@RestController
@RequestMapping("/api/wechat/share")
@Slf4j
public class ShareController {

    @Autowired
    private WxMpService wxMpService;

    @GetMapping("/getSignature")
    public Result getSignature(@RequestParam("url") String url) throws WxErrorException {
        String currentUrl = url.replace("ericToken", "#");
        WxJsapiSignature jsapiSignature = wxMpService.createJsapiSignature(currentUrl);

        WxJsapiSignatureVo wxJsapiSignatureVo = new WxJsapiSignatureVo();
        BeanUtils.copyProperties(jsapiSignature, wxJsapiSignatureVo);
        wxJsapiSignatureVo.setUserEedId(Base64Util.base64Encode(AuthContextHolder.getUserId()+""));
        return Result.ok(wxJsapiSignatureVo);
    }

}

4、前端使用方式

1、在要分享的vue页面引入js文件

import wxShare from '@/utils/wxShare'

2、代码实现

wxRegister() {
  //说明:后台加密url必须与当前页面url一致
  let url = window.location.href.replace('#', 'ericToken')
  shareApi.getSignature(url).then(response => {
    console.log(response.data);
    //记录分享用户
    let link = '';
    if(window.location.href.indexOf('?') != -1) {
      link = window.location.href + '&recommend=' + response.data.userEedId;
    } else {
      link = window.location.href + '?recommend=' + response.data.userEedId;
    }
    let option = {
      'title': this.courseVo.title,
      'desc': this.description,
      'link': link,
      'imgUrl': this.courseVo.cover
    }
    wxShare.wxRegister(response.data, option);
  });
}

总结

微信分享这个功能总体来说前端工作量要比后端多一点,不过整体逻辑不难,当然,最需要注意的还是配置域名了

【微信开发第一章】SpringBoot实现微信公众号创建菜单,同步菜单功能:https://blog.csdn.net/weixin_47316183/article/details/127821095?spm=1001.2014.3001.5502

【微信开发第二章】SpringBoot实现微信公众号普通消息和模板消息回复:https://blog.csdn.net/weixin_47316183/article/details/127821653?spm=1001.2014.3001.5502

【微信开发第三章】SpringBoot实现微信授权登录
https://blog.csdn.net/weixin_47316183/article/details/127833802?spm=1001.2014.3001.5502

【微信开发第四章】SpringBoot实现微信H5支付
https://blog.csdn.net/weixin_47316183/article/details/127949620?spm=1001.2014.3001.5502

【微信开发第五章】SpringBoot实现微信分享
https://blog.csdn.net/weixin_47316183/article/details/127950090?spm=1001.2014.3001.5502

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centos 7.9 部署 harbor 镜像仓库实践

centos 7.9 harbor 部署镜像仓库 文章目录centos 7.9 harbor 部署镜像仓库1. 安装 docker1.1 配置 docker2. 安装 docker-compose3. 下载 harbor4. 定制配置文件 harbor.yml5. 配置证书5.1 生成证书颁发机构证书5.2 生成服务器证书5.3 向 Harbor 和 Docker 提供证书6. 部署 har…

【软件测试】一线大厂的测试开发基本技能,我不再想庸庸碌碌......

目录&#xff1a;导读一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结能在一线大厂工作是大多数人的目标&#xff0c;不仅薪酬高&#xf…

[Git] 系列四Push Pull —— Git 远程仓库和高级操作

[Git] 系列四Push & Pull —— Git 远程仓库和高级操作 Author: Xin Pan Date: 2022.11.06 git fetch git fetch 完成了仅有的但是很重要的两步: 从远程仓库下载本地仓库中缺失的提交记录更新远程分支指针(如 o/main) git fetch 并不会改变你本地仓库的状态。它不会更…

Github 注册

Github 注册 https://github.com/ 1. 简介 初始 Github 注册 填写注册信息 一开始注册github发现了这个问题&#xff0c;多试几次。或者换个浏览器&#xff0c;或者对octocaptcha做一个域名映射。 140.82.112.4 http://octocaptcha.com填写验证码 当注册成功后&#xff0…

【小专题】正交试验法设计测试用例

正交试验法设计测试用例 正交试验法设计工具&#xff1a; 1、正交设计助手 2、AllPairs 3、python&#xff08;本质是使用AllPairs&#xff09; 先看一个案例&#xff1a; 假设一个web系统&#xff0c;需要做兼容性测试&#xff0c;该系统兼容不同操作系统、数据库和web服…

【ESP8266与ESP12E 电机拓展板握手】

【ESP8266与ESP12E 电机拓展板握手】 1. 前言2. 材料3. 工作原理3.1 板载功能3.2 引脚接口定义图3.3 产品技术规格4. 方案4.1 普通马达接线图4.2 42步进电机接线图5. 相关代码5.1 直流电机的管理代码5.2 步进电机管理代码6. 应用7. 来源1. 前言 ESP12E Motor Shield 是一块扩展…

代码改成多线程,竟有 这些问题

文章目录CPU 使用率飙高事务问题导致服务挂掉CPU 使用率飙高 每条数据都有些业务逻辑&#xff0c;如果单线程导入所有的数据&#xff0c;导入效率会非常低。于是改成了多线程导入。 如果 excel 中有大量的数据&#xff0c;很可能会出现 CPU 使用率飙高的问题。 我们都知道&am…

公众号免费查题系统

公众号免费查题系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击…

8.for循环

循环控制语句 1.for循环 for (表达式1&#xff1b;表达式2&#xff1b;表达式3) { //复合语句&#xff0c;循环体 } 第一次进入循环的时候执行表达式1&#xff0c;表达式1只执行一次 表达式2是循环的条件&#xff0c;只有表达式2为真了&#xff0c;才执行循环体&#xff0c;也…

Android 应用模块的构建

Google文档说明&#xff1a;https://developer.android.com/studio/build?hlzh-cn Android 构建系统会编译应用资源和源代码&#xff0c;然后将它们打包成 APK 或 Android App Bundle 文件&#xff0c;供您测试、部署、签名和分发。Android Studio 使用高级构建工具包 Gradle …

Python学习----面向对象

面向对象思想就不说了&#xff0c;和java一样。这是为了自己能够一直看教程不走神做得笔记。 类的定义和赋初值 成员变量和成员方法&#xff0c;含义和java一样。 成员变量的申明没啥好记得 需要关注得是成员方法&#xff0c;在定义成员方法得时候&#xff0c;需要传入self关…

设计模式学习笔记 - 组合模式

设计模式学习笔记 - 组合模式一、学校院系展示问题二、传统方案解决学校院系展示问题三、组合模式介绍1、基本介绍2、组合模式原理四、组合模式解决学校院系展示问题五、组合模式在JDK集合的源码分析六、组合模式的注意事项和细节一、学校院系展示问题 展示一个学校院系结构&am…

机器学习可视化技术(Towards Data Science)

介绍 作为任何数据科学项目的一部分&#xff0c;数据可视化在了解更多可用数据和识别任何主要模式方面发挥着重要作用。 如果能够使分析中的机器学习部分尽可能直观&#xff0c;那不是很好吗&#xff1f; 在本文中&#xff0c;我们将探讨一些可以帮助我们应对这一挑战的技术&am…

HCIA 链路聚合与LACP

一、前言 虽然很多文章在介绍链路聚合时会从链路备份的角度来介绍链路聚合的作用&#xff0c;然后再说其有提升链路带宽的作用&#xff0c;但我感觉链路聚合主要还是提升链路带宽的作用&#xff0c;链路备份只是顺带的不是主要目标。 二、链路聚合 考虑下面的网络&#xff0…

Windows 环境下的 Socket 编程 3 - 基于 TCP 的服务器/客户端

基于 TCP 的服务器端/客户端 绝大多数 TCP 服务器端都按照如下顺序调用&#xff1a; 在 Windows 环境下&#xff0c;代码表示为&#xff1a; WSADATA wsaData;SOCKET hServSock, hClntSock;SOCKADDR_IN servAddr, clntAddr;int szClntAddr;/*Windows 环境 Socket 编程必须*/i…

leetcode:6243. 到达首都的最少油耗【变种子树大小统计 + 从边的角度出发 + 思维转换】

目录题目截图题目分析ac code总结题目截图 题目分析 0作为root从边的角度出发每个点都向0的方向聚集比如大家已经由四面八方聚集到了x&#xff0c;x的fa固定的&#xff0c;假设为y那么x到y要多少辆车&#xff1f;设size&#xff08;x&#xff09;为x子树大小x到y需要ceil&…

2022年第十三届蓝桥杯大赛湖南中医药大学第2场选拔赛(部分总结)

文章目录2008: 简单整数问题2005: 飞行棋2074: 几乎回文串2101: 通行密令2089: 密码1867: X星救援站2085: 千里走单骑2093: 最长等比子序列2087: 跳水比赛总结2008: 简单整数问题 [命题人 : admin] 时间限制 : 1.000 sec 内存限制 : 128 MB 题目描述 小明最近经常会思考一些关…

Oracle-AWR快照无法自动生成问题分析

前言: 近期处理了一起数据库AWR快照无法自动生成的问题&#xff0c;用户发现数据库在近期出现了AWR快照无法自动生成的问题&#xff0c;数据库整体负载正常&#xff0c;后面分析发现原因是由于AWR快照在生成过程中&#xff0c;执行的SQL语句出现超时导致。 问题: Oracle11.2.…

【课上笔记】第八章 图

图 8.1图的基本概念 8.1.1图的定义和术语 1&#xff0e;图的定义 ​ 图(Graph)由一个顶点集合Vn和一个边&#xff08;或者弧&#xff09;集合En组成&#xff0c;通常记为&#xff1a; G&#xff1d;(Vn,En)其中&#xff0c;Vn中有n(n>0)个顶点&#xff0c;En中有e&#…

stm32cubemx hal学习记录:FreeRTOS任务管理

一、基本配置 1、配置RCC、USART1、时钟84MHz 2、配置SYS&#xff0c;将Timebase Source修改为除滴答定时器外的其他定时器&#xff0c;因为滴答定时器被用于时钟基准&#xff0c;可以实现任务切换。Timebase Source是实现HAL_Delay等延时函数的 3、初始化LED的两个引脚 4、开…