(7)微信二次開發 之 微信接口憑證的獲取


1、微信接口憑證的理解

對於每一個公眾號(訂閱號、服務號、企業號)都是微信平台上的一個app。

對於每一個公眾號都有一套appid和appsect,這是微信平台用來區分微信app的唯一方法。
如圖:(在微信公眾號的基本配置中,appsect想看到需要掃描和輸入密碼一起通過才可看到)

 

  

2、微信接口憑證access_token的理解

  AppID(應用ID),AppSecret(應用密鑰),還有access_token(訪問令牌)。access_token訪問令牌是由appid和appsect經過一定的算法得來。

  access_token是公眾號的全局唯一票據,公眾號調用各接口時都需使用access_token。開發者需要進行妥善保存。access_token的存儲至少要保留512個字符空間。access_token的有效期目前為2個小時,需定時刷新,重復獲取將導致上次獲取的access_token失效。

  為了保密appsecrect,第三方需要一個access_token獲取和刷新的中控服務器。而其他業務邏輯服務器所使用的access_token均來自於該中控服務器,不應該各自去刷新,否則會造成access_token覆蓋而影響業務。

目前access_token的有效期通過返回的expire_in來傳達,目前是7200秒之內的值。中控服務器需要根據這個有效時間提前去刷新新access_token。在刷新過程中,中控服務器對外輸出的依然是老access_token,此時公眾平台后台會保證在刷新短時間內,新老access_token都可用,這保證了第三方業務的平滑過渡。

access_token的有效時間可能會在未來有調整,所以中控服務器不僅需要內部定時主動刷新,還需要提供被動刷新access_token的接口,這樣便於業務服務器在API調用獲知access_token已超時的情況下,可以觸發access_token的刷新流程。

  如果第三方不使用中控服務器,而是選擇各個業務邏輯點各自去刷新access_token,那么就可能會產生沖突,導致服務不穩定。

  公眾號可以使用AppID和AppSecret調用本接口來獲取access_token。AppID和AppSecret可在微信公眾平台官網-開發者中心頁中獲得(需要已經成為開發者,且帳號沒有異常狀態)。注意調用所有微信接口時均需使用https協議。

3httphttps協議以及端口的理解

Http(HyperText Transfer Protocol)是超文本傳輸協議,所有的www文件都必須遵守這個標准。HTTP1.0 --> HTTP1.1

HTTP是基於TCP,是基於客戶端和服務器端請求和應答(響應)的標准。客戶端即為用戶,服務器端即網站服務器,客戶端向服務器端在80端口發起HTTP請求。一旦服務器有響應,即響應數據回來;沒有響應,就返回狀態碼。

 

端口:就是針對一塊內存的編號。

 

httpsHyperText Transfer Protocol Over Secure Socket Layer,基於安全套接字的HTTP協議, 是HTTP協議的安全版。在HTTP下加入了SSL層,所以HTTPS的安全基礎是基於SSL。最早由網景公司開發,主要是用於金融、支付、對安全要求比較高的領域。

HTTPS使用的端口是:443

4httphttps協議的區別

HTTP協議用於在web瀏覽器和網站服務器之間傳遞信息。HTTP協議以明文方式發送內容,不提供任何方式的數據加密。HTTPS協議需要用到CA申請證書,證書是需要交費的。http是明文傳輸,https是加密傳輸,http協議使用的是80端口,https協議使用的443端口,

  HTTP的連接簡單無狀態,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸的、身份認證的網絡協議。

 

  在微信接口里,所有的接口都將采用 https 協議。

 

5微信二次開發Java實現發送https請求獲取信息

package com.aixunma.test;

import java.util.List;

import org.junit.Test;

import com.aixunma.config.Contants;
import com.aixunma.vo.AccessToken;
import com.aixunma.wechat.util.BaseIncUtil;
import com.aixunma.wechat.util.WeixinUtil;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 *  測試accessToken請求返回的數據
 * <p>類的描述:</p>
 * <p>@Description: TODO</p>
 * <p>@author 小海</p>
 * <p>@time:2017年5月1日 下午10:09:50</p>
 * <p>@Vesion: 1.0</p>
 */
public class TestAccessToken {
    
    @Test
    public void test() {
        final AccessToken accessToken = WeixinUtil.getAccessToken(Contants.APPID, Contants.APPSECRET);
        // 輸出數據
        System.out.println("access_token(訪問令牌):" + accessToken.getAccess_token());
        System.out.println("expires_in(有效時間):" + accessToken.getExpires_in());
        
        // 獲取微信服務器列表
        final String ipAddressList = BaseIncUtil.getServerList(accessToken.getAccess_token());
        System.out.println(ipAddressList);
        
        // 這里的ipAddressList是一個json格式的字符串
        
        // 解析json格式
        final JSONObject jsonObject = JSONObject.fromObject(ipAddressList);
        final List<String> list = JSONArray.toList(jsonObject.getJSONArray("ip_list"));
        if (null != list) {
            for (int i = 0; i < list.size(); i++) {
                System.out.println("第" + i + "個ip:" + list.get(i));
            }
        }
    }    
}

ipAddressList的json數據如下:目前微信服務器使用到了98個。
 {"ip_list":["101.226.62.77","101.226.62.78","101.226.62.79","101.226.62.80","101.226.62.81",
 "101.226.62.82","101.226.62.83","101.226.62.84","101.226.62.85","101.226.62.86",
 "101.226.103.59","101.226.103.60","101.226.103.61","101.226.103.62","101.226.103.63",
 "101.226.103.69","101.226.103.70","101.226.103.71","101.226.103.72","101.226.103.73",
 "140.207.54.73","140.207.54.74","140.207.54.75","140.207.54.76","140.207.54.77",
 "140.207.54.78","140.207.54.79","140.207.54.80","182.254.11.203","182.254.11.202",
 "182.254.11.201","182.254.11.200","182.254.11.199","182.254.11.198","59.37.97.100",
 "59.37.97.101","59.37.97.102","59.37.97.103","59.37.97.104","59.37.97.105",
 "59.37.97.106","59.37.97.107","59.37.97.108","59.37.97.109","59.37.97.110",
 "59.37.97.111","59.37.97.112","59.37.97.113","59.37.97.114","59.37.97.115",
 "59.37.97.116","59.37.97.117","59.37.97.118","112.90.78.158","112.90.78.159",
 "112.90.78.160","112.90.78.161","112.90.78.162","112.90.78.163","112.90.78.164",
 "112.90.78.165","112.90.78.166","112.90.78.167","140.207.54.19","140.207.54.76",
 "140.207.54.77","140.207.54.78","140.207.54.79","140.207.54.80","180.163.15.149",
 "180.163.15.151","180.163.15.152","180.163.15.153","180.163.15.154","180.163.15.155",
 "180.163.15.156","180.163.15.157","180.163.15.158","180.163.15.159","180.163.15.160",
 "180.163.15.161","180.163.15.162","180.163.15.163","180.163.15.164","180.163.15.165",
 "180.163.15.166","180.163.15.167","180.163.15.168","180.163.15.169","180.163.15.170",
 "101.226.103.0/25","101.226.233.128/25","58.247.206.128/25","182.254.86.128/25","103.7.30.21",
 "103.7.30.64/26","58.251.80.32/27","183.3.234.32/27","121.51.130.64/27"]}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM