激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務器之家 - 編程語言 - JAVA教程 - java微信開發(fā)API第三步 微信獲取以及保存接口調用憑證

java微信開發(fā)API第三步 微信獲取以及保存接口調用憑證

2020-05-22 10:35wgyscsf JAVA教程

這篇文章主要為大家詳細介紹了java微信開發(fā)API第二步,微信獲取以及保存接口調用憑證,感興趣的小伙伴們可以參考一下

微信如何獲取以及保存接口調用憑證,下面就為大家進行介紹

一、說明
*詳細說明請參考前兩篇文章。
*本文分為三部分:
    接口調用憑證access_token的作用以及解釋
    如何獲取接口調用憑證access_token
    如何實現微信文檔所說的“中控服務器”的實現以保存access_token
* 本文結束會給出包括本文前三篇文章的所有演示源碼

 為什么要獲取和保存接口調用憑證access_token
 •開始開發(fā)-獲取接口調用憑據
?文檔地址:http://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html

 •官網文檔給出這樣解釋:
?access_token是公眾號的全局唯一票據,公眾號調用各接口時都需使用access_token。開發(fā)者需要進行妥善保存。access_token的存儲至少要保留512個字符空間。access_token的有效期目前為2個小時,需定時刷新,重復獲取將導致上次獲取的access_token失效。

 •理解:
?我們簡單翻閱文檔可以發(fā)現,許多高級功能,例如:自定義菜單、素材管理、用戶管理、賬號管理等各種高級功能請求的鏈接中都有“?access_token=TOKEN”這個參數,這是全局調用參數,微信后臺需要根據這個參數確定身份,保證我們的微信公眾號的安全。
 ?為了防止公眾號的程序錯誤而引發(fā)微信服務器負載異常,默認情況下,每個公眾號調用接口都不能超過一定限制,這里微信限制每天2000次。所以,如果我們想要頻繁調用這個參數,需要我們開發(fā)者手動保存,每個access_token有效期是2個小時。

獲取接口調用憑證access_token
•官網文檔給出這樣解釋:
?接口調用請求說明

http請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
■返回說明

正常情況下,微信會返回下述JSON數據包給公眾號:
{“access_token”:”ACCESS_TOKEN”,”expires_in”:7200}

錯誤時微信會返回錯誤碼等信息,JSON數據包示例如下(該示例為AppID無效錯誤):
{“errcode”:40013,”errmsg”:”invalid appid”}

•理解:
?GET請求,該方式直接在本地就可以實現。因為只是一個普通的GET請求,類似于訪問網址。所以,不需要上傳該部分代碼到服務器就可以直接操作。
 ?http請求協議是GET請求,說明我們需要通過GET請求獲取返回流,返回流是json形式。調用時我們需要攜帶三個參數:grant_type、appid、secret。其中appid和secret是我們微信公眾號關鍵的參數,在前文已經闡述。返回結果分為正確和錯誤兩種結果。【百度:json】
 ?其實,我們可以直接在地址欄輸入文檔給的示例:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET,我們會看到這樣的信息:“{“errcode”:40013,”errmsg”:”invalid appid hint: [pQKl0120ic11]”}”,因為這是一個無效的請求,返回的是錯誤的結果。
 ?當我們把自己的測試號APPID和APPSECRET替換上面的那兩個參數,會看到這樣的信息:“{“access_token”:”XrllR3fNf…bADAMIO”,”expires_in”:7200}”,代表獲取成功。
 ?現在我們通過java 代碼獲取返回流,拿取access_token。

 •實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
private static final long MAX_TIME = 7200 * 1000;// 微信允許最長Access_token有效時間(ms)
private static final String TAG = "WeixinApiTest";// TAG
private static final String APPID = "wx889b****b3666b0b8";// APPID
private static final String SECERT = "6da7676***f0a9f15fbf06027856bb";// 秘鑰
 
/*
 * 該測試用例演示了如何獲取access_token。
 * access_token是公眾號的全局唯一票據,公眾號調用各接口時都需使用access_token。
 */
@Test
public void getAccess_token() throws IOException {
  // 拼接api要求的httpsurl鏈接
  String urlString = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
      + APPID + "&secret=" + SECERT;
  // 創(chuàng)建一個url
  URL reqURL = new URL(urlString);
  // 拿取鏈接
  HttpsURLConnection httpsConn = (HttpsURLConnection) reqURL
      .openConnection();
  // 取得該連接的輸入流,以讀取響應內容
  InputStreamReader isr = new InputStreamReader(
      httpsConn.getInputStream());
  // 讀取服務器的響應內容并顯示
  char[] chars = new char[1024];
  String reslut = "";
  int len;
  while ((len = isr.read(chars)) != -1) {
    reslut += new String(chars, 0, len);
  }
  isr.close();
  /*
   * 轉化json成javabean。引入了第三方jar:GSON
   */
  Gson gson = new Gson();// 將獲取的json轉化為java中的bean
  // 注意:Access_token access_token是一個自己創(chuàng)建的javabean
  Access_token access_token = gson.fromJson(reslut,
      new Access_token().getClass());
  if (access_token.getAccess_token() != null) {
    System.out.println("獲取的access_token是:"
        + access_token.getAccess_token());
    System.out.println("該access_token的有效時間是:"
        + access_token.getExpires_in() + "s");
  } else {
    System.out.println(TAG + "獲取access_token失敗,請檢查");
 
  }
 
}

