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