H5文章分享给好友或朋友圈后如何生成自定义分享内容

微信小程序嵌套的H5使用小程序分享(分享微信好友或朋友圈) 嵌套在微信小程序中的H5使用使用小程序自带分享功能,分享H5的页面给微信好友或朋友圈。 阅读详情

前言

以前h5网页在微信里打开,右上角分享到微信好友或者朋友圈 是微信自己抓取的首图 现在 好像不行了。这是因为微信更新了API,必须自行配置,接入jssdk,才能实现自定义分享信息的功能。详细可以查看微信官方开发者文档,地址:

http://www.cnblogs.com/simba-lkj/p/7986252.html

JS接口安全域名

接入jssdk时,就需要配置JS接口安全域名,因此需要登录微信公众平台,在公众号设置→功能设置中,填写JS接口安全域名,域名即为H5项目的域名(如:www.baidu.com),同时需要下载一个txt验证文件,并放置到服务器的根路径下,实际操作时根据提示即可。

 

设置白名单

这一步其实应该放到后面获取access_token步骤中,我这里正好已经登录在公众号平台,所以就一并操作了。后面讲到获取access_token和jsapi_ticket时,需要访问服务器,因此需要将H5项目服务器的IP地址添加到白名单中,否则接口将无法调用成功。具体设置方法:在开发→基本设置→IP白名单中进行添加相应的IP地址即可。如下图所示

 

获取access_token

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。详细说明详见官当开发文档:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

首先需要在H5页面内中引入js文件

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

具体获取的代码如下:

 
$.ajax({
  url: "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=AppSecret";,  //接口地址
  type: "Get",
  dataType: 'jsonp',
  crossDomain: true,//与上一项解决跨域问题
  success: function (data) {
   //将access_token缓存起来
   localStorage.setItem("access_token", data.access_token);
  }
});

其中参数appid和secret均可以在公众号后台查看获取。

获取jsapi_ticket

jsapi_ticket是公众号用于调用js接口的临时票据。有效期7200秒,跟公众号普通access_token一样,必须全局缓存起来,因为这个ticket获取次数有限,超过次数将无法使用。获取jsapi_ticket也是为了后面生成signature签名做准备。具体方法与access_token类似,替换访问接口即可。

 
$.ajax({
 url: "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi",  //接口地址
 type: "Get",
 dataType: 'jsonp',
 crossDomain: true,
 success: function (data) {
   //缓存jsapi_ticket
   localStorage.setItem("jsapi_ticket", ticket);
 }
});

生成signature,并自定义分享信息

前台的代码实现:

 
var url = location.href.split('#')[0];  //分享的文章地址
var requestUrl = "/app/getticket?ticket=" + ticket + "&url=" + url;
$.ajax({
	url: requestUrl,
	type: "Get",
	dataType: 'json',
	success: function (data) {
		var appId = data.appId;
		var timestamp = data.timestamp;
		var nonceStr = data.noncestr;
		var signature = data.signature;
		wx.config({
			debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,
						  // 若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
			appId: appId + '', // 必填,公众号的唯一标识
			timestamp: timestamp + '', // 必填,生成签名的时间戳
			nonceStr: nonceStr + '', // 必填,生成签名的随机串
			signature: signature + '',// 必填,签名,见附录1
			jsApiList: ["onMenuShareTimeline", "onMenuShareAppMessage", "onMenuShareQQ"] 
			// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
		});

		wx.ready(function () {
			var imgurl = '缩略图完整地址';
			var title = '自定义标题';
			var desc = '自定义描述信息';
			wx.onMenuShareTimeline({
				title: title, // 分享标题
				desc: desc, // 分享描述
				link: url, // 分享链接
				imgUrl: imgurl, // 分享图标
				success: function () {
					// 用户确认分享后执行的回调函数
				},
				cancel: function () {
					// 用户取消分享后执行的回调函数
				}
			});

			wx.onMenuShareAppMessage({
				title: title, // 分享标题
				desc: desc, // 分享描述
				link: url, // 分享链接
				imgUrl: imgurl, // 分享图标
				type: '', // 分享类型,music、video或link,不填默认为link
				dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
				success: function () {
					// 用户确认分享后执行的回调函数
				},
				cancel: function () {
					// 用户取消分享后执行的回调函数
				}
			});

			wx.onMenuShareQQ({
				title: title, // 分享标题
				desc: desc, // 分享描述
				link: url, // 分享链接
				imgUrl: imgurl, // 分享图标
				success: function () {
					// 用户确认分享后执行的回调函数
				},
				cancel: function () {
					// 用户取消分享后执行的回调函数
				}
			});
		});
	}
});

