打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
微信分享转发实现
1、登录微信服务号,打开公众号设置-》功能设置,设置JS接口安全域名open.com

2、Controller端:
@RequestMapping(value = "/open/newFund")
public String newFund(ModelMap model, HttpServletRequest request) throws Exception {
String noncestr = WeiXinUtils.getRandomString(16);
String timestamp = WeiXinUtils.getTimeStamp();
String url = WeiXinUtils.getRequestURL(request);
String signature = WeiXinUtils.getShaSignature(request, url, noncestr, timestamp);
model.put("appid", WeiXinUtils.appid);
model.put("nonceStr", noncestr);
model.put("timestamp", timestamp);
model.put("signature", signature);
return "/minisite/activity/newFund.jsp";
}


WeiXinUtils.java:
public class WeiXinUtils {
private static Logger logger = Logger.getLogger(WeiXinUtils.class);

public static final String appid = "wxb38d79ca8d70ad03";
public static final String baseUrl = "http://open.yilucaifu.com";
public static String getTimeStamp(){
String timestamp = System.currentTimeMillis() + "";
timestamp = timestamp.substring(0, timestamp.length()-3);
return timestamp;
}
public static String getJsApi_Ticket() throws Exception {
String JsApi_Ticket = null;
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"https://api.weixin.qq.com/cgi-bin/token");
StringEntity reqEntity = new StringEntity(
"grant_type=client_credential&appid=wxb38d79ca8d70ad03&secret=33fea7473064ca0fcfb7e4b0876dba0c");
httppost.setEntity(reqEntity);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
if (entity != null) {
System.out.println("Response content length: "
+ entity.getContentLength());
}
// 显示结果
BufferedReader reader = new BufferedReader(new InputStreamReader(
entity.getContent(), "UTF-8"));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
JSONObject jb = JSONObject.fromObject(line);
if (jb.containsKey("access_token")) {
String access_token = jb.getString("access_token");
HttpPost httppost2 = new HttpPost(
"https://api.weixin.qq.com/cgi-bin/ticket/getticket");
StringEntity reqEntity2 = new StringEntity("access_token="
+ access_token + "&type=jsapi");
httppost2.setEntity(reqEntity2);
// 执行
HttpResponse response2 = httpclient.execute(httppost2);
HttpEntity entity2 = response2.getEntity();
System.out.println("----------------------------------------");
System.out.println(response2.getStatusLine());
if (entity2 != null) {
System.out.println("Response content length: "
+ entity2.getContentLength());
}
// 显示结果
BufferedReader reader2 = new BufferedReader(
new InputStreamReader(entity2.getContent(), "UTF-8"));
String line2 = null;
while ((line2 = reader2.readLine()) != null) {
JSONObject jb2 = JSONObject.fromObject(line2);
System.out.println(line2);
if (jb2.containsKey("ticket")) {
JsApi_Ticket = jb2.getString("ticket");
}
}
if (entity2 != null) {
entity2.consumeContent();
}
}
}
if (entity != null) {
entity.consumeContent();
}
return JsApi_Ticket;
}

public static String getShaSignature(HttpServletRequest request,
String url, String noncestr, String timestamp) throws Exception {
String jsApi_Ticket = (String) request.getSession().getServletContext()
.getAttribute("jsApi_Ticket");
Date jsApi_Ticket_Time = (Date) request.getSession()
.getServletContext().getAttribute("jsApi_Ticket_Time");
if (jsApi_Ticket_Time == null
|| (DateUtils.diffTime(new Date(), jsApi_Ticket_Time) > (3600 * 1000))) {
jsApi_Ticket = getJsApi_Ticket();
request.getSession().getServletContext()
.setAttribute("jsApi_Ticket", jsApi_Ticket);
request.getSession().getServletContext()
.setAttribute("jsApi_Ticket_Time", new Date());
// logger.error("时间=" + DateUtils.getNowDate() + "jsApi_Ticket=" +
// jsApi_Ticket);
}
String data = "jsapi_ticket=" + jsApi_Ticket + "&noncestr=" + noncestr
+ "&timestamp=" + timestamp + "&url=" + url;
System.out.println("date=" + data);
String digest = new SHA1().getDigestOfString(data.getBytes());
return digest.toLowerCase();
}

public static String getRandomString(int length) {
String base = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}

public static String getRequestURL(HttpServletRequest request) {
if (request == null) {
return "";
}
String url = baseUrl + request.getServletPath();

java.util.Enumeration names = request.getParameterNames();
int i = 0;
if (!"".equals(request.getQueryString())
&& request.getQueryString() != null) {
url = url + "?" + request.getQueryString();
}

// if (names != null) {
// while (names.hasMoreElements()) {
// String name = (String) names.nextElement();
// if (i == 0) {
// url = url + "?";
// } else {
// url = url + "&";
// }
// i++;
//
// String value = request.getParameter(name);
// if (value == null) {
// value = "";
// }
//
// url = url + name + "=" + value;
// try {
// // java.net.URLEncoder.encode(url, "ISO-8859");
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// }

if(url.contains("#")){
url = url.substring(0, url.indexOf("#"));
}
logger.info("url=" + url);
return url;
}

}


JSP端:
<script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
wx.config({
       debug: true,
       appId: "${appid}",//"wxb38d79ca8d70ad03",
       timestamp: "${timestamp}",//"1423929600",
       nonceStr: "${nonceStr}",//"DArR9zORKGhde7AS",
       signature: "${signature}",//"6e5d8917a53a3e2e57f31192b36bfea38cc8b46f",
       jsApiList: [
           'onMenuShareTimeline',
           'onMenuShareAppMessage'
       ]
   });
   wx.ready(function () {
       wx.onMenuShareTimeline({
        desc : '',
        title : '新起点,新生活,新基金,“投资”就是选择我想要的生活。',
           link: 'http://open.com/activity/open/newFund.html',
           imgUrl: 'http://a.yilucaifu.com/public/fund/images/newFund.png',
           trigger: function (res) {
               //alert('用户点击分享到朋友圈');
           },
           success: function (res) {
               //alert('已分享');
           },
           cancel: function (res) {
               //alert('已取消');
           },
           fail: function (res) {
              // alert('wx.onMenuShareTimeline:fail: '+JSON.stringify(res));
           }
       });
       wx.onMenuShareAppMessage({
        title : '新起点,新生活,新基金',
        desc : '“投资”就是选择我想要的生活。',
           link: 'http://open.com/activity/open/newFund.html',
           imgUrl: 'http://a.yilucaifu.com/public/fund/images/newFund.png',
           trigger: function (res) {
               //alert('用户点击分享到朋友圈');
           },
           success: function (res) {
               //alert('已分享');
           },
           cancel: function (res) {
               //alert('已取消');
           },
           fail: function (res) {
              // alert('wx.onMenuShareTimeline:fail: '+JSON.stringify(res));
           }
       });
   });
</script>


注:微信 JS 接口签名校验工具:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
钉钉实现企业级微应用免登陆详解
ASP.NET MVC 微信JS-SDK认证
Flask 微信卡券小项目:从开发到上线
微信开发(六)微信分享接入
微信公众平台jsapi开发教程
httpClient基础
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服