天天看点

微信开发一--网页授权

鍔熻兘锛?/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

继续阅读