1. 程式人生 > >java開發微信端獲取code和opendId,access_token,使用者列表

java開發微信端獲取code和opendId,access_token,使用者列表

第一步:頁面授權獲取code,去你的微信公眾平臺配置就行

https://open.weixin.qq.com/connect/oauth2/authorize?appid=Appid&redirect_uri=http://xxx/xxx/xxx.html&response_type=code&scope=snsapi_userinfo&state=123&connect_redirect=1#wechat_redirect

(1)appid是你微信公眾平臺裡面->基本配置-->公眾號開發資訊的AppID

(2)redirect_uri後面是你要跳轉的頁面,例如:某域名/page/index.html

(3)其他引數按照我這個寫,或者去看開發文件 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839

(4)然後頁面授權完畢後,自動跳轉到你指定的頁面,在頁面的地址資訊中有你的code資訊,可以在js用var url=location.href;   alert(url)來檢查你的code,然後把code值擷取下來

第二步:發起ajax請求,把code傳到後臺,java後臺訪問   https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=AppSecret&code=CODE&grant_type=authorization_code 地址

(1)引數appid,是你微信公眾平臺上-->基本配置-->公眾號開發資訊的AppID

(2)引數secret,是你微信公眾平臺上-->基本配置-->公眾號開發資訊的開發著密碼(AppSecret)

(3)引數code是你第一步傳過來的獲取到code,通過ajax傳遞過來的

(4)引數grant_type,初學者可以看,微信公眾平臺開發文件 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839  詳細瞭解這個引數

java後臺程式碼

@Controller
@RequestMapping("/login/api")
public class LoginControllerApi {
private final static String appid = "";//自己的配置appid
private final static String appsecret = "";//自己的配置APPSECRET;
@Autowired
private UserService userService;

@RequestMapping("/login")
@ResponseBody
public User login(User user){
//儲存使用者的方法
User user2=this.userService.userLoginCheck(user);

return user2;
}
@ResponseBody
@RequestMapping("/openId")
public void postJsonData(String code,HttpServletResponse response2,HttpSession session) throws IOException {

String requestUrl ="https://api.weixin.qq.com/sns/oauth2/access_token";
CloseableHttpClient httpclient = LoginControllerApi.createDefault();
HttpPost httppost=new HttpPost(requestUrl);

List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("appid", appid));
formparams.add(new BasicNameValuePair("secret", appsecret));
formparams.add(new BasicNameValuePair("code", code));
formparams.add(new BasicNameValuePair("grant_type", "authorization_code"));
CloseableHttpResponse response=null;
try {
httppost.setEntity(new UrlEncodedFormEntity(formparams));
response = httpclient.execute(httppost);

} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject=null;
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
HttpEntity httpEntity = response.getEntity();
String result=null;
try {
result = EntityUtils.toString(httpEntity);
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}// 返回json格式:
jsonObject = JSONObject.fromObject(result);
}

//獲取到opendId後,通過opendId獲取使用者資訊
String access_token=jsonObject.getString("access_token");
String opendId=jsonObject.getString("openid");
//呼叫方法獲取微信端資訊,自己本類中的方法
JSONObject jsonObject1=LoginControllerApi.getUserInfo(access_token, opendId);
User user=new User();
user.setUserOpenId(opendId);
user.setUserImg(jsonObject1.getString("headimgurl"));
//把微信預設的字元編碼ISO-8859-1轉化成utf-8;
byte[] bytes=jsonObject1.getString("nickname").getBytes("ISO-8859-1");
String name=new String(bytes,"utf-8");
user.setUserName(name);
//查詢使用者的方法
User user2=this.login(user);
//放入資料
Map<String,Object> map=new HashMap<String,Object>();
map.put("user", user2);
map.put("user2", user);
Gson gson=new Gson();
String data=gson.toJson(map);
//設定返回的字元編碼
response2.setContentType("text/html;charset=utf-8");
//返回的資料
response2.getWriter().print(data);
//這個返回的是獲取到的資訊
//response2.getWriter().print(jsonObject1.toString());
}
//獲取微信端使用者資訊
public static JSONObject getUserInfo(String access_token,String opendId){
String requestUrl ="https://api.weixin.qq.com/sns/userinfo?"+
"access_token="+access_token+"&openid="+opendId+"&lang=zh_CN";
CloseableHttpClient httpclient = LoginControllerApi.createDefault();
HttpGet httpget=new HttpGet(requestUrl);

CloseableHttpResponse response=null;
try {
response = httpclient.execute(httpget);
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject=null;
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
HttpEntity httpEntity = response.getEntity();
String result=null;
try {
result = EntityUtils.toString(httpEntity);
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}// 返回json格式:
jsonObject = JSONObject.fromObject(result);
}
//String data=jsonObject.toString();
return jsonObject;
}
public static CloseableHttpClient createDefault() {
return HttpClientBuilder.create().build();
}

}

