博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信接口 微信分享带图片、标题、描述 JAVA
阅读量:5094 次
发布时间:2019-06-13

本文共 7487 字,大约阅读时间需要 24 分钟。

官方JS-SDK说明文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

1、先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。【备注:登录后可在“开发者中心”查看对应的接口权限。】

2、前台js代码:

  1>、前端页面引入JS:<script src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

  2>、加入下面js

var title = "特朗普结束访华 离开北京";//分享标题var desc = "朗普访华#[美国总统特朗普结束访华]美国总统特朗普10日上午结束对中国的国事访问,乘专机离开北京。";//分享描述var link = "${wechatSign.pageUrl}";//分享链接var imgUrl = "http://n.sinaimg.cn/news/transform/20171110/AvUQ-fynstfh3322960.jpg";//图片图标         $(function(){			wx.config({			      debug: false,			      appId: '${wechatSign.appid}',//公众号appid			      timestamp:'${wechatSign.timestamp}', //生成签名时间戳			      nonceStr:'${wechatSign.noncestr}', //生成签名随机字符串			      signature:'${wechatSign.signature}', //签名			      jsApiList: [			        'checkJsApi',			        'onMenuShareTimeline',			        'onMenuShareAppMessage',			        'onMenuShareQQ',			        'onMenuShareWeibo',			        'onMenuShareQZone'			      ]			  });		});		wx.ready(function () {			wx.onMenuShareTimeline({			    title: title, // 分享标题			    desc: desc, // 分享描述			    link: link, // 分享链接			    imgUrl: imgUrl, // 分享图标			    success: function () { 			        // 用户确认分享后执行的回调函数			        console.log("test");			    },			    cancel: function () { 			        // 用户取消分享后执行的回调函数			    }			});						wx.onMenuShareAppMessage({			    title: title, // 分享标题			    desc: desc, // 分享描述			    link: link, // 分享链接			    imgUrl: imgUrl, // 分享图标			    //type: '', // 分享类型,music、video或link,不填默认为link			    //dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空			    success: function () { 			        // 用户确认分享后执行的回调函数			    	console.log("test");			    },			    cancel: function () { 			        // 用户取消分享后执行的回调函数			    }			});						wx.onMenuShareQQ({			    title: title, // 分享标题			    desc: desc, // 分享描述			    link: link, // 分享链接			    imgUrl: imgUrl, // 分享图标			    success: function () { 			       // 用户确认分享后执行的回调函数			    	console.log("test");			    },			    cancel: function () { 			       // 用户取消分享后执行的回调函数			    }			});						wx.onMenuShareWeibo({			    title: title, // 分享标题			    desc: desc, // 分享描述			    link: link, // 分享链接			    imgUrl: imgUrl, // 分享图标			    success: function () { 			       // 用户确认分享后执行的回调函数			    	console.log("test");			    },			    cancel: function () { 			        // 用户取消分享后执行的回调函数			    }			});						wx.onMenuShareQZone({			    title: title, // 分享标题			    desc: desc, // 分享描述			    link: link, // 分享链接			    imgUrl: imgUrl, // 分享图标			    success: function () { 			       // 用户确认分享后执行的回调函数			    },			    cancel: function () { 			        // 用户取消分享后执行的回调函数			    }			});								})

  

后台代码:

  1>、Controller层

@RequestMapping("/default")public String frontDefault(Model model,HttpServletRequest request){    //获取access_token    String access_token = getWechatService.getAccessTokenOfJssdk();//根据token获取jsapi_ticketString jsapi_ticket = getWechatService.getJsapiTicketOfJssdk(access_token);Long timestamp = new Date().getTime()/1000;			UUID uuid = UUID.randomUUID();			String noncestr=uuid.toString();String param = request.getQueryString();			String pageUrl = request.getRequestURL().toString();			if (param != "" && param != null)			{				pageUrl = pageUrl + "?" + param;			}String signature = "jsapi_ticket="+jsapi_ticket+"&noncestr="+noncestr+"&timestamp="+timestamp+"&url="+pageUrl;signature = getSha1(signature);String appid = "wxd7a6d344bc0c6abc";//公众号appid			Map
wechatSign = new HashMap
(); wechatSign.put("timestamp", timestamp); wechatSign.put("noncestr", noncestr); wechatSign.put("signature", signature); wechatSign.put("appid", appid); wechatSign.put("pageUrl", pageUrl); model.addAttribute("wechatSign", wechatSign);return "/default.html";}//sha1 public String getSha1(String str) { if (null == str || 0 == str.length()){ return null; } char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try { MessageDigest mdTemp = MessageDigest.getInstance("SHA1"); mdTemp.update(str.getBytes("UTF-8")); byte[] md = mdTemp.digest(); int j = md.length; char[] buf = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; buf[k++] = hexDigits[byte0 >>> 4 & 0xf]; buf[k++] = hexDigits[byte0 & 0xf]; } return new String(buf); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; }

  2>、Service层

