实操网站新闻分享微信显示缩略图

微信文档参考地址:概述 | 微信开放文档

实现网站新闻分享微信显示缩略图准备工作:

  • 准备备案的域名
  • 准备公众号
  • 配置公众号  ip白名单、js安全域名、开启secret

前端代码:


<script type="text/javascript" src="<%=path %>/skin/jquery.js"></script>
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

<script type="text/javascript">
var url=location.href.split('#')[0];
//url=encodeURIComponent(url2);
alert(url);
var imgurl=$('.cjContent').find("img").eq(0).attr("src");
if(imgurl){
	imgurl="http://你的域名"+imgurl;
}else{
	imgurl="http://你的域名/r/cms/www/bzrmyy/img/rmlogo.png";
}

$(function(){
  getData(url);
})

function  getData(url){
	
	 $.ajax({
	        type : "GET",
	        url : "http://你的域名/rmyyjk/user/getData?url="+url,
	        dataType: "json",
	        success : function(data){
	        	if(data!=null){
	        		 wx.config({
	 	                debug: true,
	 	                appId: data.appid,
	 	                timestamp: data.timestamp,
	 	                nonceStr: data.nonceStr,
	 	                signature: data.signature,
	 	                jsApiList: [
	 	                    'updateAppMessageShareData',//
	 	                    'updateTimelineShareData',
	 	                    'onMenuShareWeibo',
	 	                    'onMenuShareQZone'
	 	 
	 	                ]
	 	            });
	        		
	        	}
	           
	        },
	        error:function(data){
	            alert("连接失败!");
	        }
	    });
	
}

wx.ready(function () {
    var shareData = {
        title: document.title,
        desc:document.title,
        link: url,
        imgUrl: imgurl
    };

    wx.updateAppMessageShareData(shareData);//分享给朋友”及“分享到QQ
    wx.updateTimelineShareData(shareData);//自定义“分享到朋友圈”及“分享到QQ空间
    wx.onMenuShareWeibo(shareData);//分享给微博
    wx.onMenuShareQZone(shareData);//分享qq空间

});
wx.error(function (res) {
    alert(res.errMsg);//错误提示 
});
</script>

后台代码:

@RequestMapping(value="/getData")
@ResponseBody
public Map<String, String> getData(HttpServletRequest req,HttpServletResponse response) throws IOException{
			 
			 response.setHeader("Access-Control-Allow-Origin", "*");
			 
			 String url = req.getParameter("url");
			 if ( url==null || "".equals(url) ) {
				 return null;
			 }
			 
			 /*1.获取access_token   有效期7200秒
			    参数	是否必须	说明
			 grant_type	是	获取access_token填写client_credential
			 appid	是	第三方用户唯一凭证
			 secret	是	第三方用户唯一凭证密钥,即appsecret
			 */
			 String appid="填写你的appid";
			 String secret ="填写你的secret";
			 
			 String token="";
			 
			 String ticket="";
			 
			 Object access_token = req.getSession().getAttribute("access_token");
			 if(access_token==null || "".equals(access_token)) {
				 String dataToken =  OkhttpUtils.sendGet("https://api.weixin.qq.com/cgi-bin/token?",appid , secret);
				 JSONObject  jsonObject = JSON.parseObject(dataToken);
				 
				 if(jsonObject!=null) {
					 token = jsonObject.get("access_token").toString();
					 req.getSession().setAttribute("access_token", token);
					 req.getSession().setMaxInactiveInterval(7000);
				 }
			 }else {
				 token = access_token.toString();
			 }
			 
			 //2.使用access_token  采用http GET方式请求获得jsapi_ticket
			 Object ticket_session = req.getSession().getAttribute("ticket_session");
			 if(ticket_session==null || "".equals(ticket_session)) {
				 
				 String dataTicket =  OkhttpUtils.sendGetByToken("https://api.weixin.qq.com/cgi-bin/ticket/getticket?", token);
				 JSONObject  jsonObject = JSON.parseObject(dataTicket);
				 
				 if(jsonObject!=null) {
					 ticket = jsonObject.get("ticket").toString();
					 req.getSession().setAttribute("ticket_session", ticket);
					 req.getSession().setMaxInactiveInterval(7000);
				 }
				 
			 }else {
				 ticket = ticket_session.toString();
			 }
			 
			 //3.获取签名
			 Map<String, String> map = OkhttpUtils.sign(ticket, url, appid);
			 
			 if(map!=null) {
				 return map;
			 }
			 
			 return null;
			 
			 
			 
		 }

