上一章介绍了通过分享好友实现微信跳转,这一章将介绍通过扫码实现微信跳转。
前提:从微信公众号那边获取appid,secret,grantType三个参数备用。
1、获取微信跳转链接接口
该接口主要是获取能重定向到扫码后页面的接口链接。
@GET
@Path(值='getData ')
@ products(MediaType .APPLICATION_JSON)
公共响应getData(){ 0
映射字符串结果=new HashMap();
尝试{
//.业务代码.
String recUrl='https://XXXX.com/项目名/oauth ';//实现重定向的连接,该接口实现看第3节讲
result.put('url ',RecurL);
返回Response.ok(结果)。build();
}捕获(例外e){ 0
result.put('code ',0);
result.put('msg ','异常');
返回Response.ok(结果)。build();
}
}
2、二维码页面
该页面可以通过扫码进行跳转,或者复制链接在微信中打开实现跳转。
输入样式=' width : 1px ' 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(){ 0
var图像=新图像();
var canvas=文档。getelementsbytagname(' canvas ')[0];
图像。src=画布。todaytaul(' image/png ');
返回图像;
}
$(函数(){ 0
//可以直接复制链接在微信中,然后点击链接可跳转到与扫码的同一个界面
'https://open.weixin.qq.com/connect/oauth2/authorize?appid='
appid ' redirect _ uri=' linkUrl//链接全球资源定位器(Uniform Resource Locator)是后台获取数据方法的全球资源定位器(统一资源定位符)
response _ type=代码范围=SNS API _ base STATE=STATE #微信_重定向';
$('#url ').val(网址);
$('#pic ').二维码({ 0
render: "画布",//表格方式
宽度: 170,//宽度
高度: 170,//高度
文本: url /任意内容
});
var img=convertCanvasToImage();
$("画布")。移除();
$(“# Code”).追加(img);
$('#copyLink ').单击(函数(){ 0
var复制文本=$(' # URL ');
复制文本。select();//选择
文件。执行命令(“复制”);//执行复制
警报('复制成功!');
})
});
微信自动调用oauth 2/授权接口,运行完接口后得到一次性的代码,会自动重定向到重定向尤里。代码=XXXresponse _ type=code scope=snsapi _ base state=state connect _ redirect=1 #微信重定向(_ r)
3、跳转的oauth接口
该接口可通过一次性的密码获取用户的openId,然后重定向到扫码后的页面。(微信会两次回调这个接口,第一次的密码是有值的,第二次密码为空!)
@GET
@Path(值='oauth ')
public void oauth(@ Context httpersvletresponse httpResponse,@ QueryParam(' code ')字符串代码){ 0
String indexUrl='https://XXXX.com/项目名/producted til。html ';//微信扫码跳转的页面
字符串'https://api.weixin.qq.com/sns/oauth2/access_token?appid=% s机密=% s代码=% s grant _ type=% s ';
wxUrl=String.format(wxUrl,appId,secret,code,grant type);
字符串响应=Httputil。send get(wxURl);
如果(响应==null){ 0
logger.error('微信访问令牌接收失败');
返回;
}
JSON对象JSON对象=JSON对象。parseobject(响应);
字符串打开id=(字符串)JSonobject。get(' open id ');
尝试{
http响应。发送重定向(索引网址)?OpenID=' OpenID ');
} catch(IOexception e){ 0
e。print stack trace();
}
}