@Servicepublic class GetWechatServiceImpl  implements GetWechatService{//绑定公众号appid	String appid = "wxd7a6d344bc0c6abc";//绑定公众号secret 	String secret = "29085320d3bd472t29192cd4eecd6166";	@Resource    private GetWechatDao getWechatDao;		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");		@Override	public String getAccessTokenOfJssdk() {		// TODO Auto-generated method stub		String getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret;        //查询数据库,是否存在access_token		List
> tokenJsonList = getWechatDao.selectGlobalAccessToken();        //存在? if(tokenJsonList.size() > 0) { Map
jsonStr = tokenJsonList.get(0); System.out.println("----------"+jsonStr); JSONObject tokenJson = JSONObject.parseObject(JSON.toJSONString(jsonStr));              //获取上次写入token时间 String dateTime = tokenJson.get("validdate").toString(); try { Date validdate = sdf.parse(dateTime);                  //比较与当前时间差 Long times = DateUtil.timeDifference(validdate); if(times <-5400) {//token小于1.5小时,则重新获取 String newTokenStr = new HttpRequestor().doGet(getTokenUrl); JSONObject newTokenJson = JSONObject.parseObject(newTokenStr); String newToken = newTokenJson.getString("access_token"); if(newToken !=null && newToken!="") { //写入数据库 getWechatDao.updateGlobalAccessToken(newToken); return newToken; } }else { return tokenJson.get("value").toString(); } } catch (Exception e) { // TODO: handle exception } } return null; } @Override public String getJsapiTicketOfJssdk(String accessToken) { // TODO Auto-generated method stub String jsapiUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+accessToken+"&type=jsapi"; List
> ticketJsonList = getWechatDao.selectJsapiTicket(); if(ticketJsonList.size() > 0) { Map
jsonStr = ticketJsonList.get(0); JSONObject ticketJson = JSONObject.parseObject(JSON.toJSONString(jsonStr)); String dateTime = ticketJson.get("validdate").toString(); try { Date validdate = sdf.parse(dateTime); Long times = DateUtil.timeDifference(validdate); if(times <-5400) {//token小于1.5小时,则重新获取 System.out.println("----------------------"+jsapiUrl); String newTicketStr = new HttpRequestor().doGet(jsapiUrl); System.out.println("----------------------"+newTicketStr); JSONObject newTicketJson = JSONObject.parseObject(newTicketStr); String newTicket = newTicketJson.getString("ticket"); System.out.println("----------------------"+newTicket); if(newTicket !=null && newTicket!="") { //写入数据库 getWechatDao.updateJsapiTicket(newTicket); return newTicket; } }else { return ticketJson.get("value").toString(); } } catch (Exception e) { // TODO: handle exception } } return null; }}

  

 

转载于:https://www.cnblogs.com/vmumu/p/7814702.html

你可能感兴趣的文章
(转)linux sort,uniq,cut,wc命令详解
查看>>
关于ExecuteNonQuery执行的返回值(SQL语句、存储过程)
查看>>
UVa540 Team Queue(队列queue)
查看>>
Screening technology proved cost effective deal
查看>>
【POJ2699】The Maximum Number of Strong Kings(网络流)
查看>>
spring boot配置跨域
查看>>
BZOJ 1996 合唱队(DP)
查看>>
进击吧!阶乘——大数乘法
查看>>
安卓学习资料推荐-25
查看>>
Mysql数据库备份和还原常用的命令
查看>>
关于退出当前页面在火狐的一些问题
查看>>
【项目实施】项目考核标准
查看>>
spring-aop AnnotationAwareAspectJAutoProxyCreator类
查看>>
经典入门_排序
查看>>
Redis Cluster高可用集群在线迁移操作记录【转】
查看>>
二、spring中装配bean
查看>>
VIM工具
查看>>
javascript闭包
查看>>
创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备...
查看>>
mysql8.0.13下载与安装图文教程
查看>>