微信分享签名Java代码实现
最近写了一个小微信签名功能,记录一下希望用到的朋友可以参考下。
RestController
@RequestMapping("/api/wx")
public class WeixinAction {
private static final Logger logger = LoggerFactory.getLogger(WeixinAction.class);
private static final String appId = "appId";
@Autowired
RestTemplate restTemplate;
@Autowired
RedisClient redisClient; @RequestMapping("/WeixinAction_getWXConfigSignature")
public String getWXConfigSignature(@RequestBody JSONObject reqJson) {
String url = reqJson.getString("url");
logger.info("原始URL: " + url);
long timeStampSec = System.currentTimeMillis() / 1000;
String timestamp = String.format("%010d", timeStampSec);
String nonceStr = getRandomStr(8);
String[] urls = url.split("#");
String newUrl = urls[0];
logger.info("随机串:"+nonceStr+", 获取签名URL: " + newUrl);
JSONObject respJson = new JSONObject();
String[] signArr = new String[]{"url=" + newUrl, "jsapi_ticket=" + getWXJsapiTicket(), "noncestr=" + nonceStr, "timestamp=" + timestamp};
Arrays.sort(signArr);
String signStr = StringUtils.join(signArr, "&");
String resSign = DigestUtils.sha1Hex(signStr); logger.info("返回的签名:" + resSign);
respJson.put("appId", appId);
respJson.put("timestamp", timestamp);
respJson.put("nonceStr", nonceStr);
respJson.put("signature", resSign);
logger.info(respJson.toJSONString());
JsonObject jsonObject = BaseCode.retCode(ResultCode.success);
jsonObject.putValue("resp", respJson);
return jsonObject.toString();
} private String getWXJsapiTicket() {
String ticket = redisClient.getStr(appId);
if (StringUtils.isBlank(ticket)) {
String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + getWXaccessToken() + "&type=jsapi";
String resp = restTemplate.getForObject(url, String.class);
JSONObject resJson = JSONObject.parseObject(resp);
logger.info("获取到ticket:" + resJson.getString("ticket"));
redisClient.setStr(appId, resJson.getString("ticket"), SystemConstants.ONE_HOURS * 2);
return resJson.getString("ticket");
}
return ticket;
} private String getWXaccessToken() {
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret=secret";
String resp = restTemplate.getForObject(url, String.class);
JSONObject resJson = JSONObject.parseObject(resp);
logger.info("获取到access_token:" + resJson.getString("access_token"));
return resJson.getString("access_token");
} public static String getRandomStr(int length) {
String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
int randomNum;
char randomChar;
Random random = new Random();
// StringBuffer类型的可以append增加字符
StringBuffer str = new StringBuffer(); for (int i = 0; i < length; i++) {
// 可生成[0,n)之间的整数,获得随机位置
randomNum = random.nextInt(base.length());
// 获得随机位置对应的字符
randomChar = base.charAt(randomNum);
// 组成一个随机字符串
str.append(randomChar);
}
return str.toString();
}
}
微信分享签名Java代码实现的更多相关文章
- H5+.Net Webapi集成微信分享前后端代码 微信JS-SDK wx.onMenuShareTimeline wx.onMenuShareAppMessage
说明: 1/因为赚麻烦这里没有使用数据库或服务器缓存来存储access_token和jsapi_ticket,为了方便这里使用了本地的xml进行持久化这两个值以及这两个值的创建时间和有限期限. 2/每 ...
- Android 微信分享与QQ分享功能
微信分享与QQ分享功能现在都挺常见的,可以根据一些第三方社会化分功能快速实现,不过多多少少都不怎么纯净,最好都是自己看官方文档来实现就最好了~ 一.微信分享 微信分享功能需要先在微信开放平台注册应用并 ...
- java菜鸟之微信分享
前言:我终于理解了什么叫做教科书:教科书就是把一些简单容易的知识写成一堆谁都看不懂的书,这,就简称“教科书” 这些天接触到微信分享以及回调的问题,因为之前没接触过,所以这次做这个分享,碰了一点点壁,特 ...
- Java微信分享接口开发
发布时间:2018-11-07 技术:springboot+maven 概述 微信JS-SDK实现自定义分享功能,分享给朋友,分享到朋友圈 详细 代码下载:http://www.demodas ...
- 微信分享接口的java开发的一些小步骤
1.配置接口信息进行验证 代码如下: /** * 访问没认证的地址跳转 * * @param request * @return 登录页面 * @throws ...
- 玩玩微信公众号Java版之七:自定义微信分享
前面已经学会了微信网页授权,现在微信网页的功能也可以开展起来啦! 首先,我们先来学习一下分享,如何在自己的页面获取分享接口及让小伙伴来分享呢? 今天的主人公: 微信 JS-SDK, 对应官方链接为:微 ...
- 微信分享JSSDK-invalid signature签名错误的解决方案
核对官方步骤,确认签名算法. 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验. 确认con ...
- Android集成微信分享功能应用签名生成方法及分享不生效的问题
通过友盟sdk集成微博.微信.qq等分享功能时,微博和qq很顺利,但在做微信集成时一直不成功.主要问题还是之前在微信开放平台申请创建移动应用时,对应用签名没有填写对,走了很多弯路现总结出来,加深记忆避 ...
- 微信分享jssdk config:invalid signature 签名错误
使用微信分享时,按照官方给的demo,使用时一直提示签名错误. 根据微信开发文档(http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd ...
随机推荐
- Linux常用命令大全(转载)
最近都在和Linux打交道,这方面基础比较薄弱的我只好买了本鸟哥的书看看,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因, ...
- [面经] 南京SAP面试(下)
上一篇讲到了一面结束,这一篇说说剩下的事情. 周三上午一面完了之后回去上班,本以为要等几天才会二面,结果那个经理M下午就打电话给我,约了第二天(周四)下午过去面试,会有Boss从上海过来面,办事效率还 ...
- postgresql----数据库表约束----PRIMARY KEY
五.PRIMARY KEY ---- 主键约束 主键可以是单个字段,也可以是多个字段的组合.主键约束其实是UNIQUE和NOT NULL约束的组合,即主键必须是唯一,且各字段都是NOT NULL的. ...
- .Net 获取前端传递的数据
1. DotNet MVC: form是用来获得表单提交的数据:querystring是用来获得标识在URL后面的所有返回的变量及其值. 比如常见的URL网页地址都有xxx.asp?pn=123456 ...
- 前端~HTML~CSS~JavaScript~JQuery~Vue
HTML CSS JavaScript DOM文档操作 jQuery实例 Vue
- importlib模块与__import__详解
importlib模块与__import__都可以通过过字符串来导入另外一个模块,但在用法上和本质上都有很大的不同. 通过下面示例说明,有如下一个工程目录: name = 'test' def get ...
- [C#]嵌入互操作类型
嵌入互操作类型(Embed Interop Types) 运用office编程调用Excel 的PIA时Microsoft.Office.Interop.Excel.dll时会产生如下问题: 1.提示 ...
- POJ2186:Popular Cows(tarjan+缩点)
题目解析: 这题题意没什么好说的,解法也挺简单的,只要会tarjan算法+只有一个出度为0的强连通分量题目有解这题就迎刃而解了. #include <iostream> #include ...
- PAT 1128 N Queens Puzzle[对角线判断]
1128 N Queens Puzzle(20 分) The "eight queens puzzle" is the problem of placing eight chess ...
- virtulenv使用
windows下创建虚拟环境 安装 virtualenv pip3 install virtualenv #选择一个存放虚拟环境的文件夹 cmd中 d: mkdir xxx cd xxx # 创建虚拟 ...