vue2.0 Hash模式下实现微信分享
1,通过后台,获取accessToken 和 签名jsApiTicket,并写入浏览器缓存(可以写在app.vue中)
<script type="text/ecmascript-6">
import Store from 'common/js/store.js';
const CODE_SUC = 1;
const CODE_ERR = 0;
export default {
name: 'app',
data () {
return {
wxToken: {
accessToken: ""
},
wxJsApiTicket: {
jsApiTicket: ""
}
};
},
created () {
setInterval(this.getAccessToken(), 7000);
// 接口入住权限验证配置
},
components: {
vFooter
},
methods: {
// 获取accessToken 和 签名jsApiTicket,并写入浏览器缓存
getAccessToken () {
this.axios.post("/api/user/getAccessToken", {
"token": null,
"uid": 0,
"devType": "wx"
}).then((res) => {
res = res.data;
if (res.code === CODE_SUC) {
// console.log(res.accessToken);
this.wxToken.accessToken = res.accessToken;
this.wxJsApiTicket.jsApiTicket = res.jsApiTicket;
Store.saveAccessToken(this.wxToken);
Store.saveJsApiTicket(this.wxJsApiTicket);
// console.log(res.accessToken);
} else if (res.code === CODE_ERR) {
console.log("获取accessToken失败");
}
}).catch((res) => {
window.alert('网络异常,登录请求失败');
});
}
}
};
</script>
2,上面的store.js(写入浏览器缓存的文件)如下
const STORAGE_KEY1 = 'memberInfo';
const STORAGE_KEY2 = 'token';
const STORAGE_KEY3 = 'accessToken';
const STORAGE_KEY4 = 'jsApiTicket'; export default {
fetchFromLocal () {
return JSON.parse(window.localStorage.getItem(STORAGE_KEY1) || "{}");
}, saveToLocal (obj) {
window.localStorage.setItem(STORAGE_KEY1, JSON.stringify(obj));
}, saveAccessToken (obj) {
window.localStorage.setItem(STORAGE_KEY3, JSON.stringify(obj));
}, saveJsApiTicket (obj) {
window.localStorage.setItem(STORAGE_KEY4, JSON.stringify(obj));
}
};
3,mian.js中,注册分享全局函数,并暴露出接口
import wx from 'weixin-js-sdk'; // 导入微信sdk
import Store from 'common/js/store.js'; // 导入store.js // 全局注册分享函数
Vue.prototype.wxShare = function (title, desc, link, imgUrl) {
// 获取签名
this.axios.post("/api/user/getSignature", {
"token": null,
"uid": 0,
"devType": "wx",
"ticket": Store.fetchjsApiTicket().jsApiTicket, // 获取浏览器缓存的签名
"url": encodeURIComponent(window.location.href.split('#')[0]) // 此处进行一次编码
}).then((res) => {
res = res.data;
if (res.code === CODE_SUC) {
wx.config({
debug: false,
appId: '', // 填写自己的appID
timestamp: res.timestamp,
nonceStr: res.noncestr,
signature: res.signature,
jsApiList: [
'onMenuShareTimeline',
'onMenuShareAppMessage'
]
});
} else if (res.code === CODE_ERR) {
console.log("获取accessToken失败");
}
}).catch((res) => {
window.alert('网络异常,登录请求失败');
});
wx.ready(function () {
// 分享给朋友
wx.onMenuShareAppMessage({
title: title, // 分享标题
desc: desc, // 分享描述
link: link, // 分享链接
imgUrl: imgUrl, // 分享图标
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
window.alert('已分享给朋友');
this.axios.post("/api/product/shareStatistics", {
"token": null,
"uid": 0,
"devType": "wx"
}).then((res) => {
res = res.data;
if (res.code === CODE_SUC) {
window.alert("分享返回数据成功");
} else if (res.code === CODE_ERR) {
console.log("获取失败");
}
}).catch((res) => {
window.alert('网络异常,登录请求失败');
});
},
cancel: function () {
// 用户取消分享后执行的回调函数
},
fail: function (res) {
window.alert(JSON.stringify(res));
}
}); // 分享到朋友圈
wx.onMenuShareTimeline({
title: title, // 分享标题
link: link,
imgUrl: imgUrl, // 分享图标
success: function () {
window.alert('已分享到朋友圈');
},
cancel: function () {
// 用户取消分享后执行的回调函数
this.axios.post("/api/product/shareStatistics", {
"token": null,
"uid": 0,
"devType": "wx"
}).then((res) => {
res = res.data;
if (res.code === CODE_SUC) {
window.aleryt("分享返回数据成功");
} else if (res.code === CODE_ERR) {
console.log("获取失败");
}
}).catch((res) => {
window.alert('网络异常,登录请求失败');
});
},
fail: function (res) {
window.alert(JSON.stringify(res));
}
});
});
};
4,在相应的位置调用注册好的wxShare (title, desc, link, imgUrl)函数,并传入所需的值:
例:以下为分享商品详情页面,link 为自己拼接路径的变量
this.wxShare('商品详情' + ' ' + this.good.goodsInfo.goodsName, this.good.goodsInfo.goodsName, link, this.IMG_BASE_URL + this.good.goodsInfo.goodsImage);
5,特别注意:在Hash模式下,安卓中会遇到分享到朋友圈之后,点击跳转会首页的情况,此时分享的路径与商品的真实路径是不一致的。需要在服务器端稍微处理一下。即把index文件,重新建一个文件夹,例如static,放进去。此时分享之后的路径,与真实路径才是一致的,也不会发生跳回首页的情况。苹果手机则不会有这个问题。
vue2.0 Hash模式下实现微信分享的更多相关文章
- vue2.0 如何在hash模式下实现微信分享
最近又把vue的demo拿出来整理下,正好要做"微信分享"功能,于是遇到新的问题: 由于hash模式下,带有"#",导致微信分享的签证无效:当改成history ...
- Vue单页式应用(Hash模式下)实现微信分享
前端微信分享的基本步骤: 一.绑定域名: 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名".这个不多说,微信开发 ...
- vue history模式下的微信分享
// 微信验证 export function requireConfig() { let url = window.location.href systemApi.wxoption({ url: u ...
- vue hash模式下微信分享后打开首页,三种完美解决方案
微信分享功能给我们带来了很大的便利,使得基于微信开发出来的 H5 页面可以很好的通过微信平台进行传播.所以呢,基本上每个基于微信开发的 H5 都会集成微信分享功能.但是,前几天在对接微信分享 API ...
- C# 5.0 TAP 模式下的HTTP Get和Post
标题有点瘆人,换了工作之后很少写代码了,之前由于签了保密协议,不敢把代码拿出来分享给大家,只能摘抄网上的, 今斗胆拿出来晒晒,跪求指点,直接上代码吧 public class HTTPHelper : ...
- vue2.0 路由模式mode="history"的作用
特别提醒:开启mode="history"模式,需要服务端的支持,因为出现"刷新页面报错404"的问题: 备注:微信分享:vue项目路由带"#&quo ...
- vue history模式下的微信支付,及微信支付授权目录的填写,处理URL未注册
微信公众号配置网页授权域名:填写网址域名 微信开发者平台配置url: 访问url:http://www.baidu.com/pay/ment 支付授权目录:http://www.baidu.com/p ...
- vue2.0开发环境下解决跨域问题
1.找到vue 项目下的配置文件 /config/index.js 2.找到 proxyTable 配置项 proxyTable: { '/api': { target: 'http://www.xx ...
- Vue项目history模式下微信分享总结
原文 : http://justyeh.top/post/39/ 2019-07-02 Vue微信分享 每回遇到微信分享都是一个坑,目前的商城项目使用Vue开发,采用history的路由模式,配置微信 ...
随机推荐
- Web在线文件管理器(web os) KODExplorer
KODExplorer是款开源的Web在线文件管理.代码编辑器.它提供了类windows经典用户界面,一整套在线文件管理.文件预览.编辑.上传下载.在线解压缩.音乐播放功能.让你直接在浏览器端实现we ...
- listView滚动事件
listView滚动事件 实现接口: android.widget.AbsListView.OnScrollListener Interface definition for a callback t ...
- MSSQL-SQL SERVER 分页原理
项目中用到的, 用心琢磨一下此SQL语句即可: SELECT TOP $row * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY [ID] desc ...
- 如何在cmd命令行中查看、修改、删除与添加环境变量,语法格式例子:set path;echo %APPDATA%
如何在cmd命令行中查看.修改.删除与添加环境变量 首先明确一点: 所有的在cmd命令行下对环境变量的修改只对当前窗口有效,不是永久性的修改.也就是说当关闭此cmd命令行窗口后,将不再起作用.永久性修 ...
- 【Linux】忘记root密码
常常有些朋友在配置好了Linux之后,结果root密码给他忘记去!要重新安装吗?不需要的,你只要以单人维护模式登陆即可更改你的root密码!下面以Redhat linux5为例 1)先将系统重新启动, ...
- python学习笔记——正则表达式regex
1 概述 1.1 定义 本质是由一系列字符和特殊符号组成的字串,用来表示一定规则的某一类字符串. 1.2 特点 正则表达式是一个独立的技术,其在多种编程语言中使用. 在python语言中的正则表达式模 ...
- OGG_GoldenGate复杂参数定义(案例)
2014-03-10 Created By BaoXinjian
- linux系统调用sysconf
1.前言 当前计算机都是多核的,linux2.6提供了进程绑定cpu功能,将进程指定到某个core上执行,方便管理进程.linux提供了sysconf系统调用可以获取系统的cpu个数和可用的cpu个数 ...
- Linux内核(13) - 子系统的初始化之以PCI子系统为例
由Kconfig这张地图的分布来看,PCI这块儿的代码应该分布在两个地方,drivers/pci和arch/i386/pci,两岸三地都属于一个中国,不管是drivers/pci那儿的,还是arch/ ...
- spring mvc get方式乱码
使用spring get方式,向后台传递参数的时候,出现乱码,网上搜索了好久,最后发现原因是server.xml中默认的配置有问题,修改如下就正确了,图片: 文本信息: <Connect ...