上一章介绍了通过分享好友实现微信跳转,这一章将介绍通过扫码实现微信跳转。

  前提:从微信公众号那边获取appid,机密,授权类型三个参数备用。

   1、获取微信跳转链接接口该接口主要是获取能重定向到扫码后页面的接口链接。

   @ GET @ Path(value= GET data )@ Produces(media type .应用程序_JSON)公共响应getData() { MapString,String result=new HashMap();尝试{ //.业务代码.String recUrl=https://XXXX.com/项目名/oauth ;//实现重定向的连接,该接口实现看第3节讲result.put(url ,recUrl);返回Response.ok(结果)。build();} catch(异常e){ result。put( code ,0);result.put(msg ,异常);返回Response.ok(结果)。build();} } 2、二维码页面该页面可以通过扫码进行跳转,或者复制链接在微信中打开实现跳转。

  输入style= width : 1 px height : 1px id= URL value= type= text /div id= root div id= pic div id= Code /div/div div id= txt 扫码跳转或者识别图片跳转/div div id=copyLink 复制链接(微信中点击链接可直接跳转)/div/div函数convertCanvasToImage(){ var Image=new Image();var canvas=文档。getelementsbytagname( canvas )[0];形象。src=画布。toda taurl( image/png );返回图像;}$(function() { //可以直接复制链接在微信中,然后点击链接可跳转到与扫码的同一个界面var URL=https://open.weixin.qq.com/connect/oauth2/authorize?appid= appid redirect _ uri= linkUrl;//linkUrl是后台得到一条数据方法的URL“response _ type=code scope=snsapi _ basestate=STATE # we chat _ redirect”;$(#url ).瓦尔(网址);$(#pic ).qrcode({ render: canvas ,//表格方式宽度: 170,//宽度身高: 170,//高度text: url //任意内容});var img=convertCanvasToImage();$(canvas ).移除();$(#Code ).追加(img);$(#copyLink ).click(function(){ var copy text=$( # URL );复制文本。select();//选择文档。exec命令(“Copy”);//执行复制警报(复制成功!);})});微信自动调用oauth 2/授权接口,运行完接口后得到一次性的代码,会自动重定向到重定向_uri?code=XXXresponse _ type=code scope=snsapi _ basestate=state connect _ redirect=1 # we chat _ redirect

   3、跳转的认证接口该接口可通过一次性的密码获取用户的openId,然后重定向到扫码后的页面。(微信会两次回调这个接口,第一次的密码是有值的,第二次密码为空!)

   @ GET @ Path(value= oauth )public void oauth(@ Context http servlet response http response,@ query param( code )String code){ String index URL= https://xxxx。com/项目名/出品eatil。html ;//微信扫码跳转的页面字符串wx URL=https://api.weixin.qq.com/sns/oauth2/access_token?appid=% s secret=% s code=% s grant _ type=% s ;wxUrl=String.format(wxUrl,appId,secret,code,grant type);字符串响应=http util。发送get(wx URL);if(response==null){ logger。错误(微信访问令牌接收失败);返回;} JSON对象JSON对象=JSON对象。解析对象(响应);字符串OpenID=(字符串)JSON对象。get( OpenID );试试{ httpresponse。发送重定向(indexUrl)?OpenID= OpenID);} catch(io异常e){ e . printstacktrace();}}