1、获取AccessToken
2、获取 JsApiTicket
3、根据 ticket 和 要分享的页面url地址去签名
import cn.hutool.setting.dialect.Props;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class WXShareUtil {
private static Props props = new Props("wei-xin.properties", "utf-8");
private static String appId = props.getStr("app_id");
public static Map<String, Object> sign(String jsapi_ticket,String url) {
Map<String, Object> ret = new HashMap<String, Object>();
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);
ret.put("appid",appId);
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);
}
}
4、调用
// 根据你的实际情况获取accessToken 和 jsApi_ticket
//获取accessToken
String accessToken = WXRedisParam.getAccessToken(app_id,appSecret);
//获取jsApi_ticket
String ticket = WXRedisParam.getJsApiTicket(accessToken,app_id);
Map<String, Object> sign = WXShareUtil.sign(ticket,url);
String link = WeChatCode.links_start+userId+","+goodId+ WeChatCode.links_end;
//link = WXUtils.longToShort(link);//获取微信短链接
JSONObject object = new JSONObject();
object.put("sign",sign);
object.put("url",link);
object.put("img",good.getPic());
object.put("title",good.getTitle());
object.put("desc",good.getAccount());
return object;