微信公眾號授權登入(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,那我為什麼要讓使用者進行授權呢,我偷偷的獲取不就好了嗎? 好像很有道理,但是呢,