当前位置: 首页 > news >正文

uniapp写H5授权登录及分享,返回到目标页面

在这里插入图片描述
最近在研究uniapp打包后H5页面分享(转发好友,转发朋友圈的问题),需要前后端配合,前端展示如下:
安装SDK

npm i weixin-js-sdk

在utils创建jsShare.js文件,代码如下,这里面的图片展示方式可按照自己的需求更改

import wx from 'weixin-js-sdk';
import { wechatShare } from '@/api/common';//后端接口,返回
import { getImageUrl } from '@/utils/request';//图片地址衔接方式,可按照需求更改/*** 初始化微信分享* @param {Object} options 分享配置选项* @param {String} options.title 分享标题* @param {String} options.desc 分享描述* @param {String} options.imageUrl 分享图片URL(完整URL或相对路径)* @param {String} options.imageList 图片列表(逗号分隔,会自动取第一张)* @param {String} options.shareUrl 用于签名的URL(可选,默认使用当前页面URL)* @param {Number} options.delay 延迟执行时间(毫秒,默认500)* @param {Boolean} options.debug 是否开启调试模式(默认false)* @param {Function} options.onSuccess 分享成功回调* @param {Function} options.onError 分享失败回调* @returns {Promise} 返回Promise*/
export function initWechatShare(options = {}) {console.log(options,'options')return new Promise((resolve, reject) => {// 参数验证if (!options.title) {console.error('分享标题不能为空');reject(new Error('分享标题不能为空'));return;}// 获取当前页面的完整URL(用于签名),注:这里最好传https的地址也就是 {#} 前面的,我猜了坑const shareUrl = options.shareUrl || window.location.href.split('#')[0];// 处理图片URLlet imgUrl = '';if (options.imageUrl) {imgUrl = options.imageUrl;} else if (options.imageList) {const firstImage = options.imageList.split(',')[0];imgUrl = getImageUrl(firstImage);}// 延迟执行,确保页面完全加载setTimeout(() => {// 1. 获取微信JS-SDK配置wechatShare({shareUrl: shareUrl}).then((signatureData) => {console.log(signatureData, 'signatureData');// 检查数据是否完整if (!signatureData || !signatureData.signature) {console.error('签名数据不完整');if (options.onError) {options.onError(new Error('签名数据不完整'));}reject(new Error('签名数据不完整'));return;}// 2. 初始化微信JS-SDK配置wx.config({debug: options.debug || false, // 生产环境建议关闭appId: signatureData.appId,timestamp: signatureData.timestamp,nonceStr: signatureData.nonceStr,signature: signatureData.signature,jsApiList: [ // 声明需要使用的JS接口'updateAppMessageShareData','updateTimelineShareData' // 如果需要分享到朋友圈,也请声明]});// 3. 配置分享内容wx.ready(() => {// 分享给好友wx.updateAppMessageShareData({title: options.title, // 默认分享标题desc: options.desc || '', // 默认分享描述link: signatureData.url, // 默认分享链接,默认以当前链接imgUrl: imgUrl, // 默认分享图标success: function() {if (options.onSuccess) {options.onSuccess('分享给好友设置成功');}}});// 分享到朋友圈wx.updateTimelineShareData({title: options.title, // 分享标题desc: options.desc || '', // 默认分享描述link: signatureData.url, // 分享链接imgUrl: imgUrl, // 分享图标success: function() {if (options.onSuccess) {options.onSuccess('分享到朋友圈设置成功');}}});resolve(signatureData);});// 错误处理wx.error((res) => {console.error('微信JS-SDK配置失败', res);// 如果是签名错误,可以在这里处理重试逻辑if (res.errMsg && res.errMsg.indexOf('invalid signature') !== -1) {console.log('签名验证失败');}if (options.onError) {options.onError(res);}reject(res);});}).catch((error) => {console.error('获取微信分享签名失败', error);if (options.onError) {options.onError(error);}reject(error);});}, options.delay || 500);});
}

在其他页面引入,如产品详情页

import { initWechatShare } from "@/utils/jsShare";

在onLoad里面写入

this.$nextTick(() => {setTimeout(() => {this.initWechatShare();}, 300);
});

在methods中写入,this.fangyuanDetail为详情获取的内容,赋值进去

initWechatShare() {initWechatShare({title: this.fangyuanDetail.title,desc: this.fangyuanDetail.tags,imageList: this.fangyuanDetail.image_list,onSuccess: (msg) => {console.log(msg);},onError: (error) => {console.error("分享配置失败", error);},});
},

在首页使用,引入跟上面一样,下面直接写标语即可

initWechatShare() {initWechatShare({title: "名称",desc: "标语",imageUrl: window.location.href.split('#')[0] + 'static/slig.png',//一定要加https地址imageList: "",onSuccess: (msg) => {console.log(msg);},onError: (error) => {console.error("分享配置失败", error);},});
},

还有一个就是登录返回目标页面

getAuthCodeNew() {const APPID = '' // 公众号的appidconst REDIRECT_URI = encodeURIComponent(window.location.href)//这个就是目标返回页console.log(REDIRECT_URI, 'REDIRECT_URI')window.location.href =`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${APPID}&redirect_uri=${REDIRECT_URI}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`}

以上就是我的写法,有问题随时浏览沟通哦!

http://www.dtcms.com/a/609223.html

相关文章:

  • 奥卡姆剃刀原理:机器学习中的简约哲学与实践指南
  • ASC学习笔记0007:用于与GameplayAbilities系统交互的核心ActorComponent
  • 福永附近做网站公司广州公共资源交易中心交易平台
  • 深入理解 Swift TaskGroup:从基础用法到性能优化的完整指南
  • csharp通过对象和模板字符串解析模板
  • MYSQL结构操作DDL指令1.数据库操作
  • 为什么会有免费制作网站wordpress建站腾讯云
  • 仓颉迁移实战:将 Node.js 微服务移植到 Cangjie 的工程化评测
  • Redis(六)——哨兵
  • 网站错敏词整改报告,如何整改后如何定期自查自检
  • 网站验收时项目建设总结报告网站建设与维护本科教材
  • 【Java】使用国密2,3,4.仿照https 统一请求响应加解密
  • 华为对象存储:nginx代理临时访问地址后访问报错:Authentication Failed
  • 【2025-11-13】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
  • 【玩转多核异构】T153核心板RISC-V核的实时性应用解析
  • 单周期Risc-V指令拆分与datapath绘制
  • Java+EasyExcel 打造学习平台视频学习时长统计系统
  • 【PHP】使用buildsql构造子查询
  • 防火墙主要有哪些类型?如何保护网络安全?
  • 在线商城网站制作如东住房和城乡建设局网站
  • Java 与 PHP 开发核心良好习惯笔记(含通用+语言特有)
  • AI 电影制作迈入新阶段:谷歌云Veo 3.1模型发布,实现音频全覆盖与精细化创意剪辑
  • C++函数式策略模式中配置修改
  • [MCP][]快速入门MCP开发
  • 为食堂写个网站建设免费毕业设计的网站建设
  • 云原生数据平台(cloudeon)--核心服务组件扩展
  • 字典或者列表常用方法介绍
  • 计算机网络中的地址体系全解析(包含 A/B/C 类地址 + 私有地址 + CIDR)
  • SpringBoot教程(三十四)| SpringBoot集成本地缓存Caffeine
  • 专业摄影网站推荐专业做卖菜的网站