1.前台:
2.!DOCTYPEhtmlhtmllang"en"headmetacharset"UTF-8"metahttp-equiv"X-UA-Compatible"content"IEedge,chrome1"/metaname"viewport"content"widthdevice-width,initial-scale1.0,maximum-scale1.0,user-scalableno"/title51管票/titlelinkrel"stylesheet"href"../css/bootstrap.css"linkrel"stylesheet"href"../css/type.css"scripttype"text/javascript"src"../js/jquery-3.2.1.min.js"/scriptscripttype"text/javascript"src"../js/bootstrap.js"/scriptscriptsrc"../js/jweixin-1.2.0.js"/script/headbodyscriptvarappId'';//必填,公众号的唯一标识不用获取直接去微信拿vartimestamp0;//为了让后台传过来的timetamp是数字类型否则字符串估计又会报configfail错误必填,生成签名的时间戳不用获取程序可以生成varnonceStr'';//必填,生成签名的随机串不用获取程序可以生成varsignature'';//必填,签名这是我们要获取的varcurPathlocation.href.split('#')[0];varpathNamewindow.document.location.pathname;varprojectNamepathName.substring(0,pathName.substr(1).indexOf('/')+1);varuserNamegetCookie("userName1");varsurlgetCookie("surl");$(document).ready(function(){$.ajax({url:projectName+'/wechat/getTicket.do',data:{"url":curPath},type:'GET',//getasync:true,//false是否异步dataType:'text',//返回的数据格式类型json/xml/html/script/jsonp/textsuccess:function(data){console.log(data);varobjJSON.parse(data);appIdobj.appId;timestampNumber(obj.timestamp);nonceStrobj.nonceStr;signatureobj.signature;wx.config({//开始微信的配置将获取的数据拿去请求debug:false,appId:appId,timestamp:timestamp,nonceStr:nonceStr,signature:signature,jsApiList:[//可以调用下面的接口我们这里只是调用scanQRCode也就是扫码接口'checkJsApi','hideOptionMenu','scanQRCode','closeWindow']});},error:function(data){console.log(data);//在前端控制台打印请求的状态}});wx.ready(function(){wx.scanQRCode({needResult:1,desc:'scanQRCodedesc',scanType:["qrCode","barCode"],success:function(res){}});wx.error(function(res){alert("出错了:"+res.errMsg);});});});/scriptscriptsrc"http://demo.open.weixin.qq.com/jssdk/js/api-6.1.js?ts1420774989"/script/body/html
3.java代码Controller:
4.packagecom.dditax.project.ckts.web.controller.kprj;importjava.io.PrintWriter;importjava.util.Arrays;importjava.util.Map;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.codec.digest.DigestUtils;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.ResponseBody;importcom.dditax.project.ckts.util.kprj.HttpUtils;importcom.dditax.project.ckts.util.kprj.Sign;@Controller@RequestMapping("wechat/")publicclassWeiXinController{//publicfinalstaticStringTOKEN"weixin";@Value("${token}")privateStringTOKEN;@Value("${appId}")privateStringappId;@Value("${secret}")privateStringsecret;@SuppressWarnings("rawtypes")@RequestMapping(value"getTicket.do",methodRequestMethod.GET)public@ResponseBodyvoidgetTicket(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{Stringjsonstr"{"appId":""+appId+"",";Stringjsapi_ticketHttpUtils.getJsTicket(appId,secret);//注意URL一定要动态获取Stringurlrequest.getParameter("url");System.out.println("url:"+url);MapString,StringretSign.sign(jsapi_ticket,url);for(Map.Entryentry:ret.entrySet()){jsonstr+"""+entry.getKey()+"":""+entry.getValue()+"",";}jsonstrjsonstr.substring(0,jsonstr.length()-1);jsonstr+"}";System.out.println(jsonstr);response.getWriter().println(jsonstr);}}
5.工具类:
packagecom.dditax.project.ckts.util.kprj;importjava.io.BufferedInputStream;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.net.MalformedURLException;importjava.net.URI;importjava.net.URL;importjava.net.URLConnection;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Set;importjava.util.zip.GZIPInputStream;importorg.apache.http.HttpEntity;importorg.apache.http.HttpResponse;importorg.apache.http.NameValuePair;importorg.apache.http.client.ClientProtocolException;importorg.apache.http.client.HttpClient;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.entity.StringEntity;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.DefaultHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.protocol.HTTP;importorg.apache.http.util.EntityUtils;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;publicclassHttpUtils{privatestaticStringaccess_Token"";/***@Description:httpget请求共用方法*@param@paramreqUrl*@param@paramparams*@param@return*@param@throwsException*@authordapengniao*@date2016年3月10日下午3:57:39*/@SuppressWarnings("resource")publicstaticStringsendGet(StringreqUrl,MapString,Stringparams)throwsException{InputStreaminputStreamnull;HttpGetrequestnewHttpGet();try{StringurlbuildUrl(reqUrl,params);HttpClientclientnewDefaultHttpClient();request.setHeader("Accept-Encoding","gzip");request.setURI(newURI(url));HttpResponseresponseclient.execute(request);inputStreamresponse.getEntity().getContent();StringresultgetJsonStringFromGZIP(inputStream);returnresult;}finally{if(inputStream!null){inputStream.close();}request.releaseConnection();}}/***@Description:httppost请求共用方法*@param@paramreqUrl*@param@paramparams*@param@return*@param@throwsException*@authordapengniao*@date2016年3月10日下午3:57:53*/@SuppressWarnings("resource")publicstaticStringsendPost(StringreqUrl,MapString,Stringparams)throwsException{try{SetStringsetparams.keySet();ListNameValuePairlistnewArrayListNameValuePair();for(Stringkey:set){list.add(newBasicNameValuePair(key,params.get(key)));}if(list.size()0){try{HttpClientclientnewDefaultHttpClient();HttpPostrequestnewHttpPost(reqUrl);request.setHeader("Accept-Encoding","gzip");request.setEntity(newUrlEncodedFormEntity(list,HTTP.UTF_8));HttpResponseresponseclient.execute(request);InputStreaminputStreamresponse.getEntity().getContent();try{StringresultgetJsonStringFromGZIP(inputStream);returnresult;}finally{inputStream.close();}}catch(Exceptionex){ex.printStackTrace();thrownewException("网络连接失败,请连接网络后再试");}}else{thrownewException("参数不全,请稍后重试");}}catch(Exceptionex){ex.printStackTrace();thrownewException("发送未知异常");}}/***@Description:httppost请求json数据*@param@paramurls*@param@paramparams*@param@return*@param@throwsClientProtocolException*@param@throwsIOException*@authordapengniao*@date2016年3月10日下午3:58:15*/publicstaticStringsendPostBuffer(Stringurls,Stringparams)throwsClientProtocolException,IOException{HttpPostrequestnewHttpPost(urls);StringEntitysenewStringEntity(params,HTTP.UTF_8);request.setEntity(se);//发送请求@SuppressWarnings("resource")HttpResponsehttpResponsenewDefaultHttpClient().execute(request);//得到应答的字符串,这也是一个JSON格式保存的数据StringretSrcEntityUtils.toString(httpResponse.getEntity());request.releaseConnection();returnretSrc;}/***@Description:http请求发送xml内容*@param@paramurlStr*@param@paramxmlInfo*@param@return*@authordapengniao*@date2016年3月10日下午3:58:32*/publicstaticStringsendXmlPost(StringurlStr,StringxmlInfo){//xmlInfoxml具体字符串try{URLurlnewURL(urlStr);URLConnectionconurl.openConnection();con.setDoOutput(true);con.setRequestProperty("Pragma:","no-cache");con.setRequestProperty("Cache-Control","no-cache");con.setRequestProperty("Content-Type","text/xml");OutputStreamWriteroutnewOutputStreamWriter(con.getOutputStream());out.write(newString(xmlInfo.getBytes("utf-8")));out.flush();out.close();BufferedReaderbrnewBufferedReader(newInputStreamReader(con.getInputStream()));Stringlines"";for(Stringlinebr.readLine();line!null;linebr.readLine()){lineslines+line;}returnlines;//返回请求结果}catch(MalformedURLExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}return"fail";}privatestaticStringgetJsonStringFromGZIP(InputStreamis){StringjsonStringnull;try{BufferedInputStreambisnewBufferedInputStream(is);bis.mark(2);//取前两个字节byte[]headernewbyte[2];intresultbis.read(header);//reset输入流到开始位置bis.reset();//判断是否是GZIP格式intheaderDatagetShort(header);//Gzip流的前两个字节是0x1f8bif(result!-1headerData0x1f8b){//LogUtil.i("HttpTask","useGZIPInputStream");isnewGZIPInputStream(bis);}else{//LogUtil.d("HttpTask","notuseGZIPInputStream");isbis;}InputStreamReaderreadernewInputStreamReader(is,"utf-8");char[]datanewchar[100];intreadSize;StringBuffersbnewStringBuffer();while((readSizereader.read(data))0){sb.append(data,0,readSize);}jsonStringsb.toString();bis.close();reader.close();}catch(Exceptione){e.printStackTrace();}returnjsonString;}privatestaticintgetShort(byte[]data){return(data[0]8)|data[1]0xFF;}/***构建get方式的url**@paramreqUrl*基础的url地址*@paramparams*查询参数*@return构建好的url*/publicstaticStringbuildUrl(StringreqUrl,MapString,Stringparams){StringBuilderquerynewStringBuilder();SetStringsetparams.keySet();for(Stringkey:set){query.append(String.format("%s%s",key,params.get(key)));}returnreqUrl+"?"+query.toString();}/***get请求获取网址*@paramurl*@paramcharset*@return*/publicstaticStringsendGet(Stringurl,Stringcharset){CloseableHttpClienthttpClientHttpClients.createDefault();HttpGetgetnewHttpGet(url);CloseableHttpResponseresponsenull;Stringresultnull;try{responsehttpClient.execute(get);HttpEntityentityresponse.getEntity();//System.out.println(entity.getContentType().getValue());resultEntityUtils.toString(entity,charset);}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returnresult;}//获取tickectpublicstaticsynchronizedStringgetJsTicket(StringappId,Stringsecret)throwsException{JSONObjectjsonObjectnewJSONObject();Stringticket"";if(access_Token""){//如果是第一次获取就直接去请求新的ticketgetTicket(appId,secret);}else{//否则就请求旧的StringresultsendGet("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token"+access_Token+"typejsapi","UTF-8");jsonObjectJSON.parseObject(result);intresultCodejsonObject.getIntValue("errcode");if(resultCode!0){//请求旧的如果不行ticketgetTicket(appId,secret);//再去请求新的}else{//如果请求的新的okticketjsonObject.getString("ticket");//直接获取}}System.out.println("token:"+access_Token);returnticket;}/***获取最新的ticket*@return*@throwsException*/publicstaticStringgetTicket(StringappId,Stringsecret)throwsException{JSONObjectjsonObjectnewJSONObject();MapString,StringparamsnewHashMapString,String();params.put("grant_type","client_credential");params.put("appid",appId);//wx78c7f3bd1a8a0806params.put("secret",secret);//8e93006f3b6d8f2f6edf7958393a0378StringjstokenHttpUtils.sendGet("https://api.weixin.qq.com/cgi-bin/token",params);System.out.println(jstoken);access_Tokennet.sf.json.JSONObject.fromObject(jstoken).getString("access_token");//获取到token并赋值保存StringresultsendGet("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token"+access_Token+"typejsapi","UTF-8");jsonObjectJSON.parseObject(result);returnjsonObject.getString("ticket");}}6.具体的实现发送方式可以参考链接地址:
7.里面含有所需要的整个项目:http://download.csdn.net/download/u010737411/10167401
JAVA微信公众号调用扫一扫功能开发-微信扫一扫开发-微信小程序扫一扫功能
浏览量:1228
时间:
来源:紫青蓝
版权声明
即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

最新资讯
-
抖音再现本地生活服务,咫尺同城圈商业变现新通道
短视频成为本地生活探店网红营销变现引流的新阵地,每一位网红都渴望在短视频内“一夜爆红”。即速应用团队对多商家小程序进行升级,打造了咫尺同城圈:“同城探店营销助手”,不仅完善商家营销技巧,还助力探店网红玩转本地生活服务。 -
抖音再现本地生活服务,咫尺同城圈商业变现新通道
短视频成为本地生活探店网红营销变现引流的新阵地,每一位网红都渴望在短视频内“一夜爆红”。即速应用团队对多商家小程序进行升级,打造了咫尺同城圈:“同城探店营销助手”,不仅完善商家营销技巧,还助力探店网红玩转本地生活服务。 -
阿坝小程序代理
阿坝藏族羌族小程序代理公司有哪些?阿坝藏族羌族小程序代理平台哪个好?阿坝藏族羌族小程序代理商怎么收费,代理政策如何?下面就让即速应用产品经理jisuapp.cn来告诉你吧!