1.H5页面配置
(1)引入微信JS SDK
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
(2)在js里配置接口参数
wx.config({ debug : false,//这里是开启测试,如果设置为true,则打开每个步骤,都会有提示,是否成功或者失败 appId : ‘${appid}‘, timestamp : ‘${timestamp}‘, nonceStr : ‘${nonceStr}‘, signature : ‘${signature}‘, jsApiList : [ // 所有要调用的 API 都要加到这个列表中 ‘onMenuShareTimeline‘,"onMenuShareAppMessage","onMenuShareQQ","hideMenuItems"] }); var strTiele=""; var strDesc=""; var strLink="url"; var strImgUrl="图片路径"; wx.ready(function() { // 1 判断当前版本是否支持指定 JS 接口,支持批量判断 wx.checkJsApi({ jsApiList : [‘"hideMenuItems"‘,‘onMenuShareTimeline‘,‘onMenuShareAppMessage‘,"onMenuShareQQ"], }); //隐藏QQ空间分享,QQ浏览器,safari wx.hideMenuItems({ menuList: ["menuItem:share:QZone","menuItem:openWithSafari","menuItem:openWithQQBrowser"] }); //分享朋友圈 wx.onMenuShareTimeline({ title : strTiele, // 分享标题 desc : strDesc,//分享描述 link : strLink, // 分享链接 imgUrl: strImgUrl,// 分享图标 }); //分享给微信好友 wx.onMenuShareAppMessage({ title : strTiele, // 分享标题 desc : strDesc,//分享描述 link : strLink, // 分享链接 imgUrl: strImgUrl,// 分享图标 }); //分享到QQ wx.onMenuShareQQ({ title : strTiele, // 分享标题 desc : strDesc,//分享描述 link : strLink, // 分享链接 imgUrl: strImgUrl,// 分享图标 });
2.ACTION 类设置
String params = PastUtil.getParam("wx05a97b02437b983d","2a5ea68d9679b0de1ad09de72e4159fe"); JSONObject jsonObject = new JSONObject(params); this.setResult("appid", jsonObject.get("appid")); this.setResult("url", jsonObject.get("url")); this.setResult("jsapi_ticket", jsonObject.get("jsapi_ticket")); this.setResult("timestamp", jsonObject.get("timestamp")); this.setResult("nonceStr", jsonObject.get("nonceStr")); this.setResult("signature", jsonObject.get("signature"));
Pastutil 类
public class PastUtil { public static String token = null; public static String time = null; public static String jsapi_ticket = null; public static String url = null ; /** * * @param appId 公账号appId * @param appSecret * @param url 当前网页的URL,不包含#及其后面部分 * @return */ public static String getParam(String appId,String appSecret){ if(token == null){ token = CommonUtil.getToken(appId, appSecret); jsapi_ticket = CommonUtil.getJsApiTicket(token); time = getTime(); }else{ if(!time.substring(0, 13).equals(getTime().substring(0, 13))){ //每小时刷新一次 token = null; token = CommonUtil.getToken(appId, appSecret); jsapi_ticket = CommonUtil.getJsApiTicket(token); time = getTime(); } } String url = getUrl(); Map<String, String> params = sign(jsapi_ticket, url); params.put("appid", appId); JSONObject jsonObject = JSONObject.fromObject(params); String jsonStr = jsonObject.toString(); System.out.println(jsonStr); return jsonStr; } private static String getUrl(){ HttpServletRequest request = ActionContext.getActionContext().getRequest(); //StringBuffer requestUrl = request.getRequestURL(); System.out.println(request.getServerName()); //如果你的微信后台端口是80的话,一定不能把HTTP_HOST也拼接到url上面去,否则签名失败 String share2FirendUrl = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ request.getRequestURI(); System.out.println(share2FirendUrl); //带参数的url拼接 if(StringUtils.isNotBlank(request.getQueryString())){ share2FirendUrl += "?"+request.getQueryString(); } System.out.println("share2FirendUrl\n\n"+share2FirendUrl+"\n\n"); return share2FirendUrl; } 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 str; String signature = ""; //注意这里参数名必须全部小写,且必须有序 str = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "×tamp=" + timestamp + "&url=" + url; try { MessageDigest crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); crypt.update(str.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); } //获取当前系统时间 用来判断access_token是否过期 public static String getTime(){ Date dt=new Date(); SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(dt); } public static void main(String[] args){ PastUtil.url = "http://m.e7560.com/" ; System.out.println(getParam("wx973e01320ce8ebb6","1f7f1ac16dfaf7bd6e087b3831e1bbe2")); } }
时间: 2024-10-09 22:24:21