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"));
}
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· 软件产品开发中常见的10个问题及处理方法
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· MQ 如何保证数据一致性?
· 《HelloGitHub》第 108 期