package com.dhht.wechat.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import java.util.HashMap;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap; /**
* @Author: sh
* @Description: WechatUtil
* @Date: 17:46 2019/10/15
*/
public class WechatUtil { final static String KEY_S = "SIGNKEY-"; public static String getSignKey(String url){
return KEY_S+url;
} /**
* 获取access_token
*
* @param appId
* @param secret
* @return
*/
public static String getAccessToken(String appId, String secret) {
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + secret;
JSONObject jsonObject = SendMsgUtil.httpRequest(url, "GET", "{}");// 获取openid
String access_token = jsonObject.getString("access_token");
return access_token;
} /**
* 获取ticket
*
* @param accessToken
* @return
*/
public static String getJsapiTicket(String accessToken) {
String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken + "&type=jsapi";
JSONObject jsonObject = SendMsgUtil.httpRequest(url, "GET", "{}");
String ticket = jsonObject.getString("ticket");
return ticket;
} public static String geneJSSDKSign(String jsapiTicket, String url) {
Map<String, String> configMap = new HashMap<>(8);
String nonceStr = DateUtil.get32UUIDMilli();
String timestamp = Long.toString(System.currentTimeMillis() / 1000);
configMap.put("noncestr", nonceStr);
configMap.put("jsapi_ticket", jsapiTicket);
configMap.put("timestamp", timestamp);
configMap.put("url", url);
String sign = gengeSign(configMap);//SignUtils.createSign(configMap, "sha1", mechKey, null);
configMap.put("signature",sign);
configMap.remove("noncestr");
configMap.put("nonceStr",nonceStr);
Map result = new HashMap();
result.put("code",1);
result.put("message","OK");
result.put("data",configMap);
return JSON.toJSONString(result);
} public static String gengeSign(Map<String, String> params) {
SortedMap<String, String> sortedMap = new TreeMap<>(params);
StringBuilder toSign = new StringBuilder();
for (String key : sortedMap.keySet()) {
String value = params.get(key);
toSign.append(key).append("=").append(value).append("&");
}
String val = toSign.toString();
val = val.substring(0,val.lastIndexOf("&"));
System.out.println(val);
String digest = SignatureUtil.sha1Encrypt(val);
return digest;
} public static void main(String[] args) {
String time = Long.toString(System.currentTimeMillis() / 1000);
System.out.println(time);
System.out.println(geneJSSDKSign("sdfdsfds", "fdfdfd@@8"));
}
}

最新文章

  1. Visual Studio无法查找或打开 PDB 文件解决办法
  2. bootstrap datetimepicker 中只显示年或者只显示月份
  3. 【BZOJ】1103: [POI2007]大都市meg
  4. Strong TLS configuration on servers
  5. “来用”alpha版使用说明书
  6. DELL R710服务器可以安装的VMWare ESX Server 4.1 全套下载带注册码
  7. Java JPA 查询实体部分字段
  8. Yarn应用程序运行流程剖析
  9. C语言学习——C和Java语言不同点
  10. 分享一套 CodeSmit 代码生成模板。
  11. Android Studio 如何使用jni
  12. WIN7下安装SVNserver端及client搭建协作环境
  13. JavaScript匿名函数入门。
  14. Oracle分析函数-OLAP函数总结
  15. Ubuntu下三种方法设置环境变量
  16. memcache、redis、mongoDB 如何选择?
  17. 【阅读笔记】《C程序员 从校园到职场》第三章 程序的样式(大括号)
  18. Monkey and Banana (hdu 1069)
  19. Go语言之进阶篇 netcat工具的使用
  20. pycharm 使用jupyter notebook 报错:&#39;_xsrf&#39; argument missing from POST

热门文章

  1. 从0到1完成微信小程序开发(2)
  2. 实验3- 熟悉常用的 HBase 操作
  3. P 1021 个位数统计
  4. vs2012(或2013)与虚拟机连调试
  5. C语言预处理理论-宏定义2
  6. C++基础--智能指针
  7. 资源的合并与压缩-html压缩
  8. LeetCode | No.1 两数之和
  9. spring boot redis 缓存(cache)集成
  10. python函数-装饰器