您的位置:首页 > 移动开发 > 微信开发

微信小程序获取openid

2017-02-24 00:00 381 查看
摘要: 获取微信OpenId

先获取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;

}

HttpClientUtil类

?

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;

}


}

封装AuthToken的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
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