JAVA版 微信js-sdk接口调用demo

可视化编辑器,alt+1到9键,切换到工具区,tab键,选择按钮,esc键,返回编辑 工具类代码在底部

第一步:获得access_token代码如下(由于token每日有请求上限,建议放到memcache/redis)
	Map<String,String> map = new HashMap<String,String>();
	map.put("grant_type","client_credential");
	map.put("appid","7654321");
	map.put("secret","1234567");
	
	String returnStr = HttpUtil.doGet("https://api.weixin.qq.com/cgi-bin/token",map);
	JSONObject json = JSONObject.fromObject(returnStr);
	String accessToken = json.getString("token");
第二步:根据token获得js临时票据(有效时间7200秒,可以放到memcache)
	Map<String,String> map = new HashMap<String,String>();<pre class="java" name="code">	map.put("access_token","7654321");
	map.put("type","jsapi");

	String returnStr = HttpUtil.doGet("https://api.weixin.qq.com/cgi-bin/ticket/getticket",map);<pre class="java" name="code">	JSONObject json = JSONObject.fromObject(returnStr);
	String ticket= json.getString("ticket");

第三步:对密钥进行sha1加密
	long time = System.currentTimeMillis()/1000;
   	String randomStr = StringUtils.right(String.valueOf(System.currentTimeMillis()), 10);
	//特别注意的是调用微信js,url必须是当前页面(转发的不行)
 	String str = "jsapi_ticket="+ticket+"&noncestr="+randomStr+"×tamp="+time+"&url=http://www.baidu.com";

	String signature = EncryptUtil.sha1Encrypt(str);
第四步:进行配置(页面)
	<script type="text/javascript" src="<a target=_blank href="http://res.wx.qq.com/open/js/jweixin-1.0.0.js'></script>//">http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>//引入js</a>-sdk
	<script type="text/javascript">
	 wx.config({
     		debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    		appId: '', // 必填,公众号的唯一标识
     		timestamp: <%=time%>, // 必填,生成签名的时间戳
     		nonceStr: '<%=randomStr%>', // 必填,生成签名的随机串
     		signature: '<%=signature%>',// 必填,签名,见附录1
     		jsApiList: ['onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
 	});
	wx.ready(function(){
 	 	wx.onMenuShareAppMessage({
      		title: '年终免费抽奖来袭!离iPhone只有一步之遥!', // 分享标题
     	 	desc: '通话时长--免费!景点门票---免费!打车券--免费!iPhone--当然免费!', // 分享描述
      		link: 'http://www.baidu.com', // 分享链接
      		imgUrl: '', // 分享图标
     		type: 'link', // 分享类型,music、video或link,不填默认为link
      		dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
      		success: function () { 
          	     // 用户确认分享后执行的回调函数
          	     alert("分享成功");
      		},
      		cancel: function () { 
          	     // 用户取消分享后执行的回调函数
      		}
  	});
 });

</script>

HttpUtil
	public static String doGet(String url,Map<String,String> params){
  
  		HttpClient client = new HttpClient();
  		StringBuilder sb = new StringBuilder(url);
  		StringBuilder responseBody = new StringBuilder(url);
  		InputStream ins = null;  
  
 		if(params.size() > 0)
   			sb.append("?");
  
  		for (Entry<String, String>  map: params.entrySet()) {
   
   			String pramName = map.getKey();
   			String values = map.getValue();
   
   			sb.append(pramName+"="+values);
   			sb.append("&");
  		}
  
  		try {
   			GetMethod method = new GetMethod(sb.toString().substring(0, sb.length()));
   			int statusCode = client.executeMethod(method);
   
   			if (statusCode == HttpStatus.SC_OK) {  
               			ins = method.getResponseBodyAsStream();  
               			byte[] b = new byte[1024];  
               			int r_len = 0;  
                		while ((r_len = ins.read(b)) > 0) {  
                 			responseBody.append(new String(b, 0, r_len, method  
                           		.getResponseCharSet()));  
                 		}
   			}
   
  		} catch (HttpException e) {
   			logger.error(e.toString());
 		 } catch (IOException e) {
  			 logger.error(e.toString());
  		}
  
 		 return responseBody.toString();
  
 	}

EncryptUtil
	<pre class="java" name="code">public static String sha1Encrypt(String str){
		
		StringBuffer sb = new StringBuffer();
		try {
			MessageDigest messageDigest = MessageDigest.getInstance("sha1");
			messageDigest.update(str.getBytes());
			
			 char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; 
			 byte[] bytes= messageDigest.digest();
				int len = bytes.length;
				StringBuilder buf = new StringBuilder(len * 2); 
		        for (int j = 0; j < len; j++) {          
		        	buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]); 
		            buf.append(HEX_DIGITS[bytes[j] & 0x0f]); 
		        } 
		} catch (NoSuchAlgorithmException e) {
			
			e.printStackTrace();
		}
		
		return sb.toString();
	}


	注:必须要绑定域名
	方法:先登录<a target=_blank class="external text" href="http://mp.weixin.qq.com/" target="_blank" rel="nofollow">微信公众平台</a>进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 

	备注:登录后可在“开发者中心”查看对应的接口权限。 









评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值