后台生成签名的逻辑代码:

 
/// <summary>
///  根据传入的jsapi_ticket生成signature签名
/// </summary>
/// <param name="ticket"></param>
/// <returns></returns>
public JsonResult GetTicket(string ticket, string url)
{
    SignatureTicket model = new SignatureTicket();
    model.appId = CommonSharp.appId;
    model.noncestr = CommonSharp.GetRnd(16, true, true, true, false, "");
    model.timestamp = CommonSharp.GetTimeStamp();
    string _url = System.Web.HttpUtility.UrlDecode(url);
    string string1 = "jsapi_ticket=" + ticket + "&noncestr=" + model.noncestr + "×tamp=" + model.timestamp + "&url=" + url;
    model.signature = CommonSharp.GetPwd(string1);
    return Json(model);
}

其中GetPwd方法的逻辑如下:

 
public static string GetPwd(string str)
{
    byte[] cleanBytes = Encoding.Default.GetBytes(str);
    byte[] hashedBytes = System.Security.Cryptography.SHA1.Create().ComputeHash(cleanBytes);
    return BitConverter.ToString(hashedBytes).Replace("-", "");
}

至此,需要配置的以及后台代码均已完毕,发布后放到服务器上进行测试使用。

 

---------------------------------- 完美的分割线 ---------------------------------------

根据上面的方式,开始确实可以实现想要的功能,但晚上下班回家了,无意中再次打开时发现又不行了,在电脑上查看时,报了如下错误:

invalid credential, access_token is invalid or not latest hint

一番折腾之后发现,是由于access_token过期了,导致生成的签名失败。分析上面的代码,发现将获取到的access_token缓存到localstorage的逻辑是有问题的,获取到的access_token默认有效期为2小时,如果重新请求API接口,新的access_token会覆盖原来的值,而我将access_token存入localstorage后,其实并没有做进一步的有效期的校验和定时刷新,所以过了有效期之后,自然就会出现上面的那个错误了。

知道了原因,那就开始动手修改吧。当在前端利用jsonp访问微信API接口时,莫名其妙的又出现了另一个错误:

Uncaught SyntaxError: Unexpected token :

这个应该是跟ajax跨域请求返回的数据格式有关系,但是试了很多方法都不行,无奈,只好换一种思路,打算不再从前端获取access_token了,改从后端去获取,这样就可以避免了ajax访问时跨域的问题。还是直接上代码吧~~

