Java微信分享接口开发详解
本文实例为大家分享了Java微信分享接口开发的具体代码,供大家参考,具体内容如下
Java微信分享,步骤是
1、根据当前的url,获取signature,nonceStr,timestamp和appId。
2、通过signature,nonceStr,timestamp和appId来配置微信wx.config。
3、通过wx.ready实现微信分享功能。
1、html端
引入微信JS-SDK.
//分享核心js代码 $(document).ready(function(){ //通过ajax,在页面加载的时候获取微信分享接口signature,nonceStr,timestamp和appId $.ajax({ type:"post", url:"/weixin/share", dataType:"json", data:"url="+window.location.href, success:function(data){ wx.config({ debug:false, appId:data.appId, timestamp:data.timestamp, nonceStr:data.nonceStr, signature:data.signature, jsApiList:['onMenuShareAppMessage','onMenuShareTimeline','hideAllNonBaseMenuItem','showMenuItems'] //功能列表,我们要使用JS-SDK的什么功能 }); wx.ready(function(){ //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title:"分享自定义标题",//分享标题 desc:"分享自定义描述",//分享描述 link:"http://localhost/weixin/share?openId=1",//分享点击之后的链接 imgUrl:'/images/photo/1.jpg',//分享图标 type:'link',//分享类型,music、video或link,不填默认为link success:function(){ //成功之后的回调 } }); wx.hideAllNonBaseMenuItem(); wx.showMenuItems({ menuList:['menuItem:share:appMessage','menuItem:share:timeline']//要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3 }); wx.onMenuShareTimeline({ title:"分享自定义标题",//分享标题 desc:"分享自定义描述",//分享描述 link:"http://localhost/weixin/share?openId=1",//分享点击之后的链接 imgUrl:'/images/photo/1.jpg',//分享图标 type:'link',//分享类型,music、video或link,不填默认为link success:function(){ //成功之后的回调 } cancel:function(){ //用户取消分享后执行的回调函数 } }); }); wx.error(function(res){ //打印错误消息。及把debug:false,设置为debug:ture就可以直接在网页上看到弹出的错误提示 }); } }) });
2、Java代码,获取signature,nonceStr,timestamp和appId
@RequestMapping(value="/share",method=RequestMethod.POST) @ResponseBody publicMapshare(HttpServletRequestrequest){ StringurlTemp="http://"+request.getServerName()+request.getContextPath(); Stringurlpath="http://"+request.getServerName(); StringappUrl=request.getParameter("url"); if(request.getParameter("code")!=null){ appUrl+="&code="+request.getParameter("code"); } if(request.getParameter("state")!=null){ appUrl+="&state="+request.getParameter("state"); } returnWxConfigUtil.getSignature(appUrl,ContentValues.APPID,ContentValues.SECRET,urlTemp,urlpath); }
工具类我就把整个贴上来了,其中有些方法是没有用到的。
getSignature()整个方法是微信分享中的核心方法,用来获取signature,nonceStr,timestamp和appId这几个核心参数。
packagecom.blog.common.util; importcom.alibaba.fastjson.JSONObject; importcom.blog.common.model.Token; importjavax.net.ssl.HttpsURLConnection; importjavax.net.ssl.SSLContext; importjavax.net.ssl.SSLSocketFactory; importjavax.net.ssl.TrustManager; importjava.io.BufferedReader; importjava.io.InputStream; importjava.io.InputStreamReader; importjava.io.OutputStream; importjava.net.ConnectException; importjava.net.URL; importjava.security.MessageDigest; importjava.security.NoSuchAlgorithmException; importjava.util.Arrays; importjava.util.HashMap; importjava.util.Map; /** *公众平台通用接口工具类 * *@authorjames *@date2015-02-27 */ publicclassWxConfigUtil{ //获取access_token的接口地址(GET)限2000(次/天) publicfinalstaticStringaccess_token_url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; //获取jsapi_ticket的接口地址(GET)限2000(次/天) publicfinalstaticStringjsapi_ticket_url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi"; //缓存添加的时间 publicstaticStringcacheAddTime=null; //token,ticket缓存 publicstaticMapTOKEN_TICKET_CACHE=newHashMap (); //token对应的key privatestaticfinalStringTOKEN="token"; //ticket对应的key privatestaticfinalStringTICKET="ticket"; /** *外部获取签名入口类 * *@paramappUrl应用的url *@return */ publicstaticMap getSignature(StringappUrl,StringappId,Stringsecret,Stringurl,Stringurlpath){ //生成签名的随机串 Stringnoncestr=RandomUtil.getStringRandom(4); if(appUrl==null||"".equals(appUrl)){ returnnull; } Stringsignature=null; TokenaccessTocken=getToken(appId,secret,System.currentTimeMillis()/1000); TokenaccessTicket=getTicket(accessTocken.getToken(),System.currentTimeMillis()/1000); signature=signature(accessTicket.getTicket(),cacheAddTime,noncestr,appUrl); System.out.println("-=-=-=-=-=-=-=-=appUrl:"+appUrl); System.out.println("-=-=-=-=-=-=-=-=token:"+accessTocken.getToken()); System.out.println("-=-=-=-=-=-=-=-=ticket:"+accessTicket.getTicket()); System.out.println("-=-=-=-=-=-=-=-=signature:"+signature); System.out.println("-=-=-=-=-=-=-=-=timestamp:"+cacheAddTime); Map map=newHashMap<>(); map.put("appId",appId); map.put("timestamp",cacheAddTime); map.put("nonceStr",noncestr); map.put("appUrl",appUrl); map.put("signature",signature); map.put("url",url); map.put("urlpath",urlpath); returnmap; } /** *获得Token * *@return */ publicstaticStringgetToken(StringappId,Stringsecret){ TokenaccessTocken=getToken(appId,secret,System.currentTimeMillis()/1000); returnaccessTocken.getToken(); } /** *签名 * *@paramtimestamp *@return */ privatestaticStringsignature(Stringjsapi_ticket,Stringtimestamp,Stringnoncestr,Stringurl){ jsapi_ticket="jsapi_ticket="+jsapi_ticket; timestamp="timestamp="+timestamp; noncestr="noncestr="+noncestr; url="url="+url; String[]arr=newString[]{jsapi_ticket,noncestr,timestamp,url}; //将token、timestamp、nonce,url参数进行字典序排序 Arrays.sort(arr); StringBuildercontent=newStringBuilder(); for(inti=0;i >>4)&0X0F]; tempArr[1]=Digit[mByte&0X0F]; Strings=newString(tempArr); returns; } /** *从缓存中读取token或者ticket * *@return */ privatestaticTokengetTokenTicket(Stringkey){ if(TOKEN_TICKET_CACHE!=null&&TOKEN_TICKET_CACHE.get(key)!=null){ System.out.println("==========从缓存中获取到了"+key+"成功==============="); returnTOKEN_TICKET_CACHE.get(key); } returnnull; } /** *更新缓存中token或者ticket * *@return */ privatestaticvoidupdateToken(Stringkey,TokenaccessTocken){ if(TOKEN_TICKET_CACHE!=null&&TOKEN_TICKET_CACHE.get(key)!=null){ TOKEN_TICKET_CACHE.remove(key); System.out.println("==========从缓存中删除"+key+"成功==============="); } TOKEN_TICKET_CACHE.put(key,accessTocken); cacheAddTime=String.valueOf(accessTocken.getAddTime());//更新缓存修改的时间 System.out.println("==========更新缓存中"+key+"成功==============="); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。