保存接口調用憑證access_token
 •思路

將獲取到的Access_token和當前時間存儲到file里, 取出時判斷當前時間和存儲里面的記錄的時間的時間差,如果大于MAX_TIME,重新獲取,并且將獲取到的存儲到file替換原來的內容,如果小于MAX_TIME,直接獲取。

 •實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
 * 該方法實現獲取Access_token、保存并且只保存2小時Access_token。如果超過兩個小時重新獲取;如果沒有超過兩個小時,直接獲取。該方法依賴
 * :public static String getAccessToken();
 *
 * 思路:將獲取到的Access_token和當前時間存儲到file里,
 * 取出時判斷當前時間和存儲里面的記錄的時間的時間差,如果大于MAX_TIME,重新獲取,并且將獲取到的存儲到file替換原來的內容
 * ,如果小于MAX_TIME,直接獲取。
 */
@Test
public void getSavedAccess_token() throws IOException {
  Gson gson = new Gson();
  String mAccess_token = null;// 需要獲取的Access_token;
  File file = new File("temp_access_token.temp");// Access_token保存的位置
  // 如果文件不存在,創(chuàng)建
  if (!file.exists())
    file.createNewFile();
  // 如果文件大小等于0,說明第一次使用,存入Access_token
  if (file.length() == 0) {
    mAccess_token = getAccessToken();
    FileOutputStream fos = new FileOutputStream(file, false);// 不允許追加
    Access_token at = new Access_token();
    at.setAccess_token(mAccess_token);
    at.setExpires_in(System.currentTimeMillis() + "");
    String json = gson.toJson(at);
    fos.write((json).getBytes());
    fos.close();
  } else {
    // 讀取文件內容
    FileInputStream fis = new FileInputStream(file);
    byte[] b = new byte[2048];
    int len = fis.read(b);
    String mJsonAccess_token = new String(b, 0, len);// 讀取到的文件內容
    Access_token access_token = gson.fromJson(mJsonAccess_token,
        new Access_token().getClass());
    if (access_token.getExpires_in() != null) {
      long saveTime = Long.parseLong(access_token.getExpires_in());
      long nowTime = System.currentTimeMillis();
      long remianTime = nowTime - saveTime;
      // System.out.println(TAG + "時間差:" + remianTime);
      if (remianTime < MAX_TIME) {
        Access_token at = gson.fromJson(mJsonAccess_token,
            new Access_token().getClass());
        mAccess_token = at.getAccess_token();
      } else {
        mAccess_token = getAccessToken();
        FileOutputStream fos = new FileOutputStream(file, false);// 不允許追加
        Access_token at = new Access_token();
        at.setAccess_token(mAccess_token);
        at.setExpires_in(System.currentTimeMillis() + "");
        String json = gson.toJson(at);
        fos.write((json).getBytes());
        fos.close();
      }
 
    }
  }
 
  System.out.println("獲取到的Access_token是:" + mAccess_token);
}
 
/*
 * 獲取微信服務器AccessToken。該部分和getAccess_token() 一致,不再加注釋
 */
public static String getAccessToken() {
  String urlString = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
      + APPID + "&secret=" + SECERT;
  String reslut = null;
  try {
    URL reqURL = new URL(urlString);
    HttpsURLConnection httpsConn = (HttpsURLConnection) reqURL
        .openConnection();
    InputStreamReader isr = new InputStreamReader(
        httpsConn.getInputStream());
    char[] chars = new char[1024];
    reslut = "";
    int len;
    while ((len = isr.read(chars)) != -1) {
      reslut += new String(chars, 0, len);
    }
    isr.close();
  } catch (IOException e) {
 
    e.printStackTrace();
  }
  Gson gson = new Gson();
  Access_token access_token = gson.fromJson(reslut,
      new Access_token().getClass());
  if (access_token.getAccess_token() != null) {
    return access_token.getAccess_token();
  } else {
    return null;
  }
}

 前三篇文章演示源碼:WeixinApiDemo.rar

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/wgyscsf/article/details/51078372

延伸 · 閱讀

精彩推薦
637
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 在线看一区二区三区 | 欧美精品成人一区二区三区四区 | 最新av免费网址 | 成人一区久久 | 草草视频免费观看 | 久久精品电影网 | 免费毛片在线视频 | 91精品国产乱码久久久久久久久 | 爱看久久 | 免费一级肉体全黄毛片 | 国产一区二区欧美 | 国产一区在线视频观看 | 午夜天堂在线 | 午夜啪视频 | 热99在线| chinese xvideos gay| 成人免费在线视频 | 国产精品高潮99久久久久久久 | 视频一区二区在线播放 | 轻点插视频| 日本韩国欧美一级片 | 国产毛片毛片 | 国产精品久久久久一区二区 | 天天操天天碰 | 久久亚洲线观看视频 | 青草久久久久 | 99久久久精品免费观看国产 | 永久免费一区二区三区 | 49vv看片免费| 免费男女视频 | 性少妇videosexfreexx入片 | 免费在线观看午夜视频 | 丁香天堂网 | 久久福利剧场 | 成人小视频免费在线观看 | 黄色二区三区 | tube7xxx| 免费久久久 | 中国3xxxx| 黄色成人在线 | 久久久久久久久浪潮精品 |