微信分享功能开发

1.H5页面配置

(1)引入微信JS SDK

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

(2)在js里配置接口参数

wx.config({
		debug : false,//这里是开启测试,如果设置为true,则打开每个步骤,都会有提示,是否成功或者失败 
		appId : '${appid}',
		timestamp : '${timestamp}',
		nonceStr : '${nonceStr}',
		signature : '${signature}',
		jsApiList : [
		// 所有要调用的 API 都要加到这个列表中 
		'onMenuShareTimeline',"onMenuShareAppMessage","onMenuShareQQ","hideMenuItems"]
	});

	var strTiele="";
	var strDesc="";
	var strLink="url";
	var strImgUrl="图片路径";
	wx.ready(function() {
		// 1 判断当前版本是否支持指定 JS 接口,支持批量判断
		wx.checkJsApi({
			jsApiList : ['"hideMenuItems"','onMenuShareTimeline','onMenuShareAppMessage',"onMenuShareQQ"],
			
		});
		
		//隐藏QQ空间分享,QQ浏览器,safari
		wx.hideMenuItems({
			menuList: ["menuItem:share:QZone","menuItem:openWithSafari","menuItem:openWithQQBrowser"] 
		});
		
		//分享朋友圈
		wx.onMenuShareTimeline({
			title : strTiele, // 分享标题 
			 desc : strDesc,//分享描述
			 link : strLink, // 分享链接 
			imgUrl: strImgUrl,// 分享图标 
			
		});
		
		//分享给微信好友
		wx.onMenuShareAppMessage({
			title : strTiele, // 分享标题 
			 desc : strDesc,//分享描述
			 link : strLink, // 分享链接 
			imgUrl: strImgUrl,// 分享图标 
		});
		
		//分享到QQ
		wx.onMenuShareQQ({
			title : strTiele, // 分享标题 
			 desc : strDesc,//分享描述
			 link : strLink, // 分享链接 
			imgUrl: strImgUrl,// 分享图标 
		});

 2.ACTION 类设置

  

String params = PastUtil.getParam("wx05a97b02437b983d","2a5ea68d9679b0de1ad09de72e4159fe");
		
		JSONObject jsonObject = new JSONObject(params);
		this.setResult("appid", jsonObject.get("appid"));
		this.setResult("url", jsonObject.get("url"));
		this.setResult("jsapi_ticket", jsonObject.get("jsapi_ticket"));
		this.setResult("timestamp", jsonObject.get("timestamp"));
		this.setResult("nonceStr", jsonObject.get("nonceStr"));
		this.setResult("signature", jsonObject.get("signature"));

Pastutil 类

  
public class PastUtil {
    public static String token = null;
    public static String time = null;
    public static String jsapi_ticket = null;
    public static String url = null ;
    /**
     * 
     * @param appId   公账号appId
     * @param appSecret
     * @param url    当前网页的URL,不包含#及其后面部分
     * @return
     */
    public static String getParam(String appId,String appSecret){
        if(token == null){
            token = CommonUtil.getToken(appId, appSecret);
            jsapi_ticket = CommonUtil.getJsApiTicket(token);
            time = getTime();
        }else{
            if(!time.substring(0, 13).equals(getTime().substring(0, 13))){ //每小时刷新一次
                token = null;
                token = CommonUtil.getToken(appId, appSecret);
                jsapi_ticket = CommonUtil.getJsApiTicket(token);
                time = getTime();
            }
        }
          
        String url = getUrl();
          
        Map<String, String> params = sign(jsapi_ticket, url);
        params.put("appid", appId);
          
        JSONObject jsonObject = JSONObject.fromObject(params);  
        String jsonStr = jsonObject.toString();
        System.out.println(jsonStr);
        return jsonStr;
    }
      
    private static String getUrl(){
    	HttpServletRequest request = ActionContext.getActionContext().getRequest();   
        //StringBuffer requestUrl = request.getRequestURL();
    	
    	
    	System.out.println(request.getServerName());
    	//如果你的微信后台端口是80的话,一定不能把HTTP_HOST也拼接到url上面去,否则签名失败       
		String share2FirendUrl = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ request.getRequestURI();
		System.out.println(share2FirendUrl);
		
		//带参数的url拼接
		if(StringUtils.isNotBlank(request.getQueryString())){
			share2FirendUrl +=  "?"+request.getQueryString();
		}
		System.out.println("share2FirendUrl

"+share2FirendUrl+"

");
        return share2FirendUrl;
    }
      
    public static Map<String, String> sign(String jsapi_ticket, String url) {
        Map<String, String> ret = new HashMap<String, String>();
        String nonce_str = create_nonce_str();
        String timestamp = create_timestamp();
        String str;
        String signature = "";
  
        //注意这里参数名必须全部小写,且必须有序
        str = "jsapi_ticket=" + jsapi_ticket +
                  "&noncestr=" + nonce_str +
                  "&timestamp=" + timestamp +
                  "&url=" + url;
  
        try
        {
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
            crypt.reset();
            crypt.update(str.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);
  
        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;
    }
  
    private static String create_nonce_str() {
        return UUID.randomUUID().toString();
    }
  
    private static String create_timestamp() {
        return Long.toString(System.currentTimeMillis() / 1000);
    }
      
    //获取当前系统时间 用来判断access_token是否过期
    public static String getTime(){
        Date dt=new Date();
        SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(dt);
    }
    
    public static void main(String[] args){
    	PastUtil.url = "http://m.e7560.com/" ;
    	System.out.println(getParam("wx973e01320ce8ebb6","1f7f1ac16dfaf7bd6e087b3831e1bbe2"));
    }
}

  

原文地址:https://www.cnblogs.com/jianlun/p/5485622.html