微信、qq网页二次分享
二次分享是指,在APP或者浏览器分享到微信或者qq,然后从微信或者qq再分享到别的平台。如果不处理,再次分享出去的图片或者标题就不会显示,对用户非常不友好。
一、微信二次分享
官方接入文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
首先需要一个认证的微信公众号(企业公众号),然后配置(详情见下):
1、做二次分享需要有一个服务号,获取APPID、appsecret(在微信公众号 开发->基本设置 能看到)

2、设置IP白名单
设置->安全中心->IP白名单(IP地址就是服务器地址,没有这个白名单获取token时 会报IP地址非法。)
3、配置js接口安全域名
登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”,注意此配置一个月只能配置三次

注意:这里的JS接口安全域名就是你需要进行二次分享页面的域名。该域名需要通过ICP备案验证。(域名不能带协议,否则会报错,无法分享成功)

注意:配置JS接口安全域名时,首先需要MP_verify_576FDJKHHJK29XXTpb.txt 文件放置在域名根目录下;然后才能保存成功,如果配置的域名下没有MP_verify_576FDJKHHJK29XXTpb.txt 文件是无法保存成功的。
4、需要后端提供接口
这里需要通过服务端提供的获取配置信息接口,获取权限验证的相关配置。接口是后台功能,代码不赘述,下面贴一段网上搜到的代码。
注意: 确保一定缓存access_token和jsapi_ticket。
从微信获取token
向微信给定的url(https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET)发GET请求,获取token和token的有效期,获取token只需要替换APPID和APPSECRET,grant_type的值不变。
从微信获取ticket
跟获取token有一点不同,token是获取ticket的参数,最后我们只需要ticket。url如下:(https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi)只需要把ACCESS_TOKEN(就是我们第一步获取的token)替换就OK。
生成签名
下图是微信开发文档的签名算法,开发文档中还有微信给的简单示例(java、php...)。

