微信小程序获取openid
2017-02-24 00:00
381 查看
摘要: 获取微信OpenId
先获取code
再通过code获取authtoken,从authtoken中取出openid给前台
微信端一定不要忘记设定网页账号中的授权回调页面域名
页面js代码
WxCodeServlet代码
//访问微信获取code
@Override
protected void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException {
String state = req.getParameter("url");
//WxOpenIdServlet的地址
String redirect ="http://"+Configure.SITE+"/wxopenid";
redirect = URLEncoder.encode(redirect,"utf-8");
StringBuffer url =new StringBuffer("https://open.weixin.qq.com/connect/oauth2/authorize?appid=")
.append(Configure.APP_ID).append("&redirect_uri=").append(redirect)
.append("&response_type=code&scope=snsapi_base&state=").append(state).append("#wechat_redirect");
resp.sendRedirect(url.toString());
}
WxOpenIdServlet代码
获取AuthToken(WXUtil.getAuthToken(code))代码
?
HttpClientUtil类
?
封装AuthToken的VO类
?
先获取code
再通过code获取authtoken,从authtoken中取出openid给前台
微信端一定不要忘记设定网页账号中的授权回调页面域名
页面js代码
/* 写cookie */
function
setCookie(name,value) {
var
Days = 30;
var
exp =
new
Date();
exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);
document.cookie = name +
"="
+ escape(value) +
";expires="
+ exp.toGMTString() +
";path=/"
;
}
/* 读cookie */
function
getCookie(name) {
var
arr = document.cookie.match(
new
RegExp(
"(^| )"
+ name +
"=([^;]*)(;|$)"
));
if
(arr !=
null
) {
return
unescape(arr[2]);
}
return
null
;
}
/* 获取URL参数 */
function
getUrlParams(name) {
var
reg =
new
RegExp(
"(^|&)"
+ name +
"=([^&]*)(&|$)"
,
"i"
);
var
r = window.location.search.substr(1).match(reg);
if
(r !=
null
) {
return
unescape(r[2]);
}
return
null
;
}
/* 获取openid */
function
getOpenId(url) {
var
openid = getCookie(
"usropenid"
);
if
(openid ==
null
) {
openid = getUrlParams(
'openid'
);
alert(
"openid="
+openid);
if
(openid ==
null
) {
window.location.href =
"wxcode?url="
+ url;
}
else
{
setCookie(
"usropenid"
,openid);
}
}
}
WxCodeServlet代码
//访问微信获取code
@Override
protected void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException {
String state = req.getParameter("url");
//WxOpenIdServlet的地址
String redirect ="http://"+Configure.SITE+"/wxopenid";
redirect = URLEncoder.encode(redirect,"utf-8");
StringBuffer url =new StringBuffer("https://open.weixin.qq.com/connect/oauth2/authorize?appid=")
.append(Configure.APP_ID).append("&redirect_uri=").append(redirect)
.append("&response_type=code&scope=snsapi_base&state=").append(state).append("#wechat_redirect");
resp.sendRedirect(url.toString());
}
WxOpenIdServlet代码
//访问微信获取openid
@Override
protected void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException {
String code = req.getParameter(
"code"
);
String state = req.getParameter(
"state"
);
Result ret =
new
Result();
AuthToken token = WXUtil.getAuthToken(code);
if
(
null
!= token.getOpenid()){
ret.setCode(0);
log.info(
"====openid=="
+token.getOpenid());
Map<String,String> map =
new
HashMap<String,String>();
map.put(
"openid"
,token.getOpenid());
map.put(
"state"
,state);
ret.setData(map);
}
else
{
ret.setCode(-1);
ret.setMsg(
"登录错误"
);
}
String redUrl = state+
"?openid="
+token.getOpenid();
resp.sendRedirect(redUrl);
}
获取AuthToken(WXUtil.getAuthToken(code))代码
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public static AuthToken getAuthToken(String code){ AuthToken vo = null ; try { String uri = "https://api.weixin.qq.com/sns/oauth2/access_token?" ; StringBuffer url = new StringBuffer(uri); url.append( "appid=" ).append(Configure.APP_ID); url.append( "&secret=" ).append(Configure.APP_SECRET); url.append( "&code=" ).append(code); url.append( "&grant_type=" ).append( "authorization_code" ); HttpURLConnection conn = HttpClientUtil.CreatePostHttpConnection(url.toString()); InputStream input = null ; if (conn.getResponseCode() == 200) { input = conn.getInputStream(); } else { input = conn.getErrorStream(); } vo = JSON.parseObject( new String(HttpClientUtil.readInputStream(input), "utf-8" ),AuthToken.class); } catch (Exception e) { log.error( "getAuthToken error" ,e); } return vo; } |
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | package com.huatek.shebao.util; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; public class HttpClientUtil { // 设置body体 public static void setBodyParameter(String sb,HttpURLConnection conn) throws IOException { DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.writeBytes(sb); out.flush(); out.close(); } // 添加签名header public static HttpURLConnection CreatePostHttpConnection(String uri) throws MalformedURLException, IOException,ProtocolException { URL url = new URL(uri); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setUseCaches( false ); conn.setDoInput( true ); conn.setDoOutput( true ); conn.setRequestMethod( "POST" ); conn.setInstanceFollowRedirects( true ); conn.setConnectTimeout(30000); conn.setReadTimeout(30000); conn.setRequestProperty( "Content-Type" , "application/json" ); conn.setRequestProperty( "Accept-Charset" , "utf-8" ); conn.setRequestProperty( "contentType" , "utf-8" ); return conn; } public static byte[] readInputStream(InputStream inStream) throws Exception { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = inStream.read(buffer)) != -1) { outStream.write(buffer,0,len); } byte[] data = outStream.toByteArray(); outStream.close(); inStream.close(); return data; } } |
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | package com.huatek.shebao.wxpay; public class AuthToken { private String access_token; private Long expires_in; private String refresh_token; private String openid; private String scope; private String unionid; private Long errcode; private String errmsg; public String getAccess_token() { return access_token; } public void setAccess_token(String access_token) { this .access_token = access_token; } public Long getExpires_in() { return expires_in; } public void setExpires_in(Long expires_in) { this .expires_in = expires_in; } public String getRefresh_token() { return refresh_token; } public void setRefresh_token(String refresh_token) { this .refresh_token = refresh_token; } public String getOpenid() { return openid; } public void setOpenid(String openid) { this .openid = openid; } public String getScope() { return scope; } public void setScope(String scope) { this .scope = scope; } public String getUnionid() { return unionid; } public void setUnionid(String unionid) { this .unionid = unionid; } public Long getErrcode() { return errcode; } public void setErrcode(Long errcode) { this .errcode = errcode; } public String getErrmsg() { return errmsg; } public void setErrmsg(String errmsg) { this .errmsg = errmsg; } } |
相关文章推荐
- 微信小程序获取用户openId
- 微信小程序之获取并解密用户数据(获取openId、unionId)
- 微信小程序 获取openid和session_key
- 微信小程序 获取用户信息(包括openId等敏感信息)
- 微信小程序 获取session_key和openid的实例
- 微信小程序 获取session_key和openid
- 微信小程序开发之获取openid及用户信息
- 微信小程序获取openid,api.weixin.qq.com不能设为安全域名,通过php转发
- 获取微信用户唯一标识openid | 小程序
- 微信小程序 获取session_key和openid
- 微信小程序案例:获取微信访问用户的openid
- 【微信小程序】获取openid
- 微信小程序获取openid服务器端代码
- 微信小程序 获取openid 存入数据库 C#
- 微信小程序开发之用户系统 一键登录 获取session_key和openid
- 微信小程序开发之用户系统 一键登录 获取session_key和openid
- 微信公众号获取openId(微信小程序)
- 微信小程序获取用户openid
- 微信小程序真机无法获取openid
- 微信小程序 获取用户信息(包括openId等敏感信息)