⑴ 微信支付成功後返回postData xml 用戶信息java怎麼獲取
java有dom4j 去解析xml。
publicstaticMap<String,String>parseXml(HttpServletRequestrequest)
throwsException{
//解析結果存儲在HashMap
Map<String,String>map=newHashMap<String,String>();
InputStreaminputStream=request.getInputStream();
//讀取輸入流
SAXReaderreader=newSAXReader();
Documentdocument=reader.read(inputStream);
//得到xml根元素
Elementroot=document.getRootElement();
//得到根元素的所有子節點
List<Element>elementList=root.elements();
//遍歷所有子節點
for(Elemente:elementList)
map.put(e.getName(),e.getText());
//釋放資源
inputStream.close();
inputStream=null;
returnmap;
}
後面取值不用我寫了把。Map類型
⑵ 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獲取用戶信息,具體可以查看微信開發的api文檔
⑷ JAVA關於微信OpenId獲取問題
如果你不是認證了的服務號,那麼抱歉,你獲得不了用戶的微信號,所以根本判斷不了他是否關注了。如果你是擁有高級介面的服務號,那麼你可以獲得關注用戶OpenID列表和訪問用戶的OpenID,查找一下就能確定是否關注了。
⑸ Java後端小程序微信登錄怎麼寫
其實還蠻簡單的,可以說一搜一大把,下面說下兩種方式。
自行開發
主要就是通過小程序端直接請求登錄獲取到code(登錄憑證)、如果需要獲取用戶手機號則需要再次授權需要iv和encryptedData,注意這里授權兩次,也可以作為一次處理。
(1) 後端接收到小程序端請求的code,進行解密,可以參考微信小程序開發文檔,拿到openId和session_key,這一步如果是已經注冊的用戶可以直接將後台分配的token一起組成對象存儲到redis中,期限7-30天皆可,先從redis判定這個openId是否已經解析過且已存儲為正式用戶,是則直接返回系統的登錄憑證完成登錄。如果不是就需要走第二步。
(2)通過iv和encryptedData解析獲取用戶的手機號,完成解析後將用戶信息存儲,並一樣存儲到資料庫和redis中,返回憑證。
2. 使用已經集成好的sdk,使用maven項目直接引入對象的jar即可。
舉個栗子weixin-java-miniapp 可以看下對應的文檔說明,使用已經集成好的方法即可。