微信公衆番号開発の公衆番号取得のaccess_token
12518 ワード
なぜ公衆番号のアクセスを取得するのかtoken?
これから微信公衆番号のカスタムメニューを実現するにはaccessが必要だからです.tokenは、メニューのURlがサードパーティのページにジャンプしても使用されます.
一、access_tokenの概要
サードパーティの開発者がユーザーにより価値のある個性化サービスを提供できるように、微信公衆プラットフォームはカスタムメニューインタフェース、カスタマーサービスインタフェース、ユーザー情報インタフェース、ユーザーグループインタフェース、群発インタフェースなど、多くのインタフェースを開放している.
開発者は、これらのインタフェースを呼び出すときに、同じパラメータaccessを入力する必要があります.tokenは、公衆アカウントのグローバル唯一の手形であり、インタフェースアクセス証明書です.
access_tokenは公衆番号のグローバル一意の手形であり、公衆番号が各インタフェースを呼び出す際にaccessを使用する必要がある.token.開発者は適切に保存する必要がある.
access_tokenのストレージは、少なくとも512文字の空間を保持する必要があります.
access_tokenの有効期間は現在2時間で、タイミングリフレッシュが必要で、繰り返し取得すると前回取得したaccess_tokenは無効です.
サードパーティがミドルコントロールサーバを使用しないで、各ビジネスロジックポイントを選択してaccess_をリフレッシュします.tokenでは、競合が発生し、サービスが不安定になる可能性があります.
公衆番号はAppIDとAppSecretを使用してこのインタフェースを呼び出してaccessを取得することができます.token.AppIDとAppSecretは、微信公衆プラットフォームの公式サイト-開発者センターページで入手できます(開発者になる必要があり、アカウントに異常はありません).注意すべての微信インタフェースを呼び出すときはhttpsプロトコルを使用する必要があります.
access_tokenの有効期間は7200秒(2時間)で、有効期間内で、access_tokenが期限切れになった場合、インタフェースを再呼び出してaccessを取得する必要があります.token.理想的には、7 x 24時間稼働するシステムは、毎日12回のaccess_を取得するだけです.token、すなわち2時間ごとに取得されます.有効期間内にaccess_を再取得するとtoken、では前回取得したaccess_tokenは失効します.
現在、アクセスを取得tokenインタフェースの呼び出し頻度は2000回/日に制限され、カスタマーサービスメッセージの送信、ユーザー情報の取得、群発メッセージの送信前にアクセスを呼び出す必要がある場合tokenインタフェースはインタフェースアクセス証明書を取得します.これは明らかに合理的ではありません.一方で、インタフェース呼び出し操作が1回多くなる一方で、2000回/日の呼び出し制限も十分ではありません.したがって、実際のアプリケーションでは、取得したaccess_をtokenは格納され、access_が定期的に呼び出されます.tokenインタフェースは、いつでも取り出すaccessを保証するために更新されます.tokenはすべて有効です.
公式の説明:
インタフェース呼び出し要求の説明
パラメータの説明
パラメータ
必要かどうか
説明
grant_type
はい
アクセスの取得tokenクライアントに記入_credential
appid
はい
サードパーティユーザー固有の資格証明
secret
はい
サードパーティユーザー固有の証明鍵、すなわちappsecret
説明に戻る
通常、微信は次のJSONパケットを公衆番号に返します.
パラメータ
説明
access_token
取得した資格証明
expires_in
資格証明有効時間、単位:秒
エラーが発生した場合、ウィーチャットはエラーコードなどの情報を返します.JSONパケットの例は以下の通りです(この例はAppID無効エラーです).
二、パッケージ基本類
tokenクラスをカプセル化します.
三、tokenを取得する.
1.質問:tokenを取得するにはどうすればいいですか?
ソリューション:(1)ブラウザから直接アクセスします.(2)プログラムを記述し,https接続をシミュレートしtokenを得る.
解決の詳細は次のとおりです.
(1)ブラウザに直接リンクを入力:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRETを選択し、APPIDとAPPSECRETを自分のappIDとappsecretに置き換え、ブラウザでtokenを取得します.
(2)httpsリクエストの送信をプログラムでシミュレートしtokenを取得する方法
httpリクエストには、証明書信頼マネージャが必要です.このマネージャクラスは独自に定義する必要がありますが、X 509 TrustManagerインタフェースを実装する必要があります.
まず、MyX 509 TrustManagerクラスを定義します.
tokenテストクラスを作成します.
汎用ツールクラス:CommonUtil
アクセスを取得する2つの方法が提供されています.token、効果:
私の座右の銘:いいえ、私は学ぶことができます;遅れて、私は追いかけることができます;転んで、私は立ち上がることができます;私はきっとできます.
これから微信公衆番号のカスタムメニューを実現するにはaccessが必要だからです.tokenは、メニューのURlがサードパーティのページにジャンプしても使用されます.
一、access_tokenの概要
サードパーティの開発者がユーザーにより価値のある個性化サービスを提供できるように、微信公衆プラットフォームはカスタムメニューインタフェース、カスタマーサービスインタフェース、ユーザー情報インタフェース、ユーザーグループインタフェース、群発インタフェースなど、多くのインタフェースを開放している.
開発者は、これらのインタフェースを呼び出すときに、同じパラメータaccessを入力する必要があります.tokenは、公衆アカウントのグローバル唯一の手形であり、インタフェースアクセス証明書です.
access_tokenは公衆番号のグローバル一意の手形であり、公衆番号が各インタフェースを呼び出す際にaccessを使用する必要がある.token.開発者は適切に保存する必要がある.
access_tokenのストレージは、少なくとも512文字の空間を保持する必要があります.
access_tokenの有効期間は現在2時間で、タイミングリフレッシュが必要で、繰り返し取得すると前回取得したaccess_tokenは無効です.
サードパーティがミドルコントロールサーバを使用しないで、各ビジネスロジックポイントを選択してaccess_をリフレッシュします.tokenでは、競合が発生し、サービスが不安定になる可能性があります.
公衆番号はAppIDとAppSecretを使用してこのインタフェースを呼び出してaccessを取得することができます.token.AppIDとAppSecretは、微信公衆プラットフォームの公式サイト-開発者センターページで入手できます(開発者になる必要があり、アカウントに異常はありません).注意すべての微信インタフェースを呼び出すときはhttpsプロトコルを使用する必要があります.
access_tokenの有効期間は7200秒(2時間)で、有効期間内で、access_tokenが期限切れになった場合、インタフェースを再呼び出してaccessを取得する必要があります.token.理想的には、7 x 24時間稼働するシステムは、毎日12回のaccess_を取得するだけです.token、すなわち2時間ごとに取得されます.有効期間内にaccess_を再取得するとtoken、では前回取得したaccess_tokenは失効します.
現在、アクセスを取得tokenインタフェースの呼び出し頻度は2000回/日に制限され、カスタマーサービスメッセージの送信、ユーザー情報の取得、群発メッセージの送信前にアクセスを呼び出す必要がある場合tokenインタフェースはインタフェースアクセス証明書を取得します.これは明らかに合理的ではありません.一方で、インタフェース呼び出し操作が1回多くなる一方で、2000回/日の呼び出し制限も十分ではありません.したがって、実際のアプリケーションでは、取得したaccess_をtokenは格納され、access_が定期的に呼び出されます.tokenインタフェースは、いつでも取り出すaccessを保証するために更新されます.tokenはすべて有効です.
公式の説明:
インタフェース呼び出し要求の説明
http : GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
パラメータの説明
パラメータ
必要かどうか
説明
grant_type
はい
アクセスの取得tokenクライアントに記入_credential
appid
はい
サードパーティユーザー固有の資格証明
secret
はい
サードパーティユーザー固有の証明鍵、すなわちappsecret
説明に戻る
通常、微信は次のJSONパケットを公衆番号に返します.
{"access_token":"ACCESS_TOKEN","expires_in":7200}
パラメータ
説明
access_token
取得した資格証明
expires_in
資格証明有効時間、単位:秒
エラーが発生した場合、ウィーチャットはエラーコードなどの情報を返します.JSONパケットの例は以下の通りです(この例はAppID無効エラーです).
{"errcode":40013,"errmsg":"invalid appid"}
二、パッケージ基本類
tokenクラスをカプセル化します.
package cn.com.comit.appointment.modules.wechat.entity;
/**
* : Token
* :
*/
public class Token {
//
private String accessToken;
// , :
private int expiresIn;
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public int getExpiresIn() {
return expiresIn;
}
public void setExpiresIn(int expiresIn) {
this.expiresIn = expiresIn;
}
}
三、tokenを取得する.
1.質問:tokenを取得するにはどうすればいいですか?
ソリューション:(1)ブラウザから直接アクセスします.(2)プログラムを記述し,https接続をシミュレートしtokenを得る.
解決の詳細は次のとおりです.
(1)ブラウザに直接リンクを入力:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRETを選択し、APPIDとAPPSECRETを自分のappIDとappsecretに置き換え、ブラウザでtokenを取得します.
(2)httpsリクエストの送信をプログラムでシミュレートしtokenを取得する方法
httpリクエストには、証明書信頼マネージャが必要です.このマネージャクラスは独自に定義する必要がありますが、X 509 TrustManagerインタフェースを実装する必要があります.
まず、MyX 509 TrustManagerクラスを定義します.
package cn.com.comit.appointment.modules.wechat.utils;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
/**
* : MyX509TrustManager
* :
*/
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;
}
}
tokenテストクラスを作成します.
package cn.com.comit.appointment.modules.wechat.test;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
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 cn.com.comit.appointment.modules.wechat.entity.Token;
import cn.com.comit.appointment.modules.wechat.utils.CommonUtil;
import cn.com.comit.appointment.modules.wechat.utils.MyX509TrustManager;
public class TokenTest {
public static void main(String[] args) throws Exception {
Token token = CommonUtil.getToken(" appID"," appsecret");
System.out.println("access_token:"+token.getAccessToken());
System.out.println("expires_in:"+token.getExpiresIn());
// appID,secret
String tokenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid= appID&secret= appsecret";
//
URL url = new URL(tokenUrl);
HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
// 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();
httpUrlConn.setSSLSocketFactory(ssf);
httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true);
// (GET/POST)
httpUrlConn.setRequestMethod("GET");
//
InputStream inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//
StringBuffer buffer = new StringBuffer();
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
//
inputStream.close();
httpUrlConn.disconnect();
//
System.out.println(buffer);
}
}
汎用ツールクラス:CommonUtil
package cn.com.comit.appointment.modules.wechat.utils;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
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.JSONException;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.com.comit.appointment.modules.wechat.entity.Token;
/**
* : CommonUtil
* :
*/
public class CommonUtil {
private static Logger log = LoggerFactory.getLogger(CommonUtil.class);
// (GET)
public final static String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
/**
* 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) {
log.error(" :{}", ce);
} catch (Exception e) {
log.error("https :{}", e);
}
return jsonObject;
}
/**
*
*
* @param appid
* @param appsecret
* @return
*/
public static Token getToken(String appid, String appsecret) {
Token token = null;
String requestUrl = token_url.replace("APPID", appid).replace("APPSECRET", appsecret);
// GET
JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);
if (null != jsonObject) {
try {
token = new Token();
token.setAccessToken(jsonObject.getString("access_token"));
token.setExpiresIn(jsonObject.getInt("expires_in"));
} catch (JSONException e) {
token = null;
// token
log.error(" token errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
}
}
return token;
}
/**
* URL (utf-8)
*
* @param source
* @return
*/
public static String urlEncodeUTF8(String source) {
String result = source;
try {
result = java.net.URLEncoder.encode(source, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
/**
*
*
* @param contentType
* @return
*/
public static String getFileExt(String contentType) {
String fileExt = "";
if ("image/jpeg".equals(contentType))
fileExt = ".jpg";
else if ("audio/mpeg".equals(contentType))
fileExt = ".mp3";
else if ("audio/amr".equals(contentType))
fileExt = ".amr";
else if ("video/mp4".equals(contentType))
fileExt = ".mp4";
else if ("video/mpeg4".equals(contentType))
fileExt = ".mp4";
return fileExt;
}
}
アクセスを取得する2つの方法が提供されています.token、効果:
access_token:15_Wq-IcnQDU-SjkePrAQkZ70lnmQzlQ2fBNlp6DCQBkQ98GQQr_C5ASy8xVqaS6zuE8-3lOkZeKPDc7UzwVyQWkYB0r45waUXpPA62-vFxvVWe26egNjSm_duZI83e37iGMNrU6L7tgrUYTSdAIABWV
expires_in:7200
{"access_token":"15_BueUYZQeX8oYYqGNAQkZ70lnmQzlQ2fBNlp6DCQBkQ98GQQr_C5ASy8xVqYR5h8DOWutAOvscCiFzL1nCgOTldsfmeHZda_z7h0_e1NxGYvqhjcoL7OQc1DWF-wenOk5z6m0-lRUXBdAIAMPT","expires_in":7200}
私の座右の銘:いいえ、私は学ぶことができます;遅れて、私は追いかけることができます;転んで、私は立ち上がることができます;私はきっとできます.