5、前端代码
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js
如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支持https)。
以上是官方的原文提供的js文件地址,我们一般都会把jweixin-1.4.0.js文件下载下来放在我们域名的静态文件中进行引入。
如果使用vue或者react 可以下载 weixin-js-sdk
import wx from 'weixin-js-sdk';
let wxShareUrl = location.href.split('#')[0]; // hash路由
let wxShareUrlOrig = location.href;
let shareData = {
title: params.title, // 分享标题
desc: params.desc, // 简介
link: wxShareUrlOrig, // 详情页带#
imgUrl: wxShareImg // 标题图
};
wx.config({
appId: res.appid,
nonceStr: res.noncestr, // 必填,生成签名的随机串
timestamp: res.timestamp, // 必填,生成签名的时间戳
signature: res.signature, // 必填,签名
jsApiList: [
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareQZone'
]
});
wx.ready(function () {
wx.onMenuShareTimeline(shareData);
wx.onMenuShareAppMessage(shareData);
wx.onMenuShareQQ(shareData);
wx.onMenuShareQZone(shareData);
});
commit(types.GET_SHARECONTENT, {
data: res
});
6、校验config
wx.config中,将debug改为true是进入调试模式
wx.config({
debug: true,//调试
.....
});
7、总结
1 微信公众号要认证
2 微信公众号配置IP白名单
3 微信公众号设置JSSDK域名 把txt文件放在域名目录
4 微信公众号appID和secret配置到CMS服务
5 前端
二、qq二次分享
方式一
引入 http://qzonestyle.gtimg.cn/qzone/qzact/common/share/share.js
setShareInfo({
title: shareTitle,
summary: shareSummary,
pic: 'pic_url',
url: window.location.href + '&tencentShare=1'
});
方式二、
<title>分享标题</title>
<meta itemprop="name" content="分享标题"/>
<meta itemprop="image" content="http://img.xmiles.cn/fortune/icon.png" />
<meta name="description" itemprop="description" content="分享描述" />
// qq二次分享
const shareData = {
title: '标题',
desc: '简介',
imageUrl: 'http://图标'
};
document.querySelector("meta[itemprop='name']").setAttribute('content', shareData.title); // 分享标题
document.querySelector("meta[itemprop='description']").setAttribute('content', shareData.desc); // 分享简介
document.querySelector("meta[itemprop='image']").setAttribute('content', shareData.imgUrl); // 分享图标
document.title = shareData.title; // 要同时设置title,不然可能会不显示标题
问题一:由于手机QQ限制,分享URl与页面必须求同个域名,否则设置不生效
但这里二次分享的链接也需要授权,但由于域名不同,所以用了另一种方式解决:设置分享url为当前链接,带上自定义参数,根据参数值在页面加载时重新打开授权链接
问题二:qq这种jdk设置分享在安卓端定制生效,在ios定制无效,这里采用折中的方式使用<meta>定制。由于<meta>设置分享信息无法改变链接,qq默认拿原本链接进行分享,在code过期时,请求服务器会导致报错,因此这里采用 在页面请求失败时再去重新打开授权链接
QQ分享还跟版本相关,设置标题内容上面两种方式都可能不生效,由于没去追究哪个版本问题,因此暂时不处理这个问题
微信、qq网页二次分享的更多相关文章
- 微信QQ的二维码登录原理js代码解析
这篇文章主要大家详细解析了微信QQ的二维码登录原理js代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在很多地方就是都出现了使用二维码登录,二维码付款,二维码账户等应用(这里的二维码种马,诈骗 ...
- 微信QQ的二维码登录原理浅析
在非常多地方就是都出现了使用二维码登录,二维码付款,二维码账户等应用(这里的二维码种马,诈骗就不说了),二维码验证,多终端辅助授权应用開始多起来,这里先说下啥是二维码,事实上二维码就是存了二进制数据的 ...
- js 怎么屏蔽微信打开网页后的分享
我们知道 js 可以通过 window.navigator.userAgent 来获取浏览器的相关信息,比如:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537. ...
- Vue3.0网页版聊天|Vue3.x+ElementPlus仿微信/QQ界面|vue3聊天实例
一.项目简介 基于vue3.x+vuex+vue-router+element-plus+v3layer+v3scroll等技术构建的仿微信web桌面端聊天实战项目Vue3-Webchat.基本上实现 ...
- 微信公众号jssdk自定义分享,二次分享自定义失败解决技巧
百度上自定义微信分享标题以及描述的解决方法有很多,基本上都能实现一次分享:流程基本上是这样的 1.首先引入微信jssdk =><script src="http://res.wx ...
- H5页面二次分享
对于H5页面来说二次分享还是蛮重要的,毕竟qq还是微信发出去之后习惯性的使用自带的分享功能.和PC端不同,PC直接复制地址了.前两天在做请柬,踩了不少的雷,个人开发和公司开发还是不一样,各种问题,其他 ...
- 手机QQ内置网页,微信内置网页中进行分享到QQ和微信的操作
微信内的网页分享: API内容详见微信开发文档 https://mp.weixin.qq.com/wiki 这里需要注意的是:调用微信API的时候修改的是微信内网页右上角三个点那里打开后,选择分享之 ...
- 微信、qq二次分享
前言 我们平时做微信分享的时候,一般分享出来的页面都是一个简单的html页面,不会加入框架之类的东西.所以当我们在分享出来的页面里面再次进行分享的时候,由于我们没有配置分享的标题.描述这些东西,分享出 ...
- 微信二次分享的JSSDK的调用
网页端微信的二次分享如果不调用分享的SDK,分享之后就不会带有标题.描述 .缩略图 微信分享SDK调用 引入 <script src="//res.wx.qq.com/open/js/ ...
随机推荐
- CentOS7 设置电源选项,待机、睡眠、挂起
设置装有 CentOS7 的笔记本合盖后黑屏进入睡眠模式 systemd 能够处理某些电源相关的 ACPI事件,你可以通过从 /etc/systemd/logind.conf 以下选项进行配置: Ha ...
- VPS 安装MySQL
目前Centos下默认支持的数据库是MariaDB,MariaDB是mysql的增强版本,由于mysql被Oracle收购之后,mysql之父担心之后mysql会变成闭源的软件,就又开发了这个版本,支 ...
- POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)
$ POJ~2018~Best~Cow~ Fences $(二分答案构造新权值) $ solution: $ 题目大意: 给定正整数数列 $ A $ ,求一个平均数最大的长度不小于 $ L $ 的子段 ...
- k8s+jenkins
1 server 的port , targetport, nodeport的区别 targetport为容器的暴露端口,为最后端的端口 port可以理解为pod的端口,pod是容器的外层,该端口可以在 ...
- 项目中dubbo的标准配置
# Spring boot applicationspring: application: name: hello-dubbo-service-user-provider # UserService ...
- 前端面试题:不使用loop循环,创建一个长度为100的数组,并且每个元素的值等于它的下标,,怎么实现好?
昨天,看这道题,脑子锈住了,就是没有思路,没看明白是什么意思?⊙﹏⊙|∣今天早上起床,想到需要思考一下这个问题. 当然,我没想明白为什么要这样做?(创建一个长度为100的数组,并且每个元素的值等于它的 ...
- 021:自定义path(或url)转换器
1.实现如下需求:用户可以根据articles/list/方式获取文章,其中文章分类是采用如下分类,实例如下: 第一种:获取python分类下的文章:/article/python/ 第二种:获取py ...
- re正则常用示例积累
2019-12-7 import re ''' 示例1: 提取网站的网址 ''' urls = ['https://blog.csdn.net/xxcupid/article/details/5199 ...
- Dubbo学习-6-springboot整合dubbo
1.在前面帖子和工程的基础上,这里使用springboot整合dubbo,首先创建springboot项目: https://start.spring.io/ 进入spring Initializr ...
- 检查电脑链接的网络是否支持ipv6
测试方法一:在浏览器地址栏输入网址“http://test-ipv6.com/”,在页面会给出您的ipv6网络测试结果 测试方法二:在浏览器地址栏输入网址“http://ipv6.jmu.edu.cn ...