鍔熻兘锛?/h4>
涓昏鐢ㄤ簬鍦ㄧ敤鎴烽€氳繃鎵嬫満绔井淇¤闂涓夋柟H5椤甸潰鏃惰幏鍙栫敤鎴风殑韬唤淇℃伅锛坥penId,鏄电О,澶村儚,鎵€鍦ㄥ湴绛夈€傘€傦級鍙敤鏉ュ疄鐜板井淇$櫥褰曘€佸井淇¤处鍙风粦瀹氥€佺敤鎴疯韩浠介壌鏉冪瓑鍔熻兘銆? 聽
涓€銆佸紑鍙戝墠鐨勫噯澶囷細
1銆侀渶瑕佹湁涓€涓叕浼楀彿锛屾嬁鍒癆ppID鍜孉ppSecret锛? 娉ㄦ剰锛欰ppID鍜孉ppSecret鍦ㄤ互鍓嶇殑鐗堟湰涓槸鍙互鐩存帴鏄剧ず鐨勶紝浣嗘敼鐗堜箣鍚嶢ppID鑳藉鐩存帴鐪嬪埌鑰孉ppSecret鍒欐棤娉曞緱鐭ャ€傛墍浠ヨ繖涓狝ppSecret寰椾繚绠″ソ浜嗭紝瑕佷笉鐒跺彧鑳介噸缃簡锛堥噸缃彲鑳戒細褰卞搷浣犵殑鍦ㄧ嚎涓氬姟鍜屼互鍓嶇▼搴忕殑姝e父杩愯锛岄噸缃垚鍔熷悗浼氬湪椤甸潰涓樉绀轰綘涓€瀹氳淇濆瓨濂戒簡锛岃繖涓〉闈㈠叧浜嗕箣鍚庡氨鏃犳硶寰楃煡浜嗭級2銆佸皢浣犺閮ㄧ讲涓嬮潰浠g爜绋嬪簭鐢佃剳鐨刬p锛堝湪娴忚鍣ㄧ櫨搴︽悳绱?ip"鍗冲彲鐭ラ亾浣犺嚜宸辩殑ip锛夋坊鍔犲埌鐧藉悕鍗曚腑锛屽惁鍒欐棤娉曡幏鍙栧埌access_token銆? 3銆佽繘鍏ュ叕浼楀彿寮€鍙戣€呬腑蹇冮〉閰嶇疆鎺堟潈鍥炶皟鍩熷悕銆傚叿浣撲綅缃細璁剧疆-鍏紬鍙疯缃?鍔熻兘璁剧疆-缃戦〉鎺堟潈鍩熷悕
娉ㄦ剰锛氳繖閲屼粎闇€濉啓鍏ㄥ煙鍚嶏紙濡?www.qq.com銆亀ww.baidu.com锛夛紝鍕垮姞 http:// 绛夊崗璁ご鍙婂叿浣撶殑鍦板潃瀛楁
杩欎釜鍩熷悕闇€瑕佹槸涓€涓妗堣繃鐨勫煙鍚嶃€傝繖涓潯浠舵瘮杈冮毦鍔烇紝骞稿ソ鐑績鐨勭綉鍙媞ydev涓烘垜浠棤绉佸湴鎻愪緵浜嗕竴涓妗堣繃鐨勫煙鍚嶏紝鎴戜滑鍙互閫氳繃浣跨敤Ngrok鏉ヨ櫄鎷熶竴涓煙鍚嶆槧灏勫埌鏈湴寮€鍙戠幆澧冿紝绠€鐩存槸web寮€鍙戠鍣ㄥ晩銆傘€? qydev鐗圢grok浣跨敤璇存槑鍙婁笅杞藉湴鍧€锛歨ttps://blog.csdn.net/qq_26101151/article/details/53114496?locationNum=4&fps=1
鍚姩鍛戒护锛歯grok -config=ngrok.cfg -subdomain xiaoqiang 8080
鏈枃浠iaoqiang.tunnel.qydev.com鍩熷悕涓轰緥
鐣锛氭垜涔熸槸鏈嶄簡锛屽墠鍑犲ぉ杩樺ソ浣匡紝浠婂ぉ灏变笉琛屼簡銆傝繃浜嗗嚑澶╁張濂戒娇浜嗭紝杩欎箞涓嶇ǔ瀹氬晩銆傘€傘€?娉ㄦ剰锛氱綉涓婃湁濂藉閮芥槸閫氳繃浣跨敤Ngrok鏉ヨ櫄鎷熶竴涓煙鍚嶆槧灏勫埌鏈湴寮€鍙戠幆澧冿紝鍙槸Ngrok鏈夊ソ澶氱増鏈紝鍙湁涓婇潰鐨勮繖涓猶ydev鐗堢殑lovebread.tunnel.qydev.com鍩熷悕鑳芥垚鍔熴€?
(1)瀹樻柟鐗堟湰澶辫触
(2)Sunny鐗堟湰锛岄厤缃簡涓厤璐圭殑鍩熷悕http://suliuu.free.idcfengye.com杩欎袱涓増鏈殑Ngrok绠€鍗曚娇鐢ㄥ彲鍙傝€冿細https://blog.csdn.net/liu_005/article/details/79557818鍜宧ttps://blog.csdn.net/qq_33404395/article/details/80788233
娉ㄦ剰锛? 1.鏀圭増涔嬪悗杩樺緱鎶婂畠瑙勫畾鐨勪竴涓猼xt鏂囦欢鏀惧埌浣犲煙鍚嶆牴鐩綍涓嬶紝鎵€浠ヨ杩欐鍏堝埆绠★紝鍏堣繘琛屼笅闈㈢殑鍐呭锛堝湪eclipse涓妸鏁翠釜椤圭洰鎼缓濂藉悗鍐嶆妸杩欎釜txt鏂囦欢涓嬭浇鍚庢斁鍒颁綘鐨勯」鐩腑鍘伙紝鍚﹀垯杩欐鏍规湰閫氳繃涓嶄簡锛?
2.鎶婁笂闈㈣鐨凾XT鏂囦欢鏀惧埌涓嬪浘鐨勪綅缃紝濡傛灉浣犺闂埌http://xiaoqiang.tunnel.qydev.com/MP_verify_xxxxxxxxxxxxxxxx.txt鍒欒鏄庝綘鏀惧浜? 4.鍦╩ysql搴撲腑寤虹浉搴旂殑琛ㄥ苟鎻掑叆鏁版嵁锛?CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`account` char(10) DEFAULT NULL,
`openid` char(50) DEFAULT NULL,
`password` char(10) DEFAULT NULL,
`nickname` char(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
INSERT INTO user VALUES(1,'xiaoqiang','','123456','灏忓己绛惧悕璁捐');
5.濡傛灉瀚屾墜鏈轰笂娴嬭瘯楹荤儲锛屽彲浠ヤ娇鐢ㄥ井淇″畼鏂规彁渚涚殑web寮€鍙戣€呭伐鍏风洿鎺ュ湪娴忚鍣ㄤ腑杩涜璋冭瘯銆? 鍓嶆彁鏄渶瑕佸湪寰俊鍏紬鍙蜂腑缁戝畾寮€鍙戣€呰处鍙凤細鐧诲綍鍏紬鍙?浜哄憳璁剧疆-缁戝畾杩愯惀鑰呭井淇″彿
浣跨敤璇存槑鍙婁笅杞藉湴鍧€锛氫簩銆侀」鐩瀯寤猴細
1.椤圭洰缁撴瀯锛? 鍦╡clipse涓彸閿柊寤衡€淒ynamic Web Project鈥?
鏈枃鎵€闇€jar鍖呬笅杞藉湴鍧€锛歨ttps://download.csdn.net/download/m0_37739193/10854643
web.xml锛?
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>WxAuth</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>wxCallBack</servlet-name>
<servlet-class>com.xingshang.servlet.CallBackSerclet</servlet-class>
<init-param>
<param-name>dbUrl</param-name>
<param-value>jdbc:mysql://127.0.0.1:3306/xiaoqiang</param-value>
</init-param>
<init-param>
<param-name>driverClassName</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
<init-param>
<param-name>userName</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>passWord</param-name>
<param-value>123456</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>wxCallBack</servlet-name>
<url-pattern>/wxCallBack</url-pattern>
</servlet-mapping>
</web-app>
AuthUtil锛? package com.xingshang.util;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import net.sf.json.JSONObject;
public class AuthUtil {
public static final String APPID = "xxxxxxxxxxxxxxxxxx";
public static final String APPSECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
public static JSONObject doGetJson(String url) throws ClientProtocolException, IOException{
JSONObject jsonObject = null;
//棣栧厛鍒濆鍖朒ttpClient瀵硅薄
// DefaultHttpClient client = new DefaultHttpClient();
HttpClient client = HttpClientBuilder.create().build();//鑾峰彇DefaultHttpClient璇锋眰,涓婇潰娉ㄩ噴鐨勯偅琛屽凡缁忎笉寤鸿浣跨敤
//閫氳繃get鏂瑰紡杩涜鎻愪氦
HttpGet httpGet = new HttpGet(url);
//閫氳繃HTTPclient鐨別xecute鏂规硶杩涜鍙戦€佽姹? HttpResponse response = client.execute(httpGet);
//浠巖esponse閲岄潰鎷胯嚜宸辨兂瑕佺殑缁撴灉
HttpEntity entity = response.getEntity();
if(entity != null){
String result = EntityUtils.toString(entity,"UTF-8");
jsonObject = JSONObject.fromObject(result);
}
//鎶婇摼鎺ラ噴鏀炬帀
httpGet.releaseConnection();
return jsonObject;
}
}
Java瀹炵幇锛? 1銆佸紩瀵肩敤鎴疯繘鍏ユ巿鏉冮〉闈㈠悓鎰忔巿鏉冿紝鑾峰彇code
杩欎竴姝ュ叾瀹炲氨鏄皢闇€瑕佹巿鏉冪殑椤甸潰url鎷兼帴鍒板井淇$殑璁よ瘉璇锋眰鎺ュ彛閲岄潰锛屾瘮濡傞渶瑕佺敤鎴峰湪璁块棶椤甸潰鏃惰繘琛屾巿鏉冭璇? 鍏朵腑鐨剆cope鍙傛暟鏈変袱涓€硷細
snsapi_base锛氬彧鑳借幏鍙栧埌鐢ㄦ埛openid銆傚ソ澶勬槸闈欓粯璁よ瘉锛屾棤闇€鐢ㄦ埛鎵嬪姩鐐瑰嚮璁よ瘉鎸夐挳锛屾劅瑙変笂鍍忔槸鐩存帴杩涘叆缃戠珯涓€鏍枫€? snsapi_userinfo锛氬彲浠ヨ幏鍙栧埌openid銆佹樀绉般€佸ご鍍忋€佹墍鍦ㄥ湴绛変俊鎭€傞渶瑕佺敤鎴锋墜鍔ㄧ偣鍑昏璇佹寜閽€傚苟涓旓紝鍗充娇鍦ㄦ湭鍏虫敞鐨勬儏鍐典笅锛屽彧瑕佺敤鎴锋巿鏉冿紝涔熻兘鑾峰彇鍏朵俊鎭? LoginServlet锛?
package com.xingshang.servlet;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.xingshang.util.AuthUtil;
/**
* 鍏ュ彛鍦板潃
* @author Administrator
*/
@WebServlet("/wxLogin")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//绗竴姝ワ細寮曞鐢ㄦ埛杩涘叆鎺堟潈椤甸潰鍚屾剰鎺堟潈锛岃幏鍙朿ode
//鍥炶皟鍦板潃
// String backUrl = "http://xiaoqiang.tunnel.qydev.com/WxAuth/callBack"; //绗?绉嶆儏鍐典娇鐢? String backUrl = "http://xiaoqiang.tunnel.qydev.com/WxAuth/wxCallBack"; //绗?绉嶆儏鍐典娇鐢紝杩欓噷鏄痺eb.xml涓殑璺緞
//鎺堟潈椤甸潰鍦板潃
String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+AuthUtil.APPID
+ "&redirect_uri="+URLEncoder.encode(backUrl, "UTF-8") //URLEncoder.encode(backUrl)宸蹭笉寤鸿浣跨敤銆傝繖閲屾帹鑽愪竴涓猠ncode杞箟鐨勭綉椤靛伐鍏穐ttps://www.jianshu.com/p/f0966f28ddac
+ "&response_type=code"
+ "&scope=snsapi_userinfo"
+ "&state=STATE#wechat_redirect";
//閲嶅畾鍚戝埌鎺堟潈椤甸潰
response.sendRedirect(url);
}
}
2銆侀€氳繃绗竴姝ヨ幏鍙栫殑code鎹㈠彇缃戦〉鎺堟潈access_token锛堜笌鍩虹鏀寔涓殑access_token涓嶅悓锛?
(1)缃戦〉鎺堟潈鐨刟ccess_token鍦ㄦ瘡娆¤幏鍙杘penID鏃朵竴璧锋洿鏂帮紝鍦ㄦ帴鍙h皟鐢ㄩ娆¢檺鍒朵腑涓衡€滄棤涓婇檺鈥濄€? (2)鍩虹access_token涓€鑸檺鍒朵负2000娆?鏃ワ紝闇€瑕佽嚜宸变繚瀛樿捣鏉ュ苟瀹氭椂鏇存柊銆? 杩欎竴姝ラ渶瑕佸湪鎺у埗鍣ㄤ腑鑾峰彇寰俊鍥炰紶缁欐垜浠殑code锛岄€氳繃杩欎釜code鏉ヨ姹俛ccess_token锛岄€氳繃access_token鍜宱penid鑾峰彇鐢ㄦ埛鍩烘湰淇℃伅銆?
CallBackSerclet锛?
package com.xingshang.servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.xingshang.util.AuthUtil;
import net.sf.json.JSONObject;
/**
* 鍥炶皟鍦板潃
* @author Administrator
*/
//@WebServlet("/callBack")
//绗?绉嶆儏鍐电殑涓ょ鍐欐硶
//@WebServlet(urlPatterns = "/callBack")
public class CallBackSerclet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String dbUrl;
private String driverClassName;
private String userName;
private String passWord;
private Connection conn =null;
private PreparedStatement ps =null;
private ResultSet rs = null;
//鍒濆鍖栨暟鎹簱
@Override
public void init(ServletConfig config) throws ServletException {
//鍔犺浇椹卞姩
try {
this.dbUrl = config.getInitParameter("dbUrl");
this.driverClassName = config.getInitParameter("driverClassName");
this.userName = config.getInitParameter("userName");
this.passWord = config.getInitParameter("passWord");
Class.forName(driverClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//绗簩姝ワ細閫氳繃code鎹㈠彇缃戦〉鎺堟潈access_token
//浠巖equest閲岄潰鑾峰彇code鍙傛暟(褰撳井淇℃湇鍔″櫒璁块棶鍥炶皟鍦板潃鐨勬椂鍊欙紝浼氭妸code鍙傛暟浼犻€掕繃鏉?
String code = request.getParameter("code");
System.out.println("code:"+code);
//鑾峰彇code鍚庯紝璇锋眰浠ヤ笅閾炬帴鑾峰彇access_token
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + AuthUtil.APPID
+ "&secret=" + AuthUtil.APPSECRET
+ "&code=" + code
+ "&grant_type=authorization_code";
//閫氳繃缃戠粶璇锋眰鏂规硶鏉ヨ姹備笂闈㈣繖涓帴鍙? JSONObject jsonObject = AuthUtil.doGetJson(url);
System.out.println("==========================jsonObject"+jsonObject);
//浠庤繑鍥炵殑JSON鏁版嵁涓彇鍑篴ccess_token鍜宱penid锛屾媺鍙栫敤鎴蜂俊鎭椂鐢? String token = jsonObject.getString("access_token");
String openid = jsonObject.getString("openid");
// 绗笁姝ワ細鍒锋柊access_token锛堝鏋滈渶瑕侊級
// 绗洓姝ワ細鎷夊彇鐢ㄦ埛淇℃伅(闇€scope涓簊nsapi_userinfo)
String infoUrl ="https://api.weixin.qq.com/sns/userinfo?access_token=" + token
+ "&openid=" + openid
+ "&;
//閫氳繃缃戠粶璇锋眰鏂规硶鏉ヨ姹備笂闈㈣繖涓帴鍙? JSONObject userInfo = AuthUtil.doGetJson(infoUrl);
/** userInfo鏍蜂緥锛? * {"openid":"xiaoqiangxxxxxxx_xxxxxxxxxOs","nickname":"灏忓己绛惧悕璁捐","sex":1,"language":"zh_CN","city":"寮犲鍙?,"province":"娌冲寳","country":"涓浗",
* "headimgurl":"http://thirdwx.qlogo.cn/mmopen/vi_32/TGm9MicTQp8icMoA2mFDXIKhsHXfamAVibskR11VwZWu6I2trEb038ufVh6ianSAQz6zDuYEsxicFfElWskVTYmldrA/132",
* "privilege":[],"unionid":"xiaoxx-xiaoGVcRqiangxiaxiaxT"}
*/
//绗?绉嶆儏鍐碉細浣跨敤寰俊鐢ㄦ埛淇℃伅鐩存帴鐧诲綍锛屾棤闇€娉ㄥ唽鍜岀粦瀹?// request.setAttribute("info", userInfo);
//鐩存帴璺宠浆
// request.getRequestDispatcher("/index1.jsp").forward(request, response);
//绗?绉嶆儏鍐碉細 灏嗗井淇′笌褰撳墠绯荤粺鐨勮处鍙疯繘琛岀粦瀹?闇€灏嗙1绉嶆儏鍐靛拰@WebServlet("/callBack")娉ㄩ噴鎺?
//绗竴姝ワ紝鏍规嵁褰撳墠openid鏌ヨ鏁版嵁搴擄紝鐪嬫槸鍚﹁璐﹀彿宸茬粡杩涜缁戝畾
try {
String nickname = getNickName(openid);
if(!"".equals(nickname)){
//宸茬粦瀹? request.setAttribute("nickname", nickname);
request.getRequestDispatcher("/index2.jsp").forward(request, response);
}else{
//鏈粦瀹? request.setAttribute("openid", openid);
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//鏁版嵁搴撶殑鏌ヨ
public String getNickName(String openid) throws SQLException{
String nickName = "";
//鍒涘缓鏁版嵁搴撻摼鎺? conn = DriverManager.getConnection(dbUrl, userName, passWord);
String sql = "select nickname from user where openid = ?";
ps = conn.prepareStatement(sql);
ps.setString(1, openid);
rs = ps.executeQuery();
while (rs.next()) {
nickName = rs.getString("nickname"); //鏄电О
}
//鍏抽棴閾炬帴
rs.close();
ps.close();
conn.close();
return nickName;
}
//鏁版嵁搴撶殑淇敼(openid鐨勭秮瀹?
public int updateUser(String account,String password,String openid) throws SQLException{
//鍒涘缓鏁版嵁搴撻摼鎺? conn = DriverManager.getConnection(dbUrl, userName, passWord);
String sql = "update user set openid = ? where account = ? and password = ?";
ps = conn.prepareStatement(sql);
ps.setString(1, openid);
ps.setString(2, account);
ps.setString(3, password);
int temp = ps.executeUpdate();
//鍏抽棴閾炬帴
rs.close();
ps.close();
conn.close();
return temp;
}
//post鏂规硶锛岀敤鏉ユ帴鍙楃櫥褰曡姹? @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String account = request.getParameter("account");
String password = request.getParameter("password");
String openid = request.getParameter("openid");
try {
int temp = updateUser(account, password, openid);
if(temp > 0){
String nickname = getNickName(openid);
request.setAttribute("nickname", nickname);
request.getRequestDispatcher("/index2.jsp").forward(request, response);
System.out.println("璐﹀彿缁戝畾鎴愬姛");
}else{
System.out.println("璐﹀彿缁戝畾澶辫触");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
login.jsp锛? <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Insert title here</title>
</head>
<body>
<form action="/WxAuth/wxCallBack" method="post">
<input type="text" name="account" />
<input type="password" name="password" />
<input type="hidden" name="openid" value="${openid }" />
<input type="submit" value="鎻愪氦骞剁粦瀹? />
</form>
</body>
</html>
index.jsp锛? <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Insert title here</title>
</head>
<body style="font-size: 40px; text-align: center;">
<a href="/WxAuth/wxLogin" target="_blank" rel="external nofollow" >寰俊鍏紬鎺堟潈鐧诲綍</a>
</body>
</html>
index1.jsp锛? <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Insert title here</title>
</head>
<body>
<div>鐧婚檰鎴愬姛锛?lt;/div>
<div>鐢ㄦ埛鏄电О:${info.nickname}</div>
<div>鐢ㄦ埛澶村儚:<img style="text-align: top;" width="100" src="${info.headimgurl }"></div>
</body>
</html>
index2.jsp锛? <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Insert title here</title>
</head>
<body>
<div>鐧婚檰鎴愬姛锛?lt;/div>
<div>鐢ㄦ埛鏄电О:${nickname}</div>
</body>
</html>
涓夈€侀」鐩繍琛岋細
鐢佃剳锛? 鎵嬫満锛?娉ㄦ剰锛氫笉鑳界洿鎺ュ湪娴忚鍣ㄤ腑鎵撳紑锛岃鍦ㄥ井淇″鎴风鎵撳紑閾炬帴http://xiaoqiang.tunnel.qydev.com/WxAuth/
聽
鍥涖€侀亣鍒扮殑闂锛?
1.濡傛灉浣犲凡缁忔巿鏉冭繃锛岀數鑴戝鎴风姣旀墜鏈哄鎴风锛堟垜璇曚簡澶氫釜鎵嬫満鍖呮嫭鑻规灉瀹夊崜閮芥槸锛夊涓€涓〉闈紙杩戞湡浣犲凡缁忔巿鏉冪櫥闄嗚繃XXXXX 鑷姩鐧诲綍涓級銆? 鎴戝垎鍒湪鐢ㄦ墜鏈哄拰鐢佃剳鐩存帴鎵撳紑杩欎袱涓綉鍧€锛屽彂鐜版墜鏈鸿繖涓や釜鍦板潃閮芥槸鐩存帴璺宠浆鍒癶ttp://xiaoqiang.tunnel.qydev.com/WxAuth/椤甸潰锛堜綘澶嶅埗璇ラ〉闈㈤摼鎺ュ彲浠ョ湅鍒版湁code鍙傛暟锛屽http://xiaoqiang.tunnel.qydev.com/WxAuth/?code=077zL1rm1c26mp0zxIom1YwXqm1zL1r1&state=123锛夛紝鑰岀數鑴戝湪绗竴涓湴鍧€鍏堝脊鍑衡€滆繎鏈熶綘宸茬粡鎺堟潈鐧婚檰杩嘪XXXX 鑷姩鐧诲綍涓€濋〉闈㈠湪璺宠浆鍒癶ttp://xiaoqiang.tunnel.qydev.com/WxAuth/椤甸潰锛岃€岀浜屼釜鍦板潃鍜屾墜鏈烘晥鏋滀竴鏍烽兘鏄洿鎺ヨ烦杞埌浜嗗洖璋冨湴鍧€銆傦紙鎴戞€€鐤戝井淇″畼鏂瑰仛浜嗙浉搴旂殑澶勭悊锛岀綉涓婁篃娌℃湁鎼滃埌鐩稿簲鐨勮娉曪級
https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxxxxxxxxxxxxx&redirect_uri=http%3A%2F%2Fxiaoqiang.tunnel.qydev.com%2FWxAuth%2F&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxxxxxxxxxxxxx&redirect_uri=http%3A%2F%2Fxiaoqiang.tunnel.qydev.com%2FWxAuth%2F &response_type=code&scope=snsapi_base&state=123#wechat_redirect
2.鍦ㄤ娇鐢╯nsapi_base鐨勬椂鍊欒繕蹇呴』鍦╮edirect_uri鍚庨潰鍔犱笂%0A锛屽惁鍒欒烦杞悗鐨勭綉椤甸摼鎺ヨ繕涓轰笂闈㈢殑閭d釜闀块摼鎺ユ牴鏈病鏈塩ode鍙傛暟锛堣櫧鐒跺鍒堕摼鎺ユ病鏈塩ode鍙傛暟锛屼絾鏄▼搴忛噷鍗磋繕鏄兘鑾峰彇鍒癱ode鍙傛暟涓嶅彈褰卞搷锛夛紝涔熶笉鐭ラ亾鏄负浠€涔堬紝鍨冨溇鑵捐瀹樻柟鏂囨。鍟ヤ篃娌¤锛岃€屼笖浣跨敤snsapi_base璋冪敤鎺ュ彛鏈€缁堜篃鍙互鑾峰緱鐢ㄦ埛鐨勫叾浠栦俊鎭澶村儚鍟婏紝骞朵笉鍍忓畼鏂规枃妗h鐨勬槸鑳借幏寰梠penID銆傜綉涓婃湁绉嶈娉曗€滃鏋滅敤鎴蜂箣鍓嶈繘琛屼簡snsapi_userinfo鎺堟潈锛岄偅涔堝湪涓€瀹氭椂闂村唴杩涜snsapi_base鎺堟潈鎷垮埌鐨刟ccess_token鏄彲浠ユ嬁鍒扮敤鎴蜂俊鎭殑锛岃繖涓椂闂村氨涓嶅ソ娴嬭瘯浜嗐€傗€濆瀮鍦惧畼鏂规枃妗e暐涔熸病璇达紝杩樺緱璁╀汉鐚滐紝鐪熸槸鏈嶄簡銆?
鍙傝€冿細
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
https://www.cnblogs.com/sutao/p/8727019.html