微信分享後臺功能處理:
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; } }