Vue 项目实现微信分享的自定义分享链接问题解决

前言:

  前两天在做微信公众号里的项目的时候有一个需求是在 vue 项目中实现微信分享,然后在自定义分享链接的时候出了一些问题,分享出去的自定义链接(链接中携带参数)总是会直接跳到项目首页,而且是玄学跳转,时而自定义链接正常,时而直接跳到首页,答案在文章最后面。

正文:

  1. 这里不说微信分享中的配置微信 js-sdk ,请自行查阅微信公众号开发文档

  2. 阐述下 解决此问题的一些思路

解决这个问题需要知道这样的信息,微信公众号中的项目在请求签名和自定义分享链接的时候对于Vue 的#路由不太友好

1. 请求签名时如果使用Vue的全路径(包括#部分路由)请求时会报签名失败或者无效的签名,因此我们需要使用以下方法来避免此问题

  - 使用  location.href.split(‘#‘)[0] 获取到url中#之前的部分,将获取的url 传给后台请求签名

  - 请求使用post, 保证传给后台的url是不经过任何加工的

  以上两步确认无误,如果签名失败就可以将锅甩给后台了

2. 自定义分享链接失败,分享出去后总是跳到首页,这个问题确实是困扰了我好一段时间,因为这个自定义链接是时而正常跳转,时而跳到首页的

附上我的自定义链接错误示例

link: `${location.origin}/***/inde.html#/sharepage?id=123456`

如上,因为分享出去的链接不是当前页面的链接,所以需要拼接一下

当用户从分享进来的链接进来的时候是需要先重定向获取code 再进入这个链接,所以先判断链接中是否有code并且code是否正常,分享出去的链接code肯定是不正常的,所以就有了如下代码

1 let url
2 if (location.href.includes(‘/sharepage)) { // 说明是分享的页面
3     let id = location.href.split(‘?‘)[1].split(‘=‘)[1] // 这里简单获取下参数id
4     url = `${location.origin}/***/index.html#/sharepage?id=${id}`
5 } else {
6     url = `${location.origin}/***/index.html` // 正常的重定向链接
7 }
8
9 window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=******&redirect_uri=${url}?response_type=code&scope=snsapi_base&state=123`  // 重定向

如上代码,分享链接经常跳到首页,而且几率很大

寻找问题,在 App.vue 中  created 周期函数中  alert(location.href) 查看当前进入的链接地址是否正确,是否是自己安排好的地址,这里  console.log(location.href)   然后用 vconsole 查看日志是没有用的,因为重定向了,alert会在它重定向前截停并弹框从分享的链接进入的路径,测试后发现,当跳转到首页的时候 alert 出来的也是首页,然后判断到不是分享的页面也就直接重定向到首页了,但也有几率是alert 出分享页面的链接并能跳转到正常的链接,google之后,网友有一些说法,说自定义的分享链接#后的部分会被截取掉,可以使用 手动拼接的方式来定义分享的链接,如下

1 link: location.href.split(‘#‘)[0] + ‘#‘ + location.href.split(‘#‘)[1]

当然如果分享出去的链接不是当前页面的话,后面的部分可以自定义,这个方法主要在于手动拼接#,而且有很多网友回复成功,看了这个方法之后笔者

并没有直接套用,因为这样的做法分享出去的链接还是有 # 号的,而且笔者遇到的情况是个概率事件,也就是时灵时不灵,所以笔者放弃了这个方法,有兴趣的可以试试这个方法,但是上面的方法是让笔者想到了另一种思路,代码如下:

1 let noSharp = location.href.split(‘#‘)[0]
2 let url = noSharp.includes(‘?‘) : `${noSharp}&shareId=1234` : `${noSharp}?shareId=1234`
3 link: url

可以看出,分享出去的链接并不是分享页面的链接,而是首页链接携带了一个参数  shareId ,而且链接中不会有 # 号,不用考虑 # 后面的内容被微信截取掉,能这样做是因为有一个前提:重定向的链接并不会对 # 有偏见,看下面代码

1 let url
2 if (location.href.includes(‘shareId‘)) { // 用是否有shareId 来判断是不是分享出去的链接
3     let searchData = getUrlSearch()// 这里需要一个获取url中search 参数的方法,不详述
4     let shareId = searchData.shareId
5     url = `${location.origin}/***/index.html#/sharepage?id=${shareId}`
6 } else {
7     url = `${location.origin}/***/index.html`
8 }
9 window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=*****&redirect_uri=${url}?response_type=code&scope=snsapi_base&state=123`

如上,我们可以在进入链接之后判断有没有分享的参数,如果有分享的参数,那就在这里手动拼接分享的页面并将分享链接中的参数拼接在后面。

然后重定向到它该去的地方,经笔者测试,可行。

如果各位看官有更好的想法的话请多多指教,互相学习。

以上

原文地址:https://www.cnblogs.com/blackbentel/p/9278794.html

时间: 2024-08-04 12:20:37

Vue 项目实现微信分享的自定义分享链接问题解决的相关文章

微信分享网页自定义分享标题,图片,说明

在微信中,分享网页到朋友或朋友圈时,微信会自动获取该网页的图片和标题,但是有时候我们需要自己定义分享的图片和标题的话,就需要调用微信的接口来实现,weixin_share.js地址: 调用方法 <script src="/crowd/js/weixin_share.js"></script> $(document).ready(function () { wx_share_handle() }); function wx_share_handle(){ var

百度分享(自定义分享内容)

百度分享默认的分享内容为您当前页面的title,但您可以通过如下方法来自定义您想要分享出去的内容. 1.通过全局配置进行修改: <!-- Baidu Button BEGIN --> <div id="bdshare" class="bdshare_t bds_tools get-codes-bdshare"> <a class="bds_qzone">QQ空间</a> <a class=&q

微信服务号内容分享和自定义分享

之前的文章后台通过useragent判断用户是否从手机端访问页面,公司申请了微信服务号,基础功能完成之后,发现一个问题就是服务号中所有右上角中点击之后可以分享到朋友圈,发送给朋友,分享到QQ,最开始想的办法是隐藏.不过后来发现大多数的公共账号并没有隐藏,只是在分享的时候修改跳转链接.如果没有做过微信开发估计需要思考一下,不用很久你就知道有一个插件叫微信JS-SDK. 开发步骤 微信JS-SDK使用起来很方便,不过大多数的时候我们耗费的时候是在config上面,服务端的Access_Token和J

微信web开发自定义分享

php后台部分-微信类 /**************************************************************************微信自定义分享 开始************************************************************/ /** * 获取微信自定已分享配置参数包 * @author ganyuanjiang <[email protected]> * @createtime 2017-08-05 1

使用微信JS-SDK 实现 自定义 分享 功能

微信PC端点击页面,转发给朋友. 开发前 ,分享之后 ,链接 样式如下: 格式化之后,样式如下: 页面代码: <!DOCTYPE html> <vt:function var="source" method="GetBySingle" args="$Company" type="Business.BLL.Sys.CompanyService" /> <html class="um lan

微信js接口自定义分享内容

最近客户有个要求,需要给网页添加微信分享功能,当然指的是用微信自带浏览器的时候,希望用户在最后一页点击分享的时候是分享的首页.曾经无意中看到过微信公众开发者平台提供了js接口,所以试着做了做,果然,跌入了一个大坑,现在就把我的经历跟大家分享一下. 首先去腾讯给的开发者文档去看,地址就不贴了,然后 第一步,绑定域名,从客户那儿拿到了备案的域名,然后登陆微信公众平台绑定域名 第二步,在页面里引入js,官方文档中都有 第三步,设置config验证, 官方文档给了个例子,直接拿过来用,否则自己写的话很麻

微信应用js-sdk自定义分享图文

之前写过步骤 但是代码很少 这里奉献上我自己写的代码 我是用js做的 先奉上js部分的代码 <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>众悦学车无忧险 免费申领</title> <meta name="description"

bShare分享插件|自定义分享按钮|异步加载分享解决办法

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

vue项目使用微信公众号支付总结及遇到的坑

微信公众号支付 1. 使用jssdk调用微信支付,具体查看开发文档: 使用的vuex,在mutations中 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 wechatPay (state, data) {     state.payObject = data     console.log('微信支付开始请求')     if (wechat) {      wx.chooseWXPay({       tim