版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36187544/article/details/80266919
为了实现微信分享时自定义图片和文字,耗费了不少心力,把JSSDK翻了个底朝天
首先我们来看一下微信开发给我们的样例文件:
importjava.util.UUID;importjava.util.Map;importjava.util.HashMap;importjava.util.Formatter;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importjava.io.UnsupportedEncodingException;classSign {public static voidmain(String[] args) {
String jsapi_ticket= "jsapi_ticket";//注意 URL 一定要动态获取,不能 hardcode
String url = "http://example.com";
Map ret =sign(jsapi_ticket, url);for(Map.Entry entry : ret.entrySet()) {
System.out.println(entry.getKey()+ ", " +entry.getValue());
}
};public static Mapsign(String jsapi_ticket, String url) {
Map ret = new HashMap();
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);returnret;
}private static String byteToHex(final byte[] hash) {
Formatter formatter= newFormatter();for (byteb : hash)
{
formatter.format("%02x", b);
}
String result=formatter.toString();
formatter.close();returnresult;
}private staticString create_nonce_str() {returnUUID.randomUUID().toString();
}private staticString create_timestamp() {return Long.toString(System.currentTimeMillis() / 1000);
}
}
且附带了一个txt告诉我们“需要开发者传入 jsapi_ticket 和 url”,但是坑来了:
1.用在自己程序里时一定要删除public static void main(String[] args) {}这个主函数(有点基础的人都懂,这是小问题)
2.该例子返回的是一个map值,但是这个map值是缺少东西的,在map里面加上:
ret.put("appId", appId);
//当然这个APPID是需要获取的(每个人获取方式不一样&#