微信公众号 sign类
2024-08-30 01:51:04
微信公众号
Sign
import java.util.UUID;
import java.util.Map;
import java.util.HashMap;
import java.util.Formatter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException; class Sign {
public static void main(String[] args) {
String jsapi_ticket = "jsapi_ticket"; // 注意 URL 一定要动态获取,不能 hardcode
String url = "http://example.com";
Map<String, String> ret = sign(jsapi_ticket, url);
for (Map.Entry entry : ret.entrySet()) {
System.out.println(entry.getKey() + ", " + entry.getValue());
}
}; public static Map<String, String> sign(String jsapi_ticket, String url) {
Map<String, String> ret = new HashMap<String, String>();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String string1;
String signature = ""; //注意这里参数名必须全部小写,且必须有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"×tamp=" + timestamp +
"&url=" + url;
System.out.println(string1); try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
} ret.put("url", url);
ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature); return ret;
} private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
} private static String create_nonce_str() {
return UUID.randomUUID().toString();
} private static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
}
最新文章
- JavaScript随笔7
- 高效 Java Web 开发框架 JessMA v3.5.1
- Java内存模型深度解析:基础部分--转
- VA01复制单据,更新定价日期和价格
- CentOS 7下Wireshark捕获USB数据包
- callsession新功能版
- DFS与BFS
- 封装js千分位加逗号和删除逗号
- APICloud界面间跳转
- Java 并发 – 线程安全?
- Use Select To Generate Any Insert/Delete/Update Statement
- python基础的输入字符串的格式化
- 微信小程序:wx.request之post请求后端无法获取数据的问题
- solr与Elasticsearch对比
- Java多线程之原子性 volatile、atomicInteger测试
- 开始写博客,学习Linq(4)
- AppStore企业账号打包发布APP流程详解
- new~mac os 给终端命令写alias(及其他常用命令)及软连接
- Python资料收藏(杂乱版)
- UML入门 之 交互图 -- 时序图 协作图详解
热门文章
- shit layui &; select &; re-render &; bug
- POJ 1679 判最小生成树的不唯一性 或 利用次小生成树求解
- [codevs4655] 序列终结者(Splay)
- [K/3Cloud] 使用操作还是服务
- [NOIP2005] 普及组 循环
- Ubuntu12.04之vi的问题
- SVG :可缩放矢量图形(Scalable Vector Graphics)。
- tplink wr886n v5.0 ttl 接线方法
- 集成学习(ensemble method)--基于树模型
- 如何快速掌握plc或工控机与其他设备的modbus通讯协议?包括格式与实际过程 RT,本人从事工控行业多年,对于PLC与触摸屏也算比较熟悉,唯独对这个通讯协议比较难理解,请教高人指导,从什么地方开始下手,或者是说如何正确理解报文格式或正确写入