導航:首頁 > 編程語言 > java微信openid

java微信openid

發布時間:2023-01-11 06:16:20

㈠ 你好,看到您提問OAuth2.0網頁授權微信怎麼用java獲取openid

  1. 首先需要在微信後台的網頁授權那邊添加你的信任的域名下地址

  2. 頁面上獲取code參數

    function getQueryString(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;
    }

var code = "";
$(function(){
code = getQueryString('code');

。。。。。

3.傳入code調用介面獲取openid

public static String oauth2GetOpenid(String code) {
HttpClient client = null;
String result = "";
try {
client = new DefaultHttpClient();
HttpGet httpget = new HttpGet("https://api.weixin.qq.com/sns/oauth2/access_token?appid="+Constant.WECHATAPPID+"&secret="+Constant.WECHATAPPSECRET+"&code="+code+"&grant_type=authorization_code");
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response = client.execute(httpget, responseHandler);
Object obj = JSONValue.parse(response);
JSONObject jbt = (JSONObject) obj;
result = String.valueOf(jbt.get("openid"));
} catch (Exception e) {
e.printStackTrace();
} finally {
client.getConnectionManager().shutdown();
}
return result;
}

㈡ java怎麼獲取微信的openid

1 首先,我們需要進入我們的服務號,點擊左側欄開發者中心--->修改網頁授權獲取用戶基本信息的值,假設我們對外的ip為183.33.212.175,tomcat的埠號為8016,這個修改為183.33.212.175:8016。
2 創建WeiXinOauth2Token類。該類具有以下屬性:(自行添加get,set方法)

private String accessToken;

private int expiresIn;

private String refeshToken;

private String openId;

private String scope;
3 調用微信的授權介面

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
4 然後將redirect_uri進行encode
5 獲取用戶openid

㈢ javaopenid換微信昵稱

小程序前端 app.js

wx.login({

success: res => {

// 發送 res.code 到後台換取 openId, sessionKey, unionId

if(res.code){

wx.getUserInfo({

success: function(res_user){

wx.request({

url: 'http://192.168.xx.xx:8080/test/v1/getOpenId', //這里是本地請求路徑,可以寫你自己的本地路徑,也可以寫線上環境

data: {

code: res.code,//獲取openid的話 需要向後台傳遞code,利用code請求api獲取openid

hearl: res_user.userInfo.avatarUrl,//這些是用戶的基本信息

nickname:res_user.userInfo.nickName,//獲取昵稱

sex:res_user.userInfo.gender,//獲取性別

country: res_user.userInfo.country,//獲取國家

province: res_user.userInfo.province,//獲取省份

city: res_user.userInfo.city//獲取城市

},

success: function(res){

wx.setStorageSync("openid", res.data)//可以把openid保存起來,以便後期需求的使用

}

})

}

})

}

}

})

一些詳細的參數請參考微信api:https://mp.weixin.qq.com/debug/wxadoc/dev/api/open.html#wxgetuserinfoobject

下來就是Java 上面這是controller,其中有些地方也是取別人的優點寫的

@ResponseBody
@RequestMapping(value = "/getOpenId", method = RequestMethod.GET) // 獲取用戶信息
public String getOpenId(@Param("code") String code, @RequestParam("hearl") String hearl,
@RequestParam("nickname") String nickname, @RequestParam("sex") String sex,
@RequestParam("country") String country, @RequestParam("province") String province,
@RequestParam("city") String city) {
String WX_URL = "https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code";
try {
if (StringUtils.isBlank(code)) {
System.out.println("code為空");
} else {
String requestUrl = WX_URL.replace("APPID", WxConfig.APPID).replace("SECRET", WxConfig.APPSECRECT)
.replace("JSCODE", code).replace("authorization_code", WxConfig.GRANTTYPE);
JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null);
if (jsonObject != null) {
try {
// 業務操作
String openid = jsonObject.getString("openid");
wechatService.selectUserByOpenId(openid, hearl, nickname, sex, country, province, city);
return openid;
} catch (Exception e) {
System.out.println("業務操作失敗");
e.printStackTrace();
}
} else {
System.out.println("code無效");
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "錯誤";
} //可能代碼復制過來,錯位了,你們自己格式化一下吧。
登錄後復制

首先獲取openid根據文檔需要訪問一個https介面 如下:

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

appid是你小程序的appid,secret是你小程序的appsercet,js_code是前台登陸成功後返回給你的code,grant_type為固定值authorization_code.

appid跟secret的查看在微信公眾平台:https://mp.weixin.qq.com/

注意:appid跟secret只有小程序的管理員可以看到,如果只是有許可權的話,還是看不到,必須管理員掃碼才可以看到,進去之後就在 設置→→→開發設置

controller中涉及到三個類,CommonUtil是用來請求微信介面的,TrustManager是管理器,WxConfig是配置一些你的小程序 信息

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;

import net.sf.json.JSONObject;

public class CommonUtil {
/**
* 發送https請求
* @param requestUrl 請求地址
* @param requestMethod 請求方式(GET、POST)
* @param outputStr 提交的數據
* @return JSONObject(通過JSONObject.get(key)的方式獲取json對象的屬性值)
*/
public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {
JSONObject jsonObject = null;
try {
// 創建SSLContext對象,並使用我們指定的信任管理器初始化
TrustManager[] tm = { new MyX509TrustManager() };
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
// 從上述SSLContext對象中得到SSLSocketFactory對象
SSLSocketFactory ssf = sslContext.getSocketFactory();

URL url = new URL(requestUrl);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(ssf);

conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
// 設置請求方式(GET/POST)
conn.setRequestMethod(requestMethod);

// 當outputStr不為null時向輸出流寫數據
if (null != outputStr) {
OutputStream outputStream = conn.getOutputStream();
// 注意編碼格式
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}

// 從輸入流讀取返回內容
InputStream inputStream = conn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
StringBuffer buffer = new StringBuffer();
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}

// 釋放資源
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
inputStream = null;
conn.disconnect();
jsonObject = JSONObject.fromObject(buffer.toString());
} catch (ConnectException ce) {
System.out.println("連接超時");
} catch (Exception e) {
System.out.println("請求異常");
}
return jsonObject;
}
}
登錄後復制


import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

/**
* 類名: MyX509TrustManager.java</br>
* 描述: 信任管理器</br>
* 開發人員:wangl</br>
* 創建時間: 2018-01-09</br>
*/
public class MyX509TrustManager implements X509TrustManager {

// 檢查客戶端證書
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}

// 檢查伺服器端證書
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}

// 返回受信任的X509證書數組
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
登錄後復制


有了這兩個類就可以獲取到用戶的openid了,大家都知道,保存用戶的昵稱跟頭像是沒什麼用的,但是需求有需要,只好保存 了,下面我貼出業務層代碼,哈哈哈哈哈,我只是在瞎搞,自己練習,如果代碼有什麼可笑的地方不要噴我。

如果用戶更換了頭像或者昵稱,我們並不知道用戶什麼時候更換,所以我想了一種方法,判斷用戶是否改變數據,如果改變數據的話,我們再進行資料庫的操作,如果不改變的話直接return返回,結束操作。

下面這段代碼是ServiceImpl類。

public void selectUserByOpenId(String openid, String hearl, String nickname, String sex, String country,
String province, String city) {
String userip = country+province+city;//用戶地址
String usersex = "";
User user = mapper.selectUser(openid);
if(user!=null){//如果用戶不等於空
if(user.getNickname().equals(nickname)&&user.getHearl().equals(hearl)&&user.getSex().equals(sex)&&user.getUserip().equals(userip)){
System.out.println("數據暫未修改");
return;
}else{
try {
mapper.updateUserMseeage(openid,nickname,hearl,sex,userip);
System.out.println("修改數據成功");
} catch (Exception e) {
System.out.println("修改數據失敗");
e.printStackTrace();
}

}
}else{//用戶為空進行
try {
String phone = "";
String createtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
mapper.initUser(openid,nickname,hearl,phone,sex,userip,createtime);
} catch (Exception e) {
System.out.println("初始化錯誤");
e.printStackTrace();
}
}
}
登錄後復制


QQ:434494584

關於微信公眾號獲取openId,請點擊https://blog.csdn.net/qq_39851704/article/details/89174501

小程序獲取openid加java後台代碼
小程序
小程序java後台
屬羊人要「沉住氣」,別跟這個人分開,是來「擁護」你成事的
麥玲玲僅供娛樂
廣告

微信小程序wx.getUserInfo授權獲取用戶信息(頭像、昵稱)的實現
37下載·0評論
2020年10月14日
java微信小程序授權 獲取用戶信息、獲取openid和session_key 獲取用戶unionId、(用戶數據的簽名驗證和加解密)JAVA版
5.8W閱讀·63評論·42點贊
2018年5月9日
Java後台實現網站微信掃碼登錄功能,獲取用戶openid,及微信用戶信息(小程序碼方案),關聯微信小程序(個人主體小程序也可以)
1098閱讀·0評論·2點贊
2022年10月26日
微信小程序請求後台介面(完整版)
1.5W閱讀·0評論·17點贊
2020年7月20日
java實現微信授權獲取用戶openid及授權用戶相關信息
2.2W閱讀·12評論·5點贊
2018年1月9日
java微信獲取用戶信息_Java微信公眾平台開發(十)--微信用戶信息的獲取
252閱讀·0評論·0點贊
2021年2月12日

電馬新能源車24.99萬元起,現車交付!
電馬新能源車
廣告
微信小程序獲取用戶信息(昵稱、頭像、openid等)
8480閱讀·2評論·2點贊
2021年6月22日
通過微信用戶的openid獲取用戶的頭像,昵稱,性別等信息!
7.3W閱讀·6評論·5點贊
2018年7月16日
java 根據openid查詢_java 根據openId獲取用戶基本信息
1060閱讀·0評論·0點贊
2021年3月16日
java後端實現微信登錄獲取code,後端獲取code、openid以及用戶信息數據
5662閱讀·8評論·1點贊
2021年11月30日
微信小程序如何獲取微信昵稱和頭像
1.7W閱讀·2評論·8點贊
2022年3月1日
java獲取微信用戶openid
1.3W閱讀·1評論·0點贊
2018年7月6日
微信小程序獲取用戶信息(getUserProfile介面回收後)——通過頭像昵稱填寫獲取用戶頭像和昵稱
724閱讀·0評論·0點贊
2022年11月24日
java獲取openid_JAVA獲取微信小程序openid和獲取公眾號openid,以及通過openid獲取用戶信息...
1229閱讀·0評論·0點贊
2021年2月12日
java後台微信小程序獲取手機號
1794閱讀·1評論·1點贊
2020年9月25日
微信小程序——獲取用戶手機號(Java後台)
1285閱讀·0評論·1點贊
2022年8月25日
java微信小程序獲取用戶openid_微信小程序授權獲取用戶詳細信息openid的實例詳解...
632閱讀·0評論·0點贊
2021年3月8日
java微信開發-之如何獲取openid 和用戶信息
3.5W閱讀·18評論·8點贊
2016年12月6日
微信公眾號H5獲取用戶openid等用戶信息(java)
1182閱讀·1評論·3點贊
2021年11月4日
去首頁
看看更多熱門內容
評論14

for__rain


就這個發送http請求,看了一堆憨憨的操作,總算找到這個好用的啦,謝謝
2019.10.21

煙雨驚蟄


[code=java] //幫你們補上WxConfig public class WxConfig { public static String APPID = "你的APPID "; public static String APPSECRECT = "你的APPSECRECT "; public static String GRANTTYPE = "你的GRANTTYPE "; } [/code]
2019.04.09

薩埵十二


大哥您好,我想請問一下,沒有appid可以獲取用戶的openid么?

㈣ java怎麼獲取微信的openid

看官方說明,首先你要有一個公眾號,openid需要在公眾號內添加菜單,跳轉到你的獨立應用去獲取,同一個用戶在不同公眾號下openid不同。

㈤ 微信java開發中有openid網頁如何跳回到微信

你是做什麼?一般網頁不能主動拉起微信,而是通過調用微信介面來處理

㈥ java怎麼獲取微信的openid

你好,提問者
獲取微信的 openid你必須要通過 OAuth2.0來完成網頁授權!在項目中,讓用戶關注,就已經獲取到他的微信 OpenID了,再從介面中獲取就可以了!

㈦ java怎麼獲取微信的openid

官網有相關的demo,通過accesstoken來換取openid

㈧ java怎麼獲取微信的openid

java獲取微信的openid的方法是根據授權code來獲取的,方法如下:
一個Servlet請求 獲取code:
/**
* 根據code取得openId
*
* @param appid 公眾號的唯一標識
* @param secret 公眾號的appsecret密鑰
* @param code code為換取access_token的票據
* @return
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//參數
String code = request.getParameter("code");

if(null != code && !"".equals(code)){
log.info("==============[OAuthServlet]獲取網頁授權code不為空,code="+code);
//根據code換取openId
OAuthInfo oa = WeixinUtil.getOAuthOpenId(Constants.appId,Constants.appSecret,code);
UserInfo info = WeixinUtil.getUserInfo(oa.getAccessToken(), oa.getOpenId());
if(!"".equals(oa) && null != oa){
request.setAttribute("openid", oa.getOpenId());
request.setAttribute("nickname", info.getNickname());
request.getRequestDispatcher("/index.jsp").forward(request, response);

}else{
log.info("==============[OAuthServlet]獲取網頁授權openId失敗!");
}
}else{
log.info("==============[OAuthServlet]獲取網頁授權code失敗!");
}
}

替換相應的APPID APPSECRET SCOPE。
過code換取網頁授權access_token 這里的access_token與基礎獲取的access_token不同

獲取code後,請求以下鏈接獲取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

具體做法與上面基本一致。更換相對應的值。需要注意的是code可以寫一個Servlet獲取。String code = request.getParameter("code");get/post都可以。
這樣子就會返回一下json格式數據
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}

閱讀全文

與java微信openid相關的資料

熱點內容
怎麼升級手機android 瀏覽:922
php權威編程pdf 瀏覽:994
扣扣加密技巧 瀏覽:720
蘋果如何創建伺服器錯誤 瀏覽:495
軟考初級程序員大題分值 瀏覽:473
js壓縮視頻文件 瀏覽:578
linux如何通過命令創建文件 瀏覽:989
應用加密app還能訪問應用嘛 瀏覽:433
安卓怎麼用支付寶交違章罰款 瀏覽:665
php面向對象的程序設計 瀏覽:504
數據挖掘演算法書籍推薦 瀏覽:894
投訴聯通用什麼app 瀏覽:150
web伺服器變更ip地址 瀏覽:954
java正則表達式驗證郵箱 瀏覽:361
成熟商務男裝下載什麼軟體app 瀏覽:609
加密2h代表長度是多少厘米 瀏覽:23
拍賣程序員 瀏覽:103
電腦的圖片放在哪個文件夾 瀏覽:276
unsignedintjava 瀏覽:218
編譯器下載地址 瀏覽:44