


Detaillierte Erl?uterung des Zugriffs auf den Java WeChat-Entwicklungs-API-Server
Mar 15, 2017 pm 05:10 PMDieser Artikel teilt Ihnen haupts?chlich die detaillierte Erkl?rung des Java WeChat-Entwicklungs-API-Serverzugriffs mit
So greifen Sie wie folgt auf den Server über die WeChat-Entwicklungs-API zu Ich stelle es Ihnen vor
1. Beschreibung
* Dieses Beispiel basiert auf der WeChat-Entwicklungsdokumentation: http://mp.weixin .qq. com/wiki/home/index.html neueste Version (03.04.2016 17:34:36 Uhr) zur Entwicklungsdemonstration.
* Bearbeitungsplattform: myeclipse10.7+win32+jdk1.7+tomcat7.0
* Server: Alibaba Cloud Windows Server 2008 64bits
* Plattformanforderungen : Servlet verwendet Annotationsmethode, Plattformanforderungen: j2ee6.0+, jdk6.0+, tomcat7.0+
* Die Demonstration konzentriert sich mehr auf die API-Analyse.
* Um die Testbeschreibung zu erleichtern, ist jeder Testfall unabh?ngig und nicht von anderen Methoden abh?ngig. Denken Sie nicht viel über die Verpackung nach.
* Die Demonstration sollte so weit wie m?glich in übereinstimmung mit den API-Anforderungen durchgeführt werden. Der Zweck besteht darin, zu verstehen, wie das Dokument verwendet wird, und den Effekt zu erzielen, aus einem Beispiel Schlussfolgerungen zu ziehen.
* Wissensvoraussetzungen: solide Java-Grundlagen, Kenntnisse der HTTP-Netzwerkkommunikation, ausreichende Kenntnisse von Javaweb, jsonParsing
* Aktuelle Zeit: 03.04.2016 17:32:57 Uhr, basierend auf dieser Zeit.
2. Originaldokument (Zusammenfassung)
Dokumentadresse: http://mp.weixin.qq.com/wiki /8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
Um auf die ?ffentliche WeChat-Plattform für die Entwicklung zuzugreifen, müssen Entwickler die folgenden Schritte ausführen:
1 Konfiguration
2. überprüfen Sie die Gültigkeit der Serveradresse
3. Implementieren Sie Gesch?ftslogik basierend auf dem Schnittstellen- Dokument
3. Dokumentverst?ndnis
überprüfen Sie die Gültigkeit der Serveradresse
1. Die API wird wie folgt eingeführt:
Nachdem der Entwickler die Informationen übermittelt hat, wird der WeChat Der Server sendet eine GET-Anfrage an die eingegebene Serveradresse. Die GET-Anfrage enth?lt vier Parameter: Signatur, ZeitStempel, Echostr
durch überprüfung der Signatur (die überprüfungsmethode finden Sie unten).
Wenn best?tigt wird, dass diese GET-Anfrage vom WeChat-Server stammt, geben Sie bitte den Inhalt des Echostr-Parameters unver?ndert zurück. Dann wird der Zugriff wirksam und Sie werden erfolgreich Entwickler. Andernfalls schl?gt der Zugriff fehl.
Der Verschlüsselungs-/Verifizierungsprozess ist wie folgt:
1) Sortieren Sie die drei Parameter Token, Zeitstempel und Nonce in lexikografischer Reihenfolge
2) Fügen Sie die drei Parameter Zeichenfolge zu einer Zeichenfolge zusammen ist sha1verschlüsselt
3). >2. Verstehen Sie, dass
angibt, dass sich die Anfrage im ?GET“-Modus befindet und beim Zugriff auf die Anfrage vier Parameter zurückgegeben werden: Signatur, Zeitstempel, Nonce und Echostr. Wir müssen diese Parameter akzeptieren und dann verarbeiten. Wenn die überprüfung erfolgreich ist, geben Sie das empfangene ?echostr“ zurück, andernfalls schl?gt die überprüfung fehl. Die überprüfungsmethode besteht darin, die empfangenen drei Parameter Token, Zeitstempel und Nonce in lexikografischer Reihenfolge zu sortieren, dann eine SHA1-Verschlüsselung durchzuführen und sie schlie?lich mit der Signatur zu vergleichen. * Die verschlüsselte Zeichenfolge kann mit der Signatur verglichen werden [die API wird m?glicherweise nicht klar erkl?rt], wird ?echostr“ zurückgegeben und die überprüfung ist erfolgreich.
3. Implementieren Sie
Erstellen Sie ein Servlet CoreServlet, um HttpServlet zu implementieren, überladen Sie die doGet-Methode. Parametervorbereitung
Befolgen Sie die drei in der API genannten Schritte// 設(shè)置一個(gè)全局的token,開發(fā)者自己設(shè)置。api這樣解釋:Token可由開發(fā)者可以任意填寫, // 用作生成簽名(該Token會(huì)和接口URL中包含的Token進(jìn)行比對(duì),從而驗(yàn)證安全性) String token = "wgyscsf"; // 根據(jù)api說明,獲取上述四個(gè)參數(shù) String signature = req.getParameter("signature"); String timestamp = req.getParameter("timestamp"); String nonce = req.getParameter("nonce"); String echostr = req.getParameter("echostr");
4. Füllen Sie die Serverkonfiguration aus
// 第一步:將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序 String[] parms = new String[] { token, timestamp, nonce };// 將需要字典序排列的字符串放到數(shù)組中 Arrays.sort(parms);// 按照api要求進(jìn)行字典序排序【百度:什么是字典序排序】 // 第二步:將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行sha1加密【百度:java sha1加密】 // 拼接字符串 String parmsString = "";// 注意,此處不能=null。 for (int i = 0; i < parms.length; i++) { parmsString += parms[i]; } // sha1加密 String mParms = null;// 加密后的結(jié)果 ... //該地方是sha1加密的實(shí)現(xiàn),不再貼代碼 mParms = hexString.toString();// 加密結(jié)果 /* * api要求: 若確認(rèn)此次GET請(qǐng)求來自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷豦chostr參數(shù)內(nèi)容, 則接入生效, 成為開發(fā)者成功,否則接入失敗。 */ // 第三步: 開發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來源于微信接入成功。 System.out.println(TAG + ":" + mParms + "---->" + signature); if (mParms.equals(signature)) { // System.out.println(TAG + ":" + mParms + "---->" + signature); printWriter.write(echostr); } else { // 接入失敗,不用回寫 // System.out.println(TAG + "接入失敗"); }
1), einschlie?lich Inhalt Die Serverkonfiguration ist haupts?chlich erforderlich, nachdem wir unseren eigenen Code geschrieben haben, um auf die WeChat-Entwicklungsplattform zuzugreifen Konfigurierter Server und WeChat-Zugriffsschnittstelle. 2) Serverbetrieb ?ffnen Sie den Tomcat des Servers und legen Sie den geschriebenen Code unter der Webapps-Datei ab.
3), Betrieb der ?ffentlichen WeChat-Plattform* Beantragen Sie ein WeChat-Testkonto (Sie k?nnen sich anmelden, indem Sie direkt mit WeChat scannen): 該部分所有操作源碼,可以直接使用 java微信開發(fā)API的第一篇內(nèi)容就為大家介紹到這里,希望大家繼續(xù)關(guān)注之后的更新內(nèi)容,謝謝! Das obige ist der detaillierte Inhalt vonDetaillierte Erl?uterung des Zugriffs auf den Java WeChat-Entwicklungs-API-Server. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
http://m.miracleart.cn/
* ?ffnen Sie das Testkonto der ?ffentlichen WeChat-Plattform und konfigurieren Sie die Schnittstellenkonfigurationsinformationen. Die Konfiguration ist wie folgt:
URL: http://m.miracleart.cn/
Token:wgyscsf*Senden, bei Erfolg werden Erinnerungen angezeigt und fehlgeschlagene Konfigurationen. package com.gist.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author 高遠(yuǎn)</n> 郵箱:wgyscsf@163.com</n> 博客 http://m.miracleart.cn/;/n>
* 編寫時(shí)期 2016-4-3 下午4:34:05
*/
@WebServlet("/CoreServlet")
public class CoreServlet extends HttpServlet {
String TAG = "CoreServlet";
/*
* 第二步:驗(yàn)證服務(wù)器地址的有效性 開發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請(qǐng)求到填寫的服務(wù)器地址URL上,
* GET請(qǐng)求攜帶四個(gè)參數(shù):signature、timestamp、nonce、echostr
* 開發(fā)者通過檢驗(yàn)signature對(duì)請(qǐng)求進(jìn)行校驗(yàn)(下面有校驗(yàn)方式)。 若確認(rèn)此次GET請(qǐng)求來自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷豦chostr參數(shù)內(nèi)容,
* 則接入生效, 成為開發(fā)者成功,否則接入失敗。
*
* 加密/校驗(yàn)流程如下: 1. 將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序 2.
* 將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行sha1加密 3. 開發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來源于微信
*/
/*
* 字典排序(lexicographical
* order)是一種對(duì)于隨機(jī)變量形成序列的排序方法。其方法是,按照字母順序,或者數(shù)字小大順序,由小到大的形成序列。
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 設(shè)置編碼
req.setCharacterEncoding("utf-8");
resp.setContentType("html/text;charset=utf-8");
resp.setCharacterEncoding("utf-8");
// 獲取輸出流
PrintWriter printWriter = resp.getWriter();
// 設(shè)置一個(gè)全局的token,開發(fā)者自己設(shè)置。api這樣解釋:Token可由開發(fā)者可以任意填寫,
// 用作生成簽名(該Token會(huì)和接口URL中包含的Token進(jìn)行比對(duì),從而驗(yàn)證安全性)
String token = "wgyscsf";
// 根據(jù)api說明,獲取上述四個(gè)參數(shù)
String signature = req.getParameter("signature");
String timestamp = req.getParameter("timestamp");
String nonce = req.getParameter("nonce");
String echostr = req.getParameter("echostr");
// // temp:臨時(shí)打印,觀看返回參數(shù)情況
// System.out.println(TAG + ":signature:" + signature + ",timestamp:"
// + timestamp + ",nonce:" + nonce + ",echostr:" + echostr);
// 根據(jù)api所說的“加密/校驗(yàn)流程”進(jìn)行接入。共計(jì)三步
// 第一步:將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序
String[] parms = new String[] { token, timestamp, nonce };// 將需要字典序排列的字符串放到數(shù)組中
Arrays.sort(parms);// 按照api要求進(jìn)行字典序排序
// 第二步:將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行sha1加密
// 拼接字符串
String parmsString = "";// 注意,此處不能=null。
for (int i = 0; i < parms.length; i++) {
parmsString += parms[i];
}
// sha1加密
String mParms = null;// 加密后的結(jié)果
MessageDigest digest = null;
try {
digest = java.security.MessageDigest.getInstance("SHA");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
digest.update(parmsString.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
// 字節(jié)數(shù)組轉(zhuǎn)換為 十六進(jìn)制 數(shù)
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
mParms = hexString.toString();// 加密結(jié)果
/*
* api要求: 若確認(rèn)此次GET請(qǐng)求來自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷豦chostr參數(shù)內(nèi)容, 則接入生效, 成為開發(fā)者成功,否則接入失敗。
*/
// 第三步: 開發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來源于微信接入成功。
System.out.println(TAG + ":" + mParms + "---->" + signature);
if (mParms.equals(signature)) {
// System.out.println(TAG + ":" + mParms + "---->" + signature);
printWriter.write(echostr);
} else {
// 接入失敗,不用回寫
// System.out.println(TAG + "接入失敗");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Um JDBC -Transaktionen korrekt zu verarbeiten, müssen Sie zun?chst den automatischen Komiti -Modus ausschalten und dann mehrere Vorg?nge ausführen und schlie?lich entsprechend den Ergebnissen festlegen oder rollen. 1. Nennen Sie Conn.SetAutoCommit (False), um die Transaktion zu starten. 2. Führen Sie mehrere SQL -Operationen aus, z. B. einfügen und aktualisieren. 3. Rufen Sie Conn.Commit () an, wenn alle Vorg?nge erfolgreich sind, und rufen Sie Conn.Rollback () auf, wenn eine Ausnahme auftritt, um die Datenkonsistenz zu gew?hrleisten. Gleichzeitig sollten Try-with-Ressourcen verwendet werden, um Ressourcen zu verwalten, Ausnahmen ordnungsgem?? zu behandeln und Verbindungen zu schlie?en, um Verbindungsleckage zu vermeiden. Darüber hinaus wird empfohlen, Verbindungspools zu verwenden und Save -Punkte zu setzen, um teilweise Rollback zu erreichen und Transaktionen so kurz wie m?glich zu halten, um die Leistung zu verbessern.

Verwenden Sie Klassen im Java.Time -Paket, um das alte Datum und die Kalenderklassen zu ersetzen. 2. Erhalten Sie das aktuelle Datum und die aktuelle Uhrzeit durch LocalDate, LocalDatetime und Local Time; 3. Erstellen Sie ein bestimmtes Datum und eine bestimmte Uhrzeit mit der von () Methode; 4.. Verwenden Sie die Plus/Minus -Methode, um die Zeit nicht zu erh?hen und zu verkürzen. 5. Verwenden Sie ZonedDatetime und zoneId, um die Zeitzone zu verarbeiten. 6. Format und analysieren Sie Datumszeichenfolgen über DateTimeFormatter; 7. Verwenden Sie sofortige, um bei Bedarf mit den alten Datumstypen kompatibel zu sein. Die Verarbeitung der Datum in der modernen Java sollte der Verwendung von Java.Timeapi vorrangig machen, was klare, unver?nderliche und linear ist

Pre-Formancetartuptimemoryusage, QuarkusandmicronautleadduToCompile-Time-foringandgraalvSupport, WithQuarkusofttenperformLightBetterin serverloser Szenarien.2. Thyvelopecosystem,

PaymentHandlerapi ist Teil des Webpayments -Standards als Erweiterung von PaymentRequestAPI, und es besteht die Kernaufgabe darin, Entwicklern zu erm?glichen, einen "Zahlungsverarbeitungsverarbeiter" für die Implementierung von benutzerdefinierten Zahlungsprozessen zu registrieren. Es registriert Zahlungsmethoden über den Servicearbeiter und kombiniert die Beantragung der Zahlungsanmeldung im Rahmen des. Well Bekannten Verzeichnis, um Zahlungsverarbeitungsinformationen zu deklarieren. Bei Verwendung wird die Zahlungsanforderung über die PaymentRequest -Schnittstelle eingeleitet, der registrierte Zahlungsabwickler wird aufgerufen und die vollst?ndige () -Methode wird aufgerufen, nachdem die Zahlung abgeschlossen ist. Zu den gemeinsamen Vorsichtsma?nahmen geh?ren: 1. HTTPS -Bereitstellung; 2. Konfigurieren Sie den Dienst ordnungsgem??

HTTP-Protokoll Middleware in Go kann Anforderungsmethoden, Pfade, Client-IP und zeitaufw?ndiges Aufzeichnen aufzeichnen. 1. Verwenden Sie http.Handlerfunc, um den Prozessor zu wickeln, 2. Nehmen Sie die Startzeit und die Endzeit vor und nach dem Aufrufen als n?chstes auf. Der vollst?ndige Beispielcode wurde überprüft, um auszuführen und eignet sich zum Starten eines kleinen und mittelgro?en Projekts. Zu den Erweiterungsvorschl?gen geh?ren das Erfassen von Statuscodes, die Unterstützung von JSON -Protokollen und die Nachverfolgung von ID -IDs.

Die Müllsammlung von Java (GC) ist ein Mechanismus, der automatisch den Speicher verwaltet, der das Risiko eines Speicherlecks verringert, indem unerreichbare Objekte zurückgeführt werden. 1.GC beurteilt die Zug?nglichkeit des Objekts aus dem Stammobjekt (z. B. Stapelvariablen, aktive Threads, statische Felder usw.) und nicht erreichbare Objekte als Müll markiert. 2. Basierend auf dem markierten Algorithmus markieren Sie alle erreichbaren Objekte und l?schen Sie nicht markierte Objekte. 3.. Verfolgen Sie eine Generationskollektionsstrategie: Die neue Generation (Eden, S0, S1) führt h?ufig MollGC aus; Die ?lteren Menschen erzielen weniger, dauert jedoch l?nger, um MajorGC durchzuführen. MetaPace speichert Klassenmetadaten. 4. JVM bietet eine Vielzahl von GC -Ger?ten: SerialGC ist für kleine Anwendungen geeignet; ParallelgC verbessert den Durchsatz; CMS reduziert sich

Durch die Auswahl des richtigen HTMlinput -Typs kann die Datengenauigkeit verbessert, die Benutzererfahrung verbessert und die Benutzerfreundlichkeit verbessert werden. 1. W?hlen Sie die entsprechenden Eingabetypen gem?? dem Datentyp aus, z. B. Text, E -Mail, Tel, Nummer und Datum, die automatisch überprüft und an die Tastatur anpassen k?nnen. 2. Verwenden Sie HTML5, um neue Typen wie URL, Farbe, Reichweite und Suche hinzuzufügen, die eine intuitivere Interaktionsmethode bieten k?nnen. 3.. Verwenden Sie Platzhalter und erforderliche Attribute, um die Effizienz und Genauigkeit der Formulierung zu verbessern. Es sollte jedoch beachtet werden, dass der Platzhalter das Etikett nicht ersetzen kann.

GradleStheBetterChoiceFormostnewProjectsDuetoitSuperiorFlexibilit?t, Leistung und ModerntoolingSupport.1.GRADLE'SGROOVY/KOTLINDSLISMORECONCISEANDEIPRESSIVETHANMANMANBOSEXML.2.GRAGRECONCISEANDEPRPRESSIVETHANMAVENSVOSEXML.2.
