微信小程序> 微信分享接口,微信分享小功能后端接口简单实现

微信分享接口,微信分享小功能后端接口简单实现

浏览量:572 时间: 来源:qq_20562909
微信分享后台接口简单实现此接口大致的流程是:用户创建时间戳,随机字符串,当前需要分享的页面的url三个变量,接着将自己的appid和APPsecret作为请求参数获取access_token,再根据access_token获取jsapi_ticket,并将获取的jsapi-ticket进行加密、校验以及自己创建的三个变量进行签名,注意签名过程案按照key值ASCII码升序排序封装成json格式的数据传送到前台JS页面,具体程序如下;
publicclassWeiXinShareActionextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;privateIntegermain_count=888;privateStringflag="1";privateLoglogger=LogFactory.getLog(this.getClass());privateStringfilePath="/B.txt";protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{JsonObjectjsonObject=newJsonObject();Stringticket=null;String[]wxInfo=newString[]{"wx007344f87ae48300","5442edc712b6846bdd1c058b7f2318fe"};WeiXinUtilwxu=newWeiXinUtil();StringticketResString;try{ticketResString=wxu.getShareJsapiTicket(wxInfo);if(StringUtils.isNotEmpty(ticketResString)){JSONObjectticketJSONObject=JSONObject.fromObject(ticketResString);if(ticketJSONObject.getInt("errcode")==0){ticket=JSONObject.fromObject(ticketResString).getString("ticket");}}}catch(Exceptione){e.printStackTrace();}if(StringUtils.isEmpty(ticket)){jsonObject.addProperty("errcode",10002);jsonObject.addProperty("errmsg","ticket_error");this.responseWrite(jsonObject.toString(),response);return;}Stringnoncestr=this.createNonceStr();inttimestamp=this.createTimestamp();StringrequestRefererURL=request.getHeader("referer");flag=request.getParameter("temp");logger.info("flag--------------"+flag);//这里是保存点击次数//没有数据库的情况下保证服务重启后点击次数不清零//利用线程锁使用IO流对点击次数进行修改保存Thread_readFilethf4=newThread_readFile();thf4.start();logger.warn("requestRefererURL:"+requestRefererURL);Stringsignature=this.createSignature(noncestr,ticket,timestamp,requestRefererURL);jsonObject.addProperty("countNum",main_count);//点击次数jsonObject.addProperty("errcode",0);//jsonObject.addProperty("errmsg","");//jsonObject.addProperty("wxuser",wxInfo[0]);//appIdjsonObject.addProperty("timestamp",timestamp);//时间戳jsonObject.addProperty("noncestr",noncestr);//随机字符串jsonObject.addProperty("signature",signature);//签名response.setHeader("Access-Control-Allow-Origin","");this.responseWrite(jsonObject.toString(),response);}privatevoidresponseWrite(Stringcontent,HttpServletResponseresponse){try{response.setCharacterEncoding("utf-8");response.getWriter().write(content);}catch(Exceptione){logger.error("responseWriteerrorinWeiXinShareAction",e);}}}获取access_token;这里开发过程中要注意微信为了减轻对服务器的访问压力限制了access_token每天的生成次数以及使用时长;由于限制时长为7200s于是做了一个判断再生成一个token后的2小时用同一个token;这里仅仅只是一个小接口于是选择将最近一次的生成时间以及token存为静态变量,
/微信分享,获取access_token/privateStringgetWeiXinAccessToken(String[]wxInfo)throwsException{//得到当前时间longcurrent_time=System.currentTimeMillis();//每次调用,判断expires_in是否过期,如果token时间超时,重新获取,expires_in有效期为7200if((current_time-last_time)/1000=7200){logger.info("第一次访问"+current_time);logger.info("(current_time-last_time)/1000===="+(current_time-last_time)/1000);Stringurl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+wxInfo[0]+"&secret="+wxInfo[1];Stringresult=this.httpReqExecute(url);this.logger.warn("fromweixinapiaccessToken:"+result);try{last_time=current_time;if(StringUtils.isNotEmpty(result)){//解析respContent,并获取其中的更新的key,accessToken=JSONObject.fromObject(result).getString("access_token");//保存access_tokenreturnaccessToken;}}catch(Exceptione){logger.error("getAccessTokenerrorinWeiXinShareAction",e);}}else{logger.info("第二次访问"+last_time);logger.info("(current_time-last_time)/1000===="+(current_time-last_time)/1000);logger.info("fromweixinapiaccessToken:"+accessToken);returnaccessToken;}returnnull;}根据access_token获取jsapiTicket
/微信分享,获取jsapiTicket/publicStringgetShareJsapiTicket(String[]wxInfo)throwsException{Stringaccess_Token=this.getWeiXinAccessToken(wxInfo);if(StringUtils.isEmpty(access_Token)){//获取accessToken失败//this.logger.warn(siteId+"accessTokenisempty.");JsonObjectjsonObject=newJsonObject();jsonObject.addProperty("errcode","10000");jsonObject.addProperty("errmsg","access_error");returnjsonObject.toString();}Stringurl="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+access_Token+"&type=jsapi";StringjsapiTicket=this.httpReqExecute(url);this.logger.warn("fromweixinapijsapiTicketis:"+jsapiTicket);if(StringUtils.isNotEmpty(jsapiTicket)){returnjsapiTicket;}returnnull;}Http远程调用
privateStringhttpReqExecute(Stringurl){Stringresult="";DefaultHttpClienthttpclient=null;try{httpclient=newDefaultHttpClient();HttpPosthttppost=newHttpPost(url);//执行HttpResponseresponse=httpclient.execute(httppost);HttpEntityentity=response.getEntity();if(entity!=null&&response.getStatusLine().getStatusCode()==200){result=EntityUtils.toString(entity,"UTF-8");}}catch(Exceptione){logger.error("WeiXinShareAction调用微信API失败!",e);}finally{//关闭连接,释放资源httpclient.getConnectionManager().shutdown();}returnresult;}返回成功
fromweixinapiaccessToken:{"access_token":"12_9UgVn7tFVtvf_7r4Lq4V9W9-pQdZpqWxVjFsPoF3hv3J5_XfwQWqauj4n9-ZMikC1_oCp0IpBxjpZr-Ty8XzG8QMeV2QVukFz5_NP7kjAB05MX9msxRg0FlpAAMjonrrh5wxSEFfKHEc0_BDHFKjAFAXVA","expires_in":7200}fromweixinapijsapiTicketis:{"errcode":0,"errmsg":"ok","ticket":"HoagFKDcsGMVCIY2vOjf9j_Us44Qhuo4KdgH5u8ewMjOCTUO44m1hKqgEsJYIyFR9HWrmmz-wrsb9KLdmpATRw","expires_in":7200}
借鉴

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