国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

微信小程序 獲取微信OpenId詳解及實例代碼

2019-11-20 08:37:28
字體:
來源:轉載
供稿:網(wǎng)友

獲取微信OpenId

  1. 先獲取code
  2. 再通過code獲取authtoken,從authtoken中取出openid給前臺
  3. 微信端一定不要忘記設定網(wǎng)頁賬號中的授權回調頁面域名

流程圖如下


主要代碼

頁面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參數(shù) */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@Overrideprotected 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@Overrideprotected 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;  }}

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持! 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 沁源县| 肥西县| 松潘县| 新河县| 福安市| 天镇县| 上饶县| 凌海市| 遂溪县| 商南县| 东乌珠穆沁旗| 宝坻区| 锡林浩特市| 平凉市| 寿阳县| 安化县| 菏泽市| 育儿| 子洲县| 罗源县| 肥城市| 沙湾县| 汕头市| 弥渡县| 利津县| 吴堡县| 石屏县| 香格里拉县| 武清区| 永昌县| 沽源县| 文安县| 施秉县| 福建省| 枝江市| 营口市| 星子县| 蓬溪县| 遂溪县| 普安县| 大竹县|