微信分享实现

2023-05-16

本文简单的介绍在微信里打开某个网站,希望在点击“分享到朋友圈”或“发送给朋友“时,自定义分享的内容, 即使用 JS-SDK 实现分享功能。

 

1. 前提

要想分享成功,需要申请一个公共号,获取特定的app_id 和 app_secret 。

 

2. 获取access_token

使用分配的 app_id 和 app_secret 去获取一个有效的 access_token ,路径为:

 

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=<app_id>&secret=<app_secret>

 

得到的返回值的格式为:

 


{"access_token":"<access_token>","expires_in":7200}  

 

 

3. 获取jsapi的ticket

有了access_token以后,就可以使用该token去请求jsapi的ticket,路径为:

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=<access_token>&type=jsapi

 

得到的返回值的格式为:


{"errcode":0,"errmsg":"ok","ticket":"<ticket>","expires_in":7200}
  

 

4.  生成签名

有了以上内容后,就可以生成签名了,生成签名的需要的参数有:

  • jsapi_ticket : 步骤 3 中获取的ticket
  • noncestr : 一个混淆字符串,值可以任意,在后续中还会被用到,所以需要记住
  • timestamp : 一个时间戳,就是从1970年1月1号零晨到当前的秒数,用 java 表示就是: System.currentTimeMillis()/1000
  • url : 微信当前打开页面的完整的url

把以上四个键值对,按键名的字母序,拼接起来,做一个sha1的加密,拼接的顺序为:


jsapi_ticket=<ticket>&noncestr=<any_str>&timestamp=<timestamp>&url=<current_page_url>  

拼接完后做sha1加密就得到了签名,例如以下请求串: 


jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VH5zlC1TiV7zG5Rb8FkGY3GQrZ2aRpFoQX1CLQ7BaBVpS3sHlUyuJC5UnzQFf1oGpg&noncestr=test&timestamp=1429182394&url=http://m.ufenqi.com/items/2713/detail  

加密后的值为: 85cf483b82edd0c9ada97635cf174446552201e9

 

注: 一个在线的sha1加密网站是: http://www.3464.com/tools/sha1/index.asp

 

注:java里可以使用 commons-codec 包里的 DigestUtils.sha1Hex() 方法得到加密值。

 

5. 实现分享代码

有了以上信息,就可以开始实现分享代码了:


<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js" ></script> <!--引用微信js-->
<script>
	// 微信配置
	wx.config({
	    appId: "<app_id>", 
	    timestamp: '<上面步骤中签名用的时间戳>', 
	    nonceStr: '<上面签名中用的混淆字符串>', 
	    signature: '<计算得到的sha1加密串>',
	    jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'] // 功能列表,我们要使用JS-SDK的什么功能
	});
	// 配置信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后
	//config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。
	//对于用户触发时才调用的接口,则可以直接调用,不需要放在ready 函数中。
	wx.ready(function () {
		//检查相应的接口api是否要用
	 	wx.checkJsApi({
	          jsApiList: [
	              'onMenuShareTimeline',
	              'onMenuShareAppMessage'
	          ]
	    });
	  	// 监听“分享给朋友”按钮,自定义分享内容及分享结果接口
	    wx.onMenuShareAppMessage({
	        title:'<分享标题>',
	    	link:'<要分享的链接>',
	        imgUrl:'<分享时显示的图片>',
	        desc:'<分享描述>',
	        type:'link', //指定分享类型
	    });
	  	// 监听“分享到朋友圈”按钮,自定义分享内容及分享结果接口
	    wx.onMenuShareTimeline({
	      	title:'<分享标题>',
	    	link:'<要分享的链接>',
	        imgUrl:'<分享时显示的图片>',
	        success:function(){		//可以定义一些分享执行后的通知事件
	        	alert("success");
	        }
	    });
	    //验证配置出错时的结果通知
	    wx.error(function (res) {
	        alert('wx.error: '+JSON.stringify(res));
	    });
	});
</script>  

 

欢迎尝试

 

注:每次token的有效期是2个小时,所以需要定期的更新token;另外由于涉及到一些敏感和关键的信息,所以生成签名的逻辑一定要放在后台实现,然后给前端返把值推送回来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信分享实现 的相关文章

随机推荐

  • MAC终端代理设置

    移动开发有时需要设置代理 xff0c 不然太慢 在终端中输代码即可显示隐藏文件 defaults write com apple finder AppleShowAllFiles boolean true killall Finder 再次
  • C#:如何查看.net core版本?

    C xff1a 如何查看 net core版本 xff1f 打开控制面板 xff0c 选择 程序和功能 xff0c 找到下图选项 xff0c 即可查看 net core版本 检查是否已正确安装所有内容 xff1a 安装完成后 xff0c 打
  • Qt信号槽如何传递参数

    Qt信号槽如何传递参数 利用 Qt 进行程序开发时 xff0c 有时需要信号 槽来完成参数传递 带参数的信号 槽在使用时 xff0c 有几点需要注意的地方 xff0c 下面结合实例进行介绍 1 当信号与槽函数的参数数量相同时 xff0c 它
  • 解决 zsh: command not found 报错

    问题描述 最近在开发 Go 项目 xff0c 使用 go get u xxxx 成功下载安装包后 xff0c 在终端执行新下载包的命令 xff0c 一直报 zsh command not found 的错误 一开始以为是包没安装成功 xff
  • Ubuntu 安装scipy错误解决办法

    在ubuntu 14 04使用pip3 install scipy时报错 xff1a numpy distutils system info NotFoundError no lapack blas resources found 百度了一
  • LA5016-IIC EEPROM协议解析

    写入 LA5016 解析协议设置 xff1a 波形 读取 波形 xff1a
  • Linux下安装oracle数据库提示DISPLAY not set. Please set the DISPLAY and try again.解决方法

    问题描述 xff1a Linux下安装oracle数据库提示DISPLAY not set Please set the DISPLAY and try again 如下图所示 xff1a 解决办法 xff1a 切换到root 用户 xff
  • html 清除缓存样式

    autocomplete 61 off
  • ArcGIS Server for linux 服务无法启动解决简记

    今天在一台Linux虚拟机上安装了一个ArcGIS Server For Linux 只ArcSOC 组件 xff0c 一切正常 xff0c 但是启动服务的时候报一下的错误 xff1a root 64 rhsde scripts start
  • Java中swap()方法的实现

    为了能更多的掌握C C 43 43 xff0c 时不时的就会拿起一本什么书看看 昨天又看到了请指针和引用的部分 xff0c 又会有经典的swap 方法的实现 几乎所有人都知道了 xff0c 要实现一个正确的swap 方法需要以指针或引用为参
  • 渐变色原理

    引用 http www islandcn com post 311 html 在图象图形的编程中 经常会见到渐变色以及各种图片的叠加等效果 这篇文章就是要对这些效果的原理加以分析 并在Elastos 操作系统 Mobile Edition
  • JAX-WS 学习二:创建客户端

    上一节中介绍了怎么基于JAX WS的API创建服务端 xff0c 这一节介绍一下创建一个客户端调用WebService服务 要创建一个Client端也相当简单 xff0c 不过需要知道几个东西 xff1a 1 wsdl文件路径 需要读取服务
  • 使用JDI监听Java程序运行

    Java虚拟机提供了一套用于调试 xff08 JVMDI xff09 和监视 xff08 JVMPI xff09 的接口 xff0c Java5之后统一为JVMTI xff1a http docs oracle com javase 1 5
  • 使用CXF和camel-cxf调用webservice

    CXF是什么 Apache CXF 是一个开源的 全功能的WebService框架 xff0c 它提供了一套工具和API来帮助开发和构建WebService xff0c 像 JAX WS 和 JAX RS 它也支持许多WebService标
  • Java国际化:BreakIterator

    译自 xff1a http tutorials jenkov com java internationalization breakiterator html xff0c 不准确别怪我 java text BreakIterator 类用来
  • build-helper-maven-plugin的使用

    build helper maven plugin 插件主要的作用就是用来指定额外的源码路径和资源路径 它总共有15个goal xff1a build helper add source Add more source directorie
  • tkinter进阶版——ttk

    很长的一段时间里 xff0c 我都是用tkinter进行GUI设计的 xff0c 还写过一篇 tkinter模块常用参数 但后来慢慢地觉得 xff0c 这个tkinter真的是有点丑啊 于是 xff0c 找到了现在的ttk ttk是什么呢
  • Spring 参考资料

    拦截器顺序参考 xff1a http www cnblogs com yjmyzz p how to custom filter provider and token in spring security3 html Spring框架详细参
  • 自定义Spring MVC中的数据绑定

    默认情况下 xff0c spring mvc的数据映射的实现是自动查找请求中的key为参数名的parameter的值 比如有以下方法 xff1a 64 RequestMapping value 61 34 xml 34 method 61
  • 微信分享实现

    本文简单的介绍在微信里打开某个网站 xff0c 希望在点击 分享到朋友圈 或 发送给朋友 时 xff0c 自定义分享的内容 xff0c 即使用 JS SDK 实现分享功能 1 前提 要想分享成功 xff0c 需要申请一个公共号 xff0c