后台C#代码实现如下:

 
/// <summary>
///  获取access_token
/// </summary>
/// <returns></returns>
public JsonResult GetAccessToken()
{
  AccessToken result = new AccessToken();
  if (HttpRuntime.Cache == null)
  {
    result = GetToken();
  }
  var accessTokenCache = HttpRuntime.Cache.Get(CommonSharp.token_cahekey);
  if (accessTokenCache != null)
  {
    result.Token = accessTokenCache.ToString();
  }
  else
  {
    result = GetToken();
  }
  return Json(result);
}
private AccessToken GetToken()
{
    AccessToken result = new AccessToken();
    var client = new WebClient();
    client.Encoding = System.Text.Encoding.UTF8;
    var responseData = client.DownloadString(string.Format(@"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential
        &appid={0}&secret={1}", CommonSharp.appId, CommonSharp.app_secret));
    var serializer = new JavaScriptSerializer();
    var accessDictionary = serializer.Deserialize<Dictionary<string, object>>(responseData);
    var accessToken = accessDictionary[CommonSharp.token_cahekey];
    if (accessToken != null)
    {
        HttpRuntime.Cache.Insert(CommonSharp.token_cahekey, accessToken, null, DateTime.Now.AddSeconds(7100), 
            TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Normal, null);
        result.Token = accessToken.ToString();
    }
    return result;
}

文章来源博主自己的博客:https://www.dupengnet.com/home/detail/5b20d13590d424423cda1ad5.html

h5页面调用微信JS-SDK分享到微信好友或者朋友圈的配置(h5页面嵌入小程序中) 前言:h5嵌入小程序中点击h5页面中的分享按钮调用微信小程序分享功能,需要调用微信JSSDK方法来实现。 步骤: 1.引入微信JSSDK,通过script标签,引入微信官网的JS-SDK文件。 <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> 2.在页面中添加配置 <script type="text/javascript"> 阅读详情

相关推荐

uniapp - 详细实现H5网页分享给好友和朋友圈,uniApp微信分享详解分享到微信朋友圈和微信好友功能,将当前网页分享页面转发给微信朋友或转发到朋友圈(h5网页或微信公众号接入全流程及示例源码)

uniapp,vue2,vue3,h5平台,H5网页端,uniapp h5 微信分享,uniapp微信公众号h5的分享好友和分享朋友圈,UniApp中实现微信分享功能:步骤详解与最佳实践,H5在微信浏览器中分享好友和朋友圈,分享链接到微信好友,显示标题和缩略图,uni-app H5分享到微信,uni-app:分享页面到微信好友和朋友圈,uniapp微信公众号h5端分享,自定义分享卡片,分享报错,分享按钮失效,如何将网页URL链接分享至微信,IOS端微信分享失效的踩坑及解决方案,H5微信分享报错,微信H5微信

🏆 前端领域优质创作者 1万+

H5如何分享到朋友圈带图片?(后端C#)

token 需要缓存,做中心化共享处理,不要每次调用都新产生一个。3、输出请在电脑浏览器完成,按F12查看 Console 和 Network 是否有正常输出。2、一般写的是 location.href.split('#')[0],如果有问题请按这个;4、wx.config 在未完成时,建议设置为 debug: true,这样有错误才能输出。1、查询很多资料,都是说需要post,但实际我用 get 也成功了。注:要为h5新生成一个二维码,扫码后再分享 ,要不然没有效果。

我想我是海 冬天的大海 心情随风轻摆 2558

Vue3 - 最新详细实现 H5 网页朋友圈分享转发,详解微信公众号网页分享到朋友圈功能,在微信环境下让第三方网站支持分享给朋友或朋友圈,支持将页面分享到QQ空间或手机好友(详细示例代码,注释详细)

vue3,nuxt3,微信公众号网页,h5,移动端H5网页,微信分享,微信网页分享转发朋友圈,将网页分享转发给微信好友,微信朋友圈,微信好友,qq好友,qq空间,vue3网页分享到朋友圈,vue3网页分享转发给好友,vue3公众号网页,nuxt3如何实现分享网页,微信分享好友,分享朋友圈,H5公众号分享到微信朋友圈或好友,vue3h5微信分享到微信,无法分享显示灰色解决,分享失败,无法分享转发朋友圈,标题和图标不显示,微信分享sdk,真机无法分享怎么办,怎么做微信转发分享功能,报错,出错,分享不了,部署上

🏆 前端领域优质创作者 1万+

C# 微信网页分享链接 前后端代码,config:invalid signature错误的解决方法

本文是微信公众号开发-H5网页分享功能的前、后端整个流程,以及遇到的invalid signature问题的解答,希望对该功能开发不是很清楚的朋友有所帮助。 一、准备工作。 百度下“微信 公众平台 开发 文档”进入官方接口文档(这里有朋友要问了,为什么搜索的时候要在词与词之间加空格,这是个小技巧,这样搜索的结果更加准确):文档1.1至3.7的篇幅清晰的介绍了如何设置JS安全域名、网站如何导入开...

ananlele_的专栏 1138

H5页面分享内容至QQ、微信功能(支持大多浏览器)

H5页面分享内容至QQ、微信功能,支持调起市面大多主流浏览器自带分享,微信内需先做权限配置,配置相关可查阅微信开发文档

USB2.0物理层实战:手把手教你用示波器抓取D+/D-信号(附波形分析)

本文是一份针对硬件工程师的USB2.0物理层信号调试实战指南。文章详细讲解了如何使用示波器捕获和分析D+/D-差分信号,从基础设置、核心信号状态解读,到信号完整性分析与常见问题排查,手把手教你定位USB通信故障。内容涵盖USB2.0协议物理层关键概念,并附有基础解码思路,旨在提升工程师的底层调试能力。

s8t9u0v1w的博客 448

H5链接分享到微信中形成小卡片(后端代码签名实现(超详细))

(这两个方法都写了缓存,和是失效时间,并且在用的时候都会去判断缓存里面有没有值,没有的话,我们再去请求重新获取,而不是每次都请求获取,这样会造成接口请求频繁受到限制的问题)返回结果集类(可用自己的,附上仅为了复制代码直接可用)

行者彡的博客 3665

ISCC-Amy‘s Code CTF-Reverse

ISCC-Amy's Code CTF-Reverse

m0_72904009的博客 682

微信分享第三方连接(H5页面)自定义缩略图、标题、描述(显示分享框,而不是链接)(微信JS-SDK)

现在微信不支持自定义按钮分享组件(也就是说不能点击某个按钮分享),只能通过微信右上角的三个小点,点击后选择分享给朋友,朋友圈等。当前从企业微信分享到微信好友和微信朋友圈是有问题的,一些手机(有些是因为app版本,企微版本4.0.10版本就不可以)对应设置的信息(标题、描述、缩略图)不会显示。当前微信JS-SDK版本是,企微的是(两个是同一个,只是版本不同)

qq_17627195的博客 2万+

Node框架之NestJS入门学习

文章主要分为三部分:1 NestJS 与Egg对比2 NestJS 基础知识介绍3 使用NestJS快速搭建应用,实现CURD操作e-link文档Egg官网NestJS 官网NestJS中文文档(非官方)

十九万里的博客 4738

h5在微信中自定义分享内容

h5在微信中自定义分享内容 请求接口 返回appid, nonceStr, timestamp,signature, wx.config({ debug: false,//调试模式为true appId: appId, nonceStr: nonceStr, timestamp: timestamp, signature: signature, jsApiList: [ "

wsdbz的博客 408

别再只看图了!代谢组学OPLS-DA分析,R2Y和Q2Y到底怎么看才不踩坑?

本文深入解析代谢组学OPLS-DA分析中的关键指标R2Y和Q2Y,揭示如何避免过拟合陷阱。通过详细解读模型解释能力(R2Y)和预测能力(Q2Y),结合置换检验方法,提供完整的模型评估流程与实战建议,帮助研究者获得可靠的分析结果。

weixin_42638178的博客 195

H5分享到微信好友朋友圈QQ好友QQ空间微博二维码

H5分享到微信好友朋友圈QQ好友QQ空间微博二维码这是分享按钮:&lt;button onclick="call()"&gt;通用分享&lt;/button&gt; &lt;button onclick="call('wechatFriend')"&gt;微信好友&lt;/button&gt; &lt;button onclick="call('wechatTimeline')&quot

qq_21700537的博客 1986

uniapp - 实现苹果App打包上架App Store应用商店详细教程,详解Hbuilder打包编译ipa发布上传到苹果ios软件商店全流程,提供云打包/离线本地打包ios、申请IOS苹果证书方法

uni-app,苹果ios,苹果app,打包编译,appstore应用商店,ipa发布到软件商店,uniapp的app苹果应用商店上架,上架苹果APPStore,uniApp打包的ipa文件上传到商店,上架苹果商城,审核失败,被拒绝,UniApp打包ipa文件,上架iOSAppStore流程指南,最新详细教程最全,Hbuilder打包发布iosapp,苹果云打包上线全过程,云打包IPA并上传到商店,打包iOSipa文件后怎么发布到应用商店,苹果证书申请教程,ios证书申请,mac电脑,审核很久

🏆 前端领域优质创作者 1万+

构建栅格地图matlab代码

1 使用MATLAB实现地图栅格化 效果图如下所示 图1 ...

qq_59747472的博客 4517

微信内H5页面自定义分享功能vue3(解决H5页面分享朋友圈,debug一直是ok,分享内容是一段链接问题)

在接入微信 JS-SDK 并进行相关分享功能开发时,很多文档都详细讲解了如何引入微信 JS-SDK 文件、如何配置 config 参数以及如何调用分享接口。然而,即便按照文档提供的步骤正确配置了所有内容,仍然可能出现分享出去的只是一个简单的链接,而不是你预期的具体内容(如图片、标题、描述等)。这种问题常常是由于以下几个原因引起的:JS-SDK 配置不完整或错误:确保你在调用分享接口前正确配置了 wx.config,并且权限签名(jsapi_ticket)以及其他必要参数正确无误。

qq_53816329的博客 2209

【思博伦】史上最详细Spirent TestCenter测试仪使用教程精讲(一)!图解超赞超详细!!!

3. 在弹出的界面中,找到菜单栏中的“Connect/Create”,选择下拉框中的“Connect to Physical/Visual Chassis”,在弹出的对话框中输入思博伦测试仪的IP地址:192.168.6.244,点击“OK”;说明:目前我们只需要使用到Raw Stream Block,不需要用到Bound Stream Block。说明:如果要使用100G模式,由于硬件限制,必须连续3个面板端口同时配置为100G使用。打开安装包,并按照提示按照即可。

风云说通信 6477

微信H5页面禁止分享给好友和朋友圈及屏蔽微信复制链接功能

分享到Weibo:"menuItem:share:weiboApp"发送给朋友:"menuItem:share:appMessage"分享到朋友圈:"menuItem:share:timeline"分享到FB:"menuItem:share:facebook"分享到QQ空间:"menuItem:share:QZone"一些特殊公众号:"menuItem:share:brand"分享到QQ: "menuItem:share:qq"邮件:"menuItem:share:email"

細水、長流√的专栏 5098

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

html分享到微博,h5页面分享到微信、朋友圈、新浪微博、QQ空间、QQ好友组件

h5页面分享组件、支持分享到微信、朋友圈、新浪微博、QQ空间、QQ好友。执行逻辑-微信客户端手qqq浏览器uc浏览器其他浏览器分享到微信提示点击右上角分享提示点击右上角分享native分享native分享弹层提示分享到朋友圈提示点击右上角分享提示点击右上角分享native分享native分享弹层提示分享到qq提示点击右上角分享提示点击右上角分享native分享-弹层提示分享到qq空间提示点击右上角...

weixin_39918690的博客 1446

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

解决方案:h5网页外部浏览器唤起微信分享,唤起微信面板,分享朋友圈方案,兼容大部分浏览器

h5网页外部浏览器唤起微信分享,唤起微信面板,分享朋友圈方案,兼容大部分浏览器 需求是点击分享按钮,直接唤起微信,发送给好有或者朋友圈。这个需求并不好完成,因为微信并没有对h5网页开放api,但是每个浏览器都有分享到微信的能力,所以我们可以利用浏览器的这个能力去解决。 看看效果 如何完成 html部分 注意引入nativeShare.js文件 <div > <button onclick="call()">通用分享</button> <button

weixin_52296487的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

h5 点击按钮生成图片分享微信朋友圈

在开始接到这个h5 点击按钮生成图片(记住是图片,不是连接)分享微信朋友圈 这个需求的时候,我翻遍了整个网络都找不到用h5可以直接唤起微信朋友圈的,后来才知道,单独的h5是唤不起微信的,需要原生app去集成微信的sdk,app去调微信的方法,h5再去调app的方法,才可以实现。 写这个文章的原因主要目的是想让正在网络上查找h5唤起微信方法的程序猿们看看,不要浪费时间啊。。。 ...

p_pppxxxxmmm的博客 7188

uni-app实现Android分享到微信朋友圈和微信好友,附DEMO和源码

微信分享大家见怪不怪了!就是再APP点击分享,然后唤起微信,分享当前页面到朋友圈或者分享给朋友。 所以,我开发了这样的一个工具。 动图demo 分享后 就是一个带有标题、描述文字、LOGO、分享来源的一个小卡片。 开发 这个App是使用uni-app框架开发的。没了解过可以取访问:https://uniapp.dcloud.io/了...

weixin_34221773的博客 1万+

vue的H5项目实现微信分享给好友和朋友圈自定义缩略图显示内容和图标

遇到的问题(三) 接上篇文章的项目。在做完所有的页面后,后端小伙伴初步实现了微信分享,但是分享后缩略图是酱紫的: 最初的效果缩略图图标是一个回形针,内容是页面的title,我不想要这种效果,想实现下面那种图标和内容都可以自定义的效果,还有一点,我还想自定义每个页面(因为本项目有多个页面)分享后的URL(即点击分享缩略打开指定页面)。调用微信的接口时,遇到了这么几个问题: 1、微信的签名问题:“e...

BigFamer的博客 3784

微信公众号之微信自定义分享

用户在h5 页面中实现微信的分享至好友、分享至朋友圈的功能、且实现的方式为卡片的形式 ,(一个h5界面要求点击右上角三个点后点击微信好友分享带标题和图片给好友。vue项目中,分享携带头部标题、简介和缩略图等信息)。公众号H5的分享只是自定义分享内容,标题、图片、链接等,具体的分享操作还是得通过右上角的三个点分享来拉起分享面板的。直接点击分享是没有图和文字描述的,这就是为什么需要自定义分享的原因。

十一 3634

Uniapp 分享朋友圈

出现以上错误解决方法:1、需要后台配置安全域名2、分享的链接一定不能包含中文,需要用encodeURIComponent()转换一下3、title,link,imgUrl 都需要和安全域名一致(查找其他文章都只提到链接域名需要和安全域名一致,但是实际操作发现标题或图片仍不显示,直到把他们都配置为安全域名,分享朋友圈才显示正常)// #endif。

weixin_52607811的博客 2208
上一篇: windows中安装RabbitMQ时:,unable to connect to node rabbit@xxx: nodedown的解决方式
seven_coder
博客等级 码龄11年 11粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值