1. 程式人生 > >微信公眾號授權登入(java實現)

微信公眾號授權登入(java實現)

步驟:
1、 使用第三方工具,生成內網對映
2、 微信公眾平臺使用測試賬號
3、 測試賬號中需要配置自己的域名,並關注該臨時測試使用的公眾號
4、 下載一個瀏覽器的二維碼外掛
4、 編碼測試

  • 使用花生殼進行內網穿透
    這裡寫圖片描述
    注意,因為我使用的是8080埠,所以對映成內網埠設定為8080才有效

  • 微信公眾號使用測試賬號以及配置

首先進入微信公眾號官網,登陸後的頁面下拉,左下角即有開發者工具
這裡寫圖片描述

選擇測試賬號
這裡寫圖片描述

進入後即可看到提供測試用的appID和appsecret,這在後續會用到
這裡寫圖片描述

再關注這個公眾號
這裡寫圖片描述

並且需要在網頁賬號這兒配置自己的域名
這裡寫圖片描述

點選修改
這裡寫圖片描述

最後下載個二維碼外掛,以便在微信手機端登入

  • 編碼:java

1 第一步:使用者同意授權,獲取code
2 第二步:通過code換取網頁授權access_token
3 第三步:重新整理access_token(如果需要)
4 第四步:拉取使用者資訊(需scope為 snsapi_userinfo)
5 附:檢驗授權憑證(access_token)是否有效
具體資訊見官網

maven工程,pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation
="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>login</groupId> <artifactId>wechat</artifactId> <packaging>war</packaging> <version>1.0</version> <name>
wechat Maven Webapp</name> <url>http://maven.apache.org</url> <profiles> <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile> </profiles> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <scope>provided</scope> <version>3.0-alpha-1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- 沒用到 --> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.4</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.2</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <!-- https://mvnrepository.com/artifact/org.json/json --> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20160810</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.4</version> </dependency> </dependencies> <build> <finalName>wechat</finalName> </build> </project>

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>CallBackServlet</servlet-name>
        <servlet-class>servlet.CallBackServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/wxLogin</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>CallBackServlet</servlet-name>
        <url-pattern>/wx/callBack</url-pattern>
    </servlet-mapping>
</web-app>

AuthUtil.java發起http請求的工具類
若不熟悉httpClient相關知識,可以參考這篇文章:
HttpClient伺服器模擬瀏覽器傳送請求

package Utils;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

import java.io.IOException;


public class AuthUtil {
    public static final String APPID="wx893db98985206df6";
    public static final String APPSECRET="a7681bcfbd70c0beb497715bfa1fb35a";
    public static JSONObject doGetJson(String url) throws IOException {
        JSONObject jsonObject=null;
        DefaultHttpClient defaultHttpClient=new DefaultHttpClient();
        HttpGet httpGet=new HttpGet(url);
        HttpResponse httpResponse = defaultHttpClient.execute(httpGet);
        HttpEntity httpEntity=httpResponse.getEntity();
        if(httpEntity!=null){
            String result= EntityUtils.toString(httpEntity,"UTF-8");
            jsonObject=new JSONObject(result);
            //System.out.println("jsonObject:  "+jsonObject);
        }
        httpGet.releaseConnection();
        return jsonObject;
    }
}

LoginServlet登入請求處理

package servlet;

import Utils.AuthUtil;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;

/**
 * Created by asus on 2017/8/2.
 */

public class LoginServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String backUrl="http://3261045722cwy.vicp.io/wx/callBack";
        /**
        *這兒一定要注意!!首尾不能有多的空格(因為直接複製往往會多出空格),其次就是引數的順序不能變動
        **/
        String url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + AuthUtil.APPID+
                "&redirect_uri=" + URLEncoder.encode(backUrl,"UTF-8")+
                "&response_type=code" +
                "&scope=snsapi_userinfo" +
                "&state=STATE#wechat_redirect";
        resp.sendRedirect(url);
    }
}

CallBackServlet處理回撥請求

package servlet;

import Utils.AuthUtil;
import org.json.JSONObject;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Created by asus on 2017/8/2.
 */
public class CallBackServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hahah");
        String code=req.getParameter("code");
        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);
        String openid=jsonObject.getString("openid");
        String token=jsonObject.getString("access_token");
        String infoUrl="https://api.weixin.qq.com/sns/userinfo?access_token=" +token+
                "&openid=" +openid+
                "&lang=zh_CN";
        JSONObject userInfo=AuthUtil.doGetJson(infoUrl);
        System.out.println(userInfo);
    }
}

相關推薦

公眾授權登入java實現

步驟: 1、 使用第三方工具,生成內網對映 2、 微信公眾平臺使用測試賬號 3、 測試賬號中需要配置自己的域名,並關注該臨時測試使用的公眾號 4、 下載一個瀏覽器的二維碼外掛 4、 編碼測試 使用花生殼進行內網穿透 注意,因為我使用的是808

公眾平臺授權登入java

微信公眾平臺授權登入獲取使用者openid。 微信公眾平臺地址:https://mp.weixin.qq.com/ 微信平臺配置: 2、修改配置 2.1  業務域名配置 JS介面安全域名、網頁授權域名 同理操作就可以了,正常操作業務域名就完成了,剩下兩個步驟直