//注:引數是我定義好了的

第三步:處理完畢後,後臺response2.getWriter().print(jsonObject.toString());這個會返回你發起ajax請求的頁面,並在你的successl裡面返回你的值,

.... //ajax請求地址什麼的省略了,本人用的是jq發起的ajax請求,

.....

datatype:json,

success:function(data){

//把返回的json字串轉化成字元輸出

alert(JSON.stringify(data));

}

四:注意的細節,微信給你返回的是ios-8859-1這種格式的編碼,所以如果你通過後臺取值儲存資料庫的時候,一定要把存的可能是中文的值,轉化成你的資料庫編碼格式,一般都是轉化成utf-8

相關推薦

java發微獲取codeopendIdaccess_token,使用者列表

第一步:頁面授權獲取code,去你的微信公眾平臺配置就行 https://open.weixin.qq.com/connect/oauth2/authorize?appid=Appid&redirect_uri=http://xxx/xxx/xxx.html&

Java發微小程式(二)獲取並解密小程式使用者手機資訊

第二篇 獲取並解密小程式的加密資訊包括使用者和手機資訊。 如果對其他的資訊幹興趣,還可以點選以下的連線 1.小程式登入獲取,小程式的openId和unionId。 2.獲取並解密小程式的加密資訊包括使用者和手機資訊。 3.用小程式給使用者推送服務訊息。​​​​​​​ 4.給繫結小

Java發微小程式(一)登入並獲取小程式的openIdunionId

第一篇 小程式登入獲取,小程式的openId和unionId。 最近公司做了一個微信的小程式應用,做了一些技術研究也踩了不少坑,不過最終結果不錯小程式順利上線。 在這裡做一個開發筆記,主要記錄以下幾個方面,分別用四篇文章來記錄: 1.小程式登入獲取,小程式的openId和unionId。

java發微公眾號,公眾號與java後臺獲取連線,自動回覆,關注獲取使用者資訊,取消關注刪除使用者資訊

controller:@RequestMapping(method = { RequestMethod.GET })public void gget(HttpServletRequest request, HttpServletResponse response) throw

第一次接觸 java發微掃碼支付獲取二維碼連結

微信掃碼支付官方文件:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1 1.在官方文件中下載自己要有的sdk (java的SDK 是一個maven專案,它是不能釋出的) 2.在eclipse中引入下

Java發微公眾號(二)--授權網頁獲取使用者資訊

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

java發微獲取網頁授權憑證

