微信分享后台功能处理:
1、获取微信jsapi_ticket,以及加密的基础类
2、因为sapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket。
Map<String,String> shareContent = new HashMap<String, String>(); shareContent.put("title","我申请了免费试用");//分享的title shareContent.put("link","www.baidu.com");//分享的链接 shareContent.put("imgUrl","http://img.xxx.com/shop/images/201610/466_G_1476655499133.png");//分享的图标 url = "http://beta.weixin.xxx.com/xx.html";//当前的页面地址,测试地址,正式得获取当前的url String appId = wxConfig.getAppid();//公众号的appId ModuleRedisWeiXinPrefix.Prefix prefix = ModuleRedisWeiXinPrefix.Prefix.JSAPITICKET; String jsApiTicket = redisSession.get(prefix.getCode()); if (StringUtils.isEmpty(jsApiTicket)){ WXAccount wxAccount = storeService.getWXAccountFromAppId(appId); JSONObject jsonObject = publicJsapiTicketAPI.getJsapiTicket(wxAccount); jsApiTicket = (String)jsonObject.get("ticket"); redisSession.set(prefix.getCode(),jsApiTicket,prefix.getTime());//把jsApiTicket存缓存 } Map<String,String> signMap = PublicJsapiTicketAPI.sign(jsApiTicket, url); signMap.put("appId",appId); model.addAttribute("signMap", signMap); model.addAttribute("shareContent",shareContent);
微信分享前台处理:
业务需求:分享后台设置的特定的分享链接,分享标题,分享图标到朋友圈。
结合微信JS-SDK文档:
1、在微信的公众号管理平台进行设置,进行了的设置后,才能改域名下进行微信开发的JS接口调用:
2、在需要调用微信JS的页面引入下面的js文件:
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
3、
该文中涉及的工具类如下:
import com.thoughtworks.xstream.XStream; import java.io.IOException; import java.text.ParseException; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class WeixinUtil { @Autowired WeixinConfig weixinConfig; public WeixinUtil() { } public static Integer hasWxError(JSONObject jsonObject) { Object o = jsonObject.get("errcode"); if(o != null && NumberUtil.isNumber(o.toString())) { Integer errorCode = Integer.valueOf(Integer.parseInt(o.toString())); return errorCode.intValue() == 0?null:errorCode; } else { return null; } } public static JSONObject doGetStr(String url) throws ParseException { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(url); JSONObject jsonObject = null; try { CloseableHttpResponse e = httpClient.execute(httpGet); HttpEntity entity = e.getEntity(); if(entity != null) { String result = EntityUtils.toString(entity, "UTF-8"); jsonObject = JSONObject.fromObject(result); } } catch (Exception var15) { var15.printStackTrace(); } finally { httpGet.abort(); try { httpClient.close(); } catch (IOException var14) { var14.printStackTrace(); } } return jsonObject; } public static String doPostStr(String outStr, String url) { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new StringEntity(outStr, "UTF-8")); String result = null; try { CloseableHttpResponse e = httpClient.execute(httpPost); result = EntityUtils.toString(e.getEntity(), "UTF-8"); } catch (Exception var14) { var14.printStackTrace(); } finally { httpPost.abort(); try { httpClient.close(); } catch (IOException var13) { var13.printStackTrace(); } } return result; } }