Okhttp需要的jar包:

链接: https://pan.baidu.com/s/1LvahpG_gezZu7vvEcX_zkw?pwd=pcva 提取码: pcva 

OkhttpUtils类:

package com.ssm;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.JSON;

import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;


/**
 * okhttp  get post 请求
 * @author Administrator
 *
 */
public class OkhttpUtils {
	
	//获取token
	public static String sendGet(String url, String appid, String secret) throws IOException {
		OkHttpClient client = new OkHttpClient().newBuilder().build();
		StringBuilder req = new StringBuilder();
		req.append(url);
		req.append("grant_type=client_credential").append("&");
		req.append("appid="+appid).append("&");
		req.append("secret="+secret).append("&");
		Request request = new Request.Builder()
		        .url(req.toString())
		        .method("GET", null)
		        .build();
		Response response = client.newCall(request).execute();
		return response.body().string();
 }
	
	
	//根据token获取 ticket
	public static String sendGetByToken(String url, String access_token) throws IOException {
		OkHttpClient client = new OkHttpClient().newBuilder().build();
		StringBuilder req = new StringBuilder();
		req.append(url);
		req.append("access_token="+access_token).append("&");
		req.append("type=jsapi").append("&");
		Request request = new Request.Builder()
		        .url(req.toString())
		        .method("GET", null)
		        .build();
		Response response = client.newCall(request).execute();
		return response.body().string();
 }
	
public static String sendPost(String url, String access_token) throws IOException {
	
        OkHttpClient client = new OkHttpClient().newBuilder().build();
	    MediaType mediaType = MediaType.parse("application/json;charset=utf-8");
	    RequestBody body = RequestBody.create(mediaType,"");
	    Request request = new Request.Builder()
	            .url(url)
	            .addHeader("Authorization","Bearer "+access_token)
	            .addHeader("Content-Type", "application/json")
	            .method("POST", body)
	            .build();
	    Response response = client.newCall(request).execute();
	    return response.body().string();
}

//获取签名
public static Map<String, String> sign(String jsapi_ticket, String url,String appid) {
	Map<String, String> ret = new HashMap<String, String>();
	String nonce_str = "sjzfcstring";
	long timestamp =  System.currentTimeMillis() / 1000;
	String string1;
	String signature = "";

	// 注意这里参数名必须全部小写,且必须有序
	string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "&timestamp=" + timestamp + "&url=" + url;
	System.out.println(string1);

	try {
		MessageDigest crypt = MessageDigest.getInstance("SHA-1");
		crypt.reset();
		crypt.update(string1.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);
	ret.put("appid",appid);

	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;
}


}

效果查看:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
公众号是微信平台上的一个功能,用户可以注册并创建自己的公众号,用于发布文章、资讯、图片等内容。在公众号中,用户可以将自己喜欢的网页内容进行分享,并且可以缩略图。 首先,用户可以在浏览器上打开自己喜欢的网页,在网页中找到分享按钮,点击分享按钮会弹出分享页面。然后,用户可以选择通过微信进行分享。在选择微信分享之后,用户可以选择要分享的方式,可以分享给好友、分享到朋友圈或者分享到公众号。 在选择分享到公众号之后,用户会跳转到微信中,可以在微信中选择自己创建的公众号账号进行分享。用户可以在公众号中编辑分享的标题和描述,同时也可以选择网页缩略图缩略图可以通过自动获取网页中的图片,或者手动选择适合的图片。 当用户编辑完分享的标题、描述和缩略图之后,可以点击确定按钮进行发布。发布完成后,该网页缩略图会展示在公众号文章的封面中。其他用户在浏览公众号文章时,会看到缩略图和标题,从而吸引用户的注意力。 通过网页分享微信缩略图的功能,用户可以将自己喜欢的网页内容分享给朋友、朋友圈或者公众号的粉丝,从而让更多的人了解和获得这些内容。同时,缩略图分享可以更加直观地展示网页的内容,提高用户点击和阅读的可能性。这样的功能对于推广和传播网页内容非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yjm2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值