公眾支付/退款java環境開發介紹

開發之前翻閱了很多帖子,結合自己的實際開發情況,將微信支付/退款 流程以及code貼出,希望通過這一篇帖子就能解決你的問題,有不清楚的直接留言,我會及時回覆(ง •̀_•́)ง   一些說明:xxxUtils為工具類,Constant為常量類 為方便開發,所用和微信支付相關co

公眾 授權登入 JAVA

微信授權登入 java 首先 騰訊那麼大的公司 文件寫的那麼low 微信那麼火 demo寫的那麼差 我就想說一句  微信簡直就是在歧視Java   我這邊自己整合了下 微信支付和微信登入 java的程式碼  我打包出來了 不是讓你們直接使用的 是需要你們自己看看 借鑑的 h

java實現公眾授權登入獲取使用者資訊流程

參考地址微信公眾號開發文件:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432 前提:需要申請認證的微信公眾號;獲取對應的APPID和APPSECRET;並且還需要獲取到使用者資訊許可權

公眾授權登入laravel

namespace App\Http\Controllers; use Illuminate\Http\Request; use Validator; use Session; use App\Http\Requests; use App\Http\Controller

公眾授權登入之二tp5

public function _initialize(){//檢視使用者是否授權登入過 沒有的話跳轉到授權登入頁面 if(empty(session::get('user'))) { $this->redirect('user/login');

Asp.net 如何實現公眾授權登入

第一個類:封裝好微信配置檔案 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Web; using Newton

公眾授權登入weixin4j開發

登入微信公眾號配置網頁授權目錄 在專案中引入maven依賴 <dependency> <groupId>com.foxinmy</groupId> <artifactId>weixin4j-m

公眾授權登入

說明:如果使用者在微信客戶端中訪問第三方網頁,公眾號可以通過微信網頁授權機制,來獲取使用者基本資訊,進而實現業務邏輯。 1、授權回撥域名 首先,先登入微信公眾平臺填寫授權回撥頁面域名(可以申請公眾平臺測試賬號進行開發),回撥頁面域名是你的第三方跳轉域名,不需要加http,

公眾 - 下拉展開/隱藏

itl device doctype lang pan 內容 pre con -s 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta ch

公眾支付教程前端部分

微信內H5發起支付一共有兩種方法:     1.呼叫微信內建js物件 WeixinJSBridge 發起支付具體方法為 WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId":"

公眾最佳實踐 9.1會員卡

會員卡 會員卡一般是指企業發行的用於識別顧客身份的卡片,普片用於服務行業,他是公司宣傳的理想載體,能夠吸引新顧客,留住老顧客,增強顧客忠誠度的作用,還能實現打折,積分等功能。 頁面佈局 準備素材,包括會員卡的正面和反面圖片 - - 大小固

公眾最佳實踐 4.6生成帶引數二維碼

<?php $appid = "wxd1fc65357aca6efa"; $appsecret = "55a5a3a73b3f1603240a1c27cb0b270f"; $url = "https://api.weixin.qq.com/cgi-bin/token?grant

Python-快速實現公眾自動回覆聊天機器人

原理:通過微信公眾號提供的開發者模式,利用Python搭建環境,實現自動回覆,回覆內容通過呼叫圖靈機器人的API 配置:伺服器(這裡是阿里雲主機,Ubuntu),公眾號,圖靈機器人 一,公眾平臺上進行開發配置 三種加密方式,按需選擇。第一種最簡單,最不安全(我這裡選擇的第

公眾最佳實踐 3.2 被動回覆使用者訊息

<?php // // 響應使用者訊息 // 微信公眾賬號響應給使用者的不同訊息型別 // define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); if (!isset($_GET['echostr'])) {

普通js使用ajax,公眾授權網頁授權

微信授權的整個流程: 引導使用者進入授權頁面同意授權,獲取code 通過code換取網頁授權access_token(與基礎支援中的access_token不同) 如果需要,開發者可以重新整理網頁授權access_token,避免過期 通過網頁授權access_tok

vue腳手架,公眾授權網頁授權

如果使用者在微信客戶端中訪問第三方網頁,公眾號可以通過微信網頁授權機制,來獲取使用者基本資訊,進而實現業務邏輯。 首先我做了一個H5小專案,然後申請公眾號,然後在【自定義選單】中輸入想填寫的,公眾號選單名稱,以及頁面地址: 然後,我們在我們的前端頁面寫呼叫伺服器介面,得到授權。當然

java公眾開發三支付

步驟一:我們需要將微信支付所需要的引數組裝好,然後傳送請求。 所需要的引數在微信支付開發文件中就可以找到我們所必須的11個引數。 步驟二:然後在回撥函式中處理我們支付後的業務邏輯。 /** * * 獲得威微信支付的相關引數

公眾獲取OpenId使用者授權無需關注公眾以及獲取使用者基本資訊

上一個部落格也寫了微信公眾號獲取OpenId,但是現在這個和上一個有什麼區別呢。 其實呢,是差不多的,只是這個是通過使用者授權。 但是,又會有人問了,明明可以未授權獲取到使用者的openId,那我為什麼要讓使用者進行授權呢,我偷偷的獲取不就好了嗎? 好像很有道理,但是呢,