/*** 獲取網頁授權憑證* @param appId * @param appSecret* @param code* @return WeixinOauth2Token*/public static WeixinOauth2Token getOauth2AccessToken(String appId,

使用JAVA發微公眾平臺(一)——環境搭建與開發接入

iges 微信平臺 校驗 後臺服務 結果 png 交互 package app 一、 初始微信公眾平臺 微信公眾平臺,即我們平時所說的“公眾號”,曾用名“官方平臺”、“媒體平臺”,但最終命名為&ldq

Java發微小程式(三)用小程式給使用者推送服務訊息

第三篇 用小程式給使用者推送服務訊息 1.小程式登入獲取,小程式的openId和unionId。 2.獲取並解密小程式的加密資訊包括使用者和手機資訊。 3.用小程式給使用者推送服務訊息。 4.給繫結小程式而且又關注微信公眾號的使用者推送公眾號訊息。 小程式訊息推送機制有

java發微公眾號(二)--測試號申請、微java程式碼初步互動

一、申請測試號 個人不能夠免費申請服務號,訂閱號有很多限制,介面許可權出來基本的幾乎沒有,如圖, 在微信公眾平臺,檢視介面許可權 那麼怎麼使用服務號的介面許可權呢?微信推出了測試號,交給大家使用,開通的步驟是: 1.在微信平臺頁面,在服務號中,點選開發者文件 2

Java發微小程式登入介面

先說一下需求吧,小程式微信登入,使用者授權獲取個人資訊。然後儲存使用者基本資訊到系統使用者表,同時新增使用者賬戶資訊,上傳使用者頭像。 emmm..之所以想寫下來是因為自己踩過的坑啊。。就不細說了。 連結: 小程式微信登入官方文件   登入: 之後開發者伺服

Java發微公眾號(二)——開發請求校驗程式

開發IDE:MyEclipse或Eclipse或IDEA都可以,我現在用的是MyEclipse。 請求校驗流程分析 上一篇中我們講了微信開發環境的搭建,下面就來寫請求校驗程式的開發,目的是是為了驗證訊息的確來自微信伺服器。 開發者提交資訊後,微信伺服器將傳送GET

Java發微公眾號(一)——微開發環境搭建

1.開發語言使用Java 2.使用微信介面測試賬號進行本地測試 3.使用natapp(原ngrok)將本地地址對映到外網地址實現微信公眾號的本地除錯 準備工作 最近學習微信公眾平臺的開發,在申請一個微信公眾號的時候,發現如果不是公司或組織只能申請訂閱號(並且是個

java發微公眾號支付(JSAPI)

https://www.cnblogs.com/gopark/p/9394951.html,這篇文章寫的已經很詳細了。 下面寫一下自己的思路: 1.首先下載demo,地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 2.de

java發微支付(刷卡支付)

本人從微信官網下得 SDK  路徑: https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=11_1 下載解壓得到 得到上面的jar包,不用懷疑,這個就是我們需要的。沒錯,如果你想看這個jar的原始碼。

java發微分享到朋友圈功能

微信分享功能開發 用了一天時間,把微信傳送給朋友和分享到朋友圈功能開發出來,在這裡給大家分享一下,避免大家走彎路。 一、伺服器端程式package com.wiimedia.controller; import java.io.IOException; import java.security

java發微公眾號接受並回復訊息[工程程式碼+圖片全解]

寫這篇部落格時猶豫了好久,因為步驟太多了,上班了也沒時間,但是我依然記得當時實現公眾號自動回覆時的場景,找個案例好 難,也沒有一個完整的案例,想了想還是寫出來吧,希望能讓實現這功能的人少走彎路。 微信公眾號平臺也有自定義回覆訊息,比如我在公眾號裡傳送關注你,

Java發微公眾號(一)--微開發環境搭建

原文地址: https://blog.csdn.net/rongxiang111/article/details/78765514 1.開發語言使用Java  2.使用微信介面測試賬號進行本地測試  3.使用natapp(原ngrok)將本地地址對映到外網地址實現微信

java發微公眾號支付

String strAttach = "微信支付"; //strAttach = new String(strAttach.getBytes("gbk"),"utf-8"); String strBody = "微信公眾號支付"; //strBody = ne

java發微自動回覆文字訊息換行的問題。

微信可以識別<a>標籤,但是要是標準格式。 另外微信也能識別\n換行符。 不過,如果\n換行符在<a>標籤內是無法識別的,會導致<a>標籤以原始碼的方式顯示出來。 \n放在<a>標籤之外可以正常顯示。