微信js sdk分享开发摘记java版
绑定域名和引入js的就不说了
废话不说直接上代码
public void share(HttpServletRequest request) throws Exception { StringBuffer homeUrl = request.getRequestURL();
String queryString =request.getQueryString();
if(StringUtils.isNotBlank(queryString)){
homeUrl.append("?").append(queryString);
}
long timestamp = System.currentTimeMillis() / 1000; String nonceStr = UUID.randomUUID().toString(); String signature = SignUtil.getSignature(
weiXinBaseService.getJsTicket(), nonceStr, timestamp,
homeUrl.toString());
logger.info("url="+homeUrl);
logger.info("nonceStr=" + nonceStr);
logger.info("timestamp=" + timestamp);
logger.info("signature=" + signature);
logger.info("appid=" + WebConfig.get("weixin.appid"));
request.setAttribute("appid", WebConfig.get("weixin.appid"));
request.setAttribute("timestamp", timestamp);
request.setAttribute("nonceStr", nonceStr);
request.setAttribute("signature", signature);
}
此方法主要有几个地方需要注意:1.获取的是请求的全路径,如果get请求有跟参数需要做个拼接。要不然签名会有错误。
2.随机数直接通过uuid随机数取的。
3.签名。微信的签名是个挺麻烦的事。但是又是必不可少的。签名代码奉上。
/**
* 获得分享链接的签名。
* @param ticket
* @param nonceStr
* @param timeStamp
* @param url
* @return
* @throws Exception
*/
public static String getSignature(String ticket, String nonceStr, long timeStamp, String url) throws Exception {
String sKey = "jsapi_ticket=" + ticket
+ "&noncestr=" + nonceStr + "×tamp=" + timeStamp
+ "&url=" + url;
return getSignature(sKey);
}
具体签名方法如下
/**
* 验证签名。
*
* @param signature
* @param timestamp
* @param nonce
* @return
*/
public static String getSignature(String sKey) throws Exception {
String ciphertext = null;
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] digest = md.digest(sKey.toString().getBytes());
ciphertext = byteToStr(digest);
return ciphertext.toLowerCase();
} /**
* 将字节数组转换为十六进制字符串
*
* @param byteArray
* @return
*/
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
/**
* 将字节转换为十六进制字符串
*
* @param mByte
* @return
*/
private static String byteToHexStr(byte mByte) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
tempArr[1] = Digit[mByte & 0X0F]; String s = new String(tempArr);
return s;
}
前端页面中引入微信js文件并配置config
<script type="text/javascript" src="${pageContext.request.contextPath}/static/js/jweixin-1.0.0.js"></script> <script>
var shareTitle = "法国游已经近在咫尺了,是朋友就帮我一把吧!";
var shareImg = "http://" + domain +"${pageContext.request.contextPath}/static/img/shareImage.jpg"
wx.config({
debug: false, //
appId: '${appid}', // 必填,公众号的唯一标识
timestamp: '${timestamp}', // 必填,生成签名的时间戳
nonceStr: '${nonceStr}', // 必填,生成签名的随机串
signature: '${signature}',// 必填,签名,见附录1
jsApiList: [
'onMenuShareTimeline',
'onMenuShareAppMessage',
'showOptionMenu'
] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 });
wx.ready(function () {
share();
});
function share(){
wx.showOptionMenu();
wx.onMenuShareTimeline({
title: shareTitle, // 分享标题
link: $("#shareLink").val(), // 分享链接
imgUrl:shareImg,
success: function () { }
});
wx.onMenuShareAppMessage({
title: shareTitle, // 分享标题
link: $("#shareLink").val(), // 分享链接
imgUrl:shareImg,
desc: 'xxx', // 分享描述
success: function () { }
});
}
</script>
微信js sdk分享开发摘记java版的更多相关文章
- 微信开发(2):微信js sdk分享朋友圈,朋友,获取config接口注入权限验证(转)
进行微信开发已经一阵子了,从最初的什么也不懂,到微信授权登录,分享,更改底部菜单,素材管理,等. 今天记录一下微信jssdk 的分享给朋友的功能,获取config接口注入. 官方文档走一下简单说:四步 ...
- 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容
第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...
- 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...
- 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据O ...
- 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单
我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...
- 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token
一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...
- 第四篇 :微信公众平台开发实战Java版之完成消息接受与相应以及消息的处理
温馨提示: 这篇文章是依赖前几篇的文章的. 第一篇:微信公众平台开发实战之了解微信公众平台基础知识以及资料准备 第二篇 :微信公众平台开发实战之开启开发者模式,接入微信公众平台开发 第三篇 :微信公众 ...
- 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装
微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...
- 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发
第一部分:微信公众号对接的基本介绍 一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击“修改配置”按钮,填写服务器地址( ...
随机推荐
- Centos7 入门几个操作
http://www.wallcopper.com/linux/1650.html 创建文件软连接 ln -s 源路径 目标路径 查看软连接ls -il 服务操作:systemctl start fo ...
- 后台异常 - org/apache/oro/text/regex/MalformedPatternException
解决办法 1.将JDK换成1.6.023或者以上的,如果不行进行下面的办法操作 2.缺少了jakarta-oro-2.0.8.jar文件,将此包放入工程中
- 【转载】Hibernate关系映射
1. 单向一对一关联映射(one-to-one): 两个对象之间一对的关系,例如:Person(人)-IdCard(身份证) 有两种策略可以实现一对一的关联映射: *主键关联:即让两个对 ...
- Python3标准库:textwrap文本自动换行与填充
1. textwrap文本自动换行与填充 textwrap模块提供了一些快捷函数,以及可以完成所有工作的类TextWrapper.如果你只是要对一两个文本字符串进行自动或填充,快捷函数应该就够用了:否 ...
- DOM盒模型和位置 client offset scroll 和滚动的关系
DOM盒模型和位置 client offset scroll 和滚动的关系 概览 在dom里面有几个描述盒子位置信息的值, pading border margin width height clie ...
- 查看gcc编译器版本
我们在windows下DS5中编译时使用GCC交叉编译器,但是在ubuntu时也需要使用GCC编译器,这时最好时保持版本一致,所以就需要查看windows下版本,如下图,在按装的文件夹中找到对应得文件 ...
- python UI自动化之切换iframe
python+selenium写UI自动化的时候,经常会遇到需要切换iframe的情况,这里介绍几种切换iframe的方式 1.使用id定位 driver.switch_to.frame(" ...
- 1069 The Black Hole of Numbers (20分)
1069 The Black Hole of Numbers (20分) 1. 题目 2. 思路 把输入的数字作为字符串,调用排序算法,求最大最小 3. 注意点 输入的数字的范围是(0, 104), ...
- 【做题笔记】CF1311A、B、C
或许以后会有D. A 题目大意:给定两个整数 \(a,b\) ,每次可以进行一下任意一个操作: \(a\) 加上任意一个正奇数 \(b\) 减去任意一个正偶数 问是否可以通过若干次操作把 \(a\) ...
- centos7也支持service命令启动服务吗,对于centos7 中的systemctl和旧的service命令的区别和联系
一.centos7也支持service命令启动服务吗 CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服 ...