全国服务热线:4008-888-888

公众号助手

网页三剑客

网页三剑客

详情介绍

网页三剑客:微信小程序 获取微信OpenId详解及实例代码

微信小程序 获取微信OpenId详解及实例代码  更新2016年10月31日   作者:太阳表面引力为零   这篇文章主要介绍了微信小程序 获取微信OpenId详解及实例代码的相关资料,需要的朋友可以参考下
再通过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))代码

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类

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类

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;

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持! 


相关文章

本篇文章主要介绍了微信小程序之picker选择器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

这篇文章主要介绍了微信小程序 轮播图swiper详解及实例(源码下载)的相关资料,实用小技巧自定义轮播图swiper dots默认样式,需要的朋友可以参考下

这篇文章主要介绍了微信小程序 使用canvas制作K线实例详解的相关资料,需要的朋友可以参考下

这篇文章主要介绍了微信公众号 提示:Unauthorized API function 问题解决方法的相关资料,这里提供了出现提示的解决方法,需要的朋友可以参考下

这篇文章主要介绍了微信小程序 封装http请求实例详解的相关资料,需要的朋友可以参考下

这篇文章主要介绍了微信小程序 支付功能实现PHP实例详解的相关资料,需要的朋友可以参考下

这篇文章主要介绍了微信小程序 HTTPS报错常见问题及解决方案的相关资料,需要的朋友可以参考下

这篇文章主要介绍了微信小程序 navbar实例详解的相关资料,需要的朋友可以参考下

Javascript中除了基本数据(Undefined、Null、Boolean、Number、String),其他都是对象(Object)

这篇文章主要介绍了前端常见跨域解决方案的相关内容,包括对跨域的解释,常见跨域场景以及跨域解决方案,内容丰富,需要的朋友可以参考下。


在线客服

关闭

客户服务热线
4008-888-888


点击这里给我发消息 在线客服

点击这里给我发消息 在线客服