微信開発のオープン開発モード
14429 ワード
..。
作者:万境絶塵
転載は出典を明記してください。 http://blog.csdn.net/shulianghan/article/details/20494177
..。
GitHubソースの位置 :
-- HTTP : https://github.com/han1202012/WeChatVerify.git
-- SSH : [email protected]:han 12012/WeChat Verify.git
CSDNは認証プログラムのwarカバンとソースをダウンロードします。 : http://download.csdn.net/detail/han1202012/6999207
WeChatはwarパッケージのダウンロードを検証します。 :
-- アクセスアドレス : ipアドレス:80/WeChat Verify/verifyServlet;
-- Token : Tokenは「hashuliang」です。
一.オープン開発モード解析
1.開発者ドキュメント
まず編集モードに入り、編集モードをオフにして、開発モードに入ります。
ドキュメントを表示するには、WeChatの開発者ドキュメントを開くことができます。ルート機能->上級機能->開発モード->ドキュメントを表示します。
開発者ドキュメントディレクトリの構造説明:
――初心者アクセス:アクセスガイドの典型的な事例を含めて開発者の仕様を紹介し、開発者のモデルにどうやってアクセスするかを説明します。
--基礎サポート:access_の取得を含むtokenグローバルリターンコードは、インターフェース周波数制限を説明し、マルチメディアファイルをアップロードしてダウンロードする。
--受信メッセージ:認証メッセージの真正性受信通常メッセージ受信イベントの送達を含み、音声認識結果を受信する。
--受動応答メッセージを送信することと、サービスメッセージを送信することと、
--ユーザ管理:グループ管理インターフェースを含むユーザ基本情報取得対象者リスト取得ユーザ地理位置ウェブページ認証ユーザ基本情報ウェブページ取得ユーザネットワーク状態。
--カスタムメニュー:カスタムメニュー作成インターフェースカスタムメニュークエリインターフェースカスタムメニュー削除インターフェースカスタムメニューイベントプッシュを含む。
--プロモーションサポート:パラメータを生成する二次元コードを含みます。
--WeChat JSインターフェース:WeChatのウェブページの右上隅を隠すボタンを含む、WeChatのウェブページの下部にあるナビゲーションバーのウェブページからユーザーネットワークの状態を取得する。
--開発者交流互助:開発者クイズシステムインターフェースデバッグツールインターフェース体験テスト番号申請を含みます。
2.開発者検証プロセスの解析
(1)申請メッセージインターフェース
開発モードの「開発者になる」ボタンをクリックすると、プロトコルが表示されます。
後はURLとTokenを記入します。
--URL:WeChatサーバデータを受信するためのインターフェースURL。
--Token:任意に記入し、署名を生成するために使用します。
(2)URLの有効性を確認する
検証プロセス:プログラムはHTTP GET要求を処理し、要求者のアイデンティティを検証し、WeChatサーバからの要求を確保しなければならない。
--パラメータの取得:HTTP GETは4つのパラメータsignature timestamp nonce echostrを携帯します。
--綴りパラメータ:並べ替えられた3つのパラメータを辞書順に文字列に並べます。
--暗号化パラメータ:並べ替えられた文字列をshar 1で暗号化します。
--結果を返します。暗号化された文字列をsignatureパラメータと比較し、等しい場合はマイクロクレジットサーバから要求し、そのままパラメータechostrに戻ります。
二.開発検証プログラム
1.要点解析
(1)servletで4つのパラメータを取得する
取得方法:doGet()法では、requestのgetParameter(「signature」)方法を直接呼び出して、signatureパラメータを取得することができます。
--例:
並べ替え方法:配列ツール類Arays.sort()は、配列中の文字列を辞書順に並べ替えます。
--コードの例:
Message Digest暗号化クラスを取得する:Message Digest.get Instance(「SHA-1」)を呼び出すことで、shar 1暗号化クラスを取得することができます。
--コードの例:
byteをcharタイプに変換:
--例示コード:
--例示コード:
送信情報:まず出力ストリームを取得してから検証し、検証すればWeChatサーバに情報を送信する。
--例示コード:
2.プログラムソース
GitHubソースの位置:
--HTTP: https://github.com/han1202012/WeChatVerify.git
--SSH: [email protected]:han 12012/WeChat Verify.git
CSDNは認証プログラムのwarバッグとソースコードをダウンロードします。 http://download.csdn.net/detail/han1202012/6999207
WeChat検証warパッケージダウンロード:
--アクセスアドレス: ipアドレス:80/WeChat Verify/verifyServlet;
--Token:Tokenに注意することは「hashuliang」です。
プログラム構造:
Servletソース:
三.検証する
1.部署プログラム
(1)warバッグを引き出す
(2)warパッケージをサーバにアップロードする
(3)Tomcatのserver.xmlファイルを配置する
WeChatサーバは80ポートのデータしか受け付けられません。
上のプログラムをエクスポートしたwarパッケージをアリ雲Tomcatサーバーの下に置いてください。http://hanshuliang.com:8080/WeChatVerify/verifyServlet ログイン
--結果:これは通常の状況です。POSTにパラメータが追加されていないためです。
HTTP Sttus 500-
タイプ Exceptionレポート
メッセージ
description The server encountered an internal error()that prevented it from fulfilling this request.
exception
Apache Tomcat/6.0.20
8080ポートはサポートされていません。80ポートしかサポートされていません。私のサーバーはngixサーバーを走っています。独立ドメイン名のブログは上にあります。
2.検証を開始する
元のNgixサーバーの80ポートは独立したドメイン名のブログです。現在は独立したドメイン名のブログは8086ポートの中を指しています。 http://hanshuliang.com:8086/ アクセス
Tomcatを80ポートに設定して、息が切れました。
やっと成功しました。泣きました。長い間デバッグしました。やっとパスしました。
インターフェースの機能が不完全で、基礎インターフェースの権限しかありません。
GitHubソースの位置 :
-- HTTP : https://github.com/han1202012/WeChatVerify.git
-- SSH : [email protected]:han 12012/WeChat Verify.git
CSDNは認証プログラムのwarカバンとソースをダウンロードします。 : http://download.csdn.net/detail/han1202012/6999207
WeChatはwarパッケージのダウンロードを検証します。 :
-- アクセスアドレス : ipアドレス:80/WeChat Verify/verifyServlet;
-- Token : Tokenは「hashuliang」です。
..。
作者 : 万の境に塵を絶つ
転載は出典を明記してください。 : http://blog.csdn.net/shulianghan/article/details/20494177
..。
作者:万境絶塵
転載は出典を明記してください。 http://blog.csdn.net/shulianghan/article/details/20494177
..。
GitHubソースの位置 :
-- HTTP : https://github.com/han1202012/WeChatVerify.git
-- SSH : [email protected]:han 12012/WeChat Verify.git
CSDNは認証プログラムのwarカバンとソースをダウンロードします。 : http://download.csdn.net/detail/han1202012/6999207
WeChatはwarパッケージのダウンロードを検証します。 :
-- アクセスアドレス : ipアドレス:80/WeChat Verify/verifyServlet;
-- Token : Tokenは「hashuliang」です。
一.オープン開発モード解析
1.開発者ドキュメント
まず編集モードに入り、編集モードをオフにして、開発モードに入ります。
ドキュメントを表示するには、WeChatの開発者ドキュメントを開くことができます。ルート機能->上級機能->開発モード->ドキュメントを表示します。
開発者ドキュメントディレクトリの構造説明:
――初心者アクセス:アクセスガイドの典型的な事例を含めて開発者の仕様を紹介し、開発者のモデルにどうやってアクセスするかを説明します。
--基礎サポート:access_の取得を含むtokenグローバルリターンコードは、インターフェース周波数制限を説明し、マルチメディアファイルをアップロードしてダウンロードする。
--受信メッセージ:認証メッセージの真正性受信通常メッセージ受信イベントの送達を含み、音声認識結果を受信する。
--受動応答メッセージを送信することと、サービスメッセージを送信することと、
--ユーザ管理:グループ管理インターフェースを含むユーザ基本情報取得対象者リスト取得ユーザ地理位置ウェブページ認証ユーザ基本情報ウェブページ取得ユーザネットワーク状態。
--カスタムメニュー:カスタムメニュー作成インターフェースカスタムメニュークエリインターフェースカスタムメニュー削除インターフェースカスタムメニューイベントプッシュを含む。
--プロモーションサポート:パラメータを生成する二次元コードを含みます。
--WeChat JSインターフェース:WeChatのウェブページの右上隅を隠すボタンを含む、WeChatのウェブページの下部にあるナビゲーションバーのウェブページからユーザーネットワークの状態を取得する。
--開発者交流互助:開発者クイズシステムインターフェースデバッグツールインターフェース体験テスト番号申請を含みます。
2.開発者検証プロセスの解析
(1)申請メッセージインターフェース
開発モードの「開発者になる」ボタンをクリックすると、プロトコルが表示されます。
後はURLとTokenを記入します。
--URL:WeChatサーバデータを受信するためのインターフェースURL。
--Token:任意に記入し、署名を生成するために使用します。
(2)URLの有効性を確認する
検証プロセス:プログラムはHTTP GET要求を処理し、要求者のアイデンティティを検証し、WeChatサーバからの要求を確保しなければならない。
--パラメータの取得:HTTP GETは4つのパラメータsignature timestamp nonce echostrを携帯します。
--綴りパラメータ:並べ替えられた3つのパラメータを辞書順に文字列に並べます。
--暗号化パラメータ:並べ替えられた文字列をshar 1で暗号化します。
--結果を返します。暗号化された文字列をsignatureパラメータと比較し、等しい場合はマイクロクレジットサーバから要求し、そのままパラメータechostrに戻ります。
二.開発検証プログラム
1.要点解析
(1)servletで4つのパラメータを取得する
取得方法:doGet()法では、requestのgetParameter(「signature」)方法を直接呼び出して、signatureパラメータを取得することができます。
--例:
//
String signature = req.getParameter("signature");
String timestamp = req.getParameter("timestamp");
String nonce = req.getParameter("nonce");
String echostr = req.getParameter("echostr");
(2)パラメータを辞書順に並べ替える並べ替え方法:配列ツール類Arays.sort()は、配列中の文字列を辞書順に並べ替えます。
--コードの例:
// token timestamp nonce
String[] params = new String[]{token, timestamp, nonce};
Arrays.sort(params);
//
StringBuffer buffer = new StringBuffer();
for(int i = 0; i < params.length; i ++){
buffer.append(params[i]);
}
(3)shar 1暗号化Message Digest暗号化クラスを取得する:Message Digest.get Instance(「SHA-1」)を呼び出すことで、shar 1暗号化クラスを取得することができます。
--コードの例:
// sha1
MessageDigest digest = MessageDigest.getInstance("SHA-1");
// sha1 , byte
byte[] byteDigest = digest.digest(buffer.toString().getBytes());
(4)byte配列を文字列に変換byteをcharタイプに変換:
--例示コード:
/*
* byte
*/
public static String byte2HexStr(byte b) {
char[] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
char[] temp = new char[2];
temp[0] = digit[(b >>> 4) & 0x0F];
temp[1] = digit[b & 0x0F];
String s = new String(temp);
return s;
}
byte配列を文字列に変換するには、上のクラスを呼び出す必要があります。--例示コード:
/*
* byte
*/
public static String byte2str(byte[] byteArray) {
String str = "";
for(int i = 0; i < byteArray.length; i ++){
str += byte2HexStr(byteArray[i]);
}
return str;
}
(5)WeChatサーバに情報を送信する送信情報:まず出力ストリームを取得してから検証し、検証すればWeChatサーバに情報を送信する。
--例示コード:
// ,
PrintWriter out = resp.getWriter();
// , echostr
if(VerifyUtils.checkSignature(signature, timestamp, nonce)){
out.print(echostr);
}
//
out.close();
out = null;
..。2.プログラムソース
GitHubソースの位置:
--HTTP: https://github.com/han1202012/WeChatVerify.git
--SSH: [email protected]:han 12012/WeChat Verify.git
CSDNは認証プログラムのwarバッグとソースコードをダウンロードします。 http://download.csdn.net/detail/han1202012/6999207
WeChat検証warパッケージダウンロード:
--アクセスアドレス: ipアドレス:80/WeChat Verify/verifyServlet;
--Token:Tokenに注意することは「hashuliang」です。
プログラム構造:
Servletソース:
package shuliang.han.vertify.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import shuliang.han.vertify.VerifyUtils;
public class VerifyServlet extends HttpServlet {
private static final long serialVersionUID = 4440739483644L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//
String signature = req.getParameter("signature");
String timestamp = req.getParameter("timestamp");
String nonce = req.getParameter("nonce");
String echostr = req.getParameter("echostr");
// ,
PrintWriter out = resp.getWriter();
// , echostr
if(VerifyUtils.checkSignature(signature, timestamp, nonce)){
out.print(echostr);
}
//
out.close();
out = null;
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// ,
}
}
検証ツールのソースコード: package shuliang.han.vertify;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
public class VerifyUtils {
private final static String token = "hanshuliang";
public static boolean checkSignature(String signature, String timestamp, String nonce) {
// token timestamp nonce
String[] params = new String[]{token, timestamp, nonce};
Arrays.sort(params);
//
StringBuffer buffer = new StringBuffer();
for(int i = 0; i < params.length; i ++){
buffer.append(params[i]);
}
//str
String str = null;
try {
// sha1
MessageDigest digest = MessageDigest.getInstance("SHA-1");
// sha1 , byte
byte[] byteDigest = digest.digest(buffer.toString().getBytes());
// , byte
str = byte2str(byteDigest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
/*
* signature ,
* null false
* null,
*/
boolean isVerified = (str != null) ? str.equals(signature.toUpperCase()) : false;
return isVerified;
}
/*
* byte
*/
public static String byte2str(byte[] byteArray) {
String str = "";
for(int i = 0; i < byteArray.length; i ++){
str += byte2HexStr(byteArray[i]);
}
return str;
}
/*
* byte
*/
public static String byte2HexStr(byte b) {
char[] digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
char[] temp = new char[2];
temp[0] = digit[(b >>> 4) & 0x0F];
temp[1] = digit[b & 0x0F];
String s = new String(temp);
return s;
}
}
web.xml設定ファイル: <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>verifyServlet</servlet-name>
<servlet-class>shuliang.han.vertify.servlet.VerifyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>verifyServlet</servlet-name>
<url-pattern>/verifyServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
三.検証する
1.部署プログラム
(1)warバッグを引き出す
(2)warパッケージをサーバにアップロードする
(3)Tomcatのserver.xmlファイルを配置する
WeChatサーバは80ポートのデータしか受け付けられません。
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
2.阿里雲サーバーを使う上のプログラムをエクスポートしたwarパッケージをアリ雲Tomcatサーバーの下に置いてください。http://hanshuliang.com:8080/WeChatVerify/verifyServlet ログイン
--結果:これは通常の状況です。POSTにパラメータが追加されていないためです。
HTTP Sttus 500-
タイプ Exceptionレポート
メッセージ
description The server encountered an internal error()that prevented it from fulfilling this request.
exception
java.lang.NullPointerException
java.lang.String.compareTo(String.java:1168)
java.lang.String.compareTo(String.java:92)
java.util.Arrays.mergeSort(Arrays.java:1144)
java.util.Arrays.sort(Arrays.java:1079)
shuliang.han.vertify.VerifyUtils.checkSignature(VerifyUtils.java:13)
shuliang.han.vertify.servlet.VerifyServlet.doGet(VerifyServlet.java:28)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
ノート The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.Apache Tomcat/6.0.20
8080ポートはサポートされていません。80ポートしかサポートされていません。私のサーバーはngixサーバーを走っています。独立ドメイン名のブログは上にあります。
2.検証を開始する
元のNgixサーバーの80ポートは独立したドメイン名のブログです。現在は独立したドメイン名のブログは8086ポートの中を指しています。 http://hanshuliang.com:8086/ アクセス
Tomcatを80ポートに設定して、息が切れました。
やっと成功しました。泣きました。長い間デバッグしました。やっとパスしました。
インターフェースの機能が不完全で、基礎インターフェースの権限しかありません。
GitHubソースの位置 :
-- HTTP : https://github.com/han1202012/WeChatVerify.git
-- SSH : [email protected]:han 12012/WeChat Verify.git
CSDNは認証プログラムのwarカバンとソースをダウンロードします。 : http://download.csdn.net/detail/han1202012/6999207
WeChatはwarパッケージのダウンロードを検証します。 :
-- アクセスアドレス : ipアドレス:80/WeChat Verify/verifyServlet;
-- Token : Tokenは「hashuliang」です。
..。
作者 : 万の境に塵を絶つ
転載は出典を明記してください。 : http://blog.csdn.net/shulianghan/article/details/20494177
..。