Heim > Java > javaLernprogramm > Hauptteil

Ausführliche Erläuterung der Beispiele für die Entwicklung öffentlicher WeChat-Kontozahlungen (Java).

零下一度
Freigeben: 2017-07-19 13:26:20
Original
3880 Leute haben es durchsucht

Früher wurde die Zahlung in der Projektentwicklung des Unternehmens über Alibabas Zahlungssystem abgewickelt, das als „einfach und zwanglos“ bezeichnet wurde. Leider hat das Unternehmen jetzt ein offizielles WeChat-Konto eingerichtet, also bin ich in die WeChat-Zahlungsentwicklung eingestiegen, die voll ist Fallstricke. . .

Geschäftsprozess:

Diese offizielle WeChat-Website erklärt es ausführlich (Portal:).

 

Der allgemeine Vorgang ist: Der Benutzer klickt auf eine Zahlungsschaltfläche -->Hintergrundverarbeitung (eigentlich geht es darum, die für die Zahlung erforderlichen Daten zu kapseln und die zu erhalten prepay_id, und kombinieren Sie es dann mit einigen erforderlichen Parametern, die an die Rezeption übergeben werden) --> Die Rezeption empfängt die Daten und ruft WeChats js auf, um die Daten zu verarbeiten und die Zahlung anzurufen eine Schnittstelle zur Eingabe eines Passworts, einschließlich des Betrags und anderer Informationen –> Nachdem der Benutzer das Passwort eingegeben hat, wird eine erfolgreiche Zahlungsseite angezeigt. Gleichzeitig wird WeChat unsere Schnittstelle zurückrufen uns das Zahlungsergebnis (dieser Teil des Prozesses wird von WeChat selbst abgeschlossen, wir müssen uns darüber keine Sorgen machen) --> Kehren Sie zur Seite des Systems selbst zurück.

Entwicklungsschritte:

1. Zahlungsverzeichnis einrichten

Dieses offizielle Dokument ist sehr ekelhaft und nach dem Lesen war mir etwas schwindelig. Obwohl ich es nicht verstehen kann, finde ich, dass es großartig aussieht! Portal:

2. Legen Sie den autorisierten Domänennamen fest

Diese 2 Schritte Sobald Sie fertig sind, können Sie eine Pause einlegen, denn der große Schlag naht. . .

3. Der Händlerserver ruft die einheitliche Bestellschnittstelle auf, um eine Bestellung anzufordern

Was bewirkt das? Als ich damit anfing, war ich verwirrt, aber wer ruft das WeChat-Zahlungsteam an? Wie können sie ihr Können unter Beweis stellen, ohne einige Dinge hinzuzufügen, die Sie nicht verstehen? . . Wenn Sie es nicht verstehen, folgen Sie einfach dem Dokument

Portal: WeChat-Beamter gab eine detaillierte Erklärung der Parameter. Nachdem ich es lange gelesen hatte, fasste ich es zusammen, indem ich einige notwendige Parameter kapselte und dann auf diese Schnittstelle zugriff, um Daten zu erhalten. Im Folgenden sind einige häufig verwendete Parameter aufgeführt. Kopieren Sie die Einführung anderer Personen im Detail:

appid ==Anwendungs-ID==Melden Sie sich beim offiziellen WeChat-Konto an, Backend-Entwicklung-Grundkonfiguration
mch_id = = WeChat-Zahlungshändler-ID == Melden Sie sich im WeChat-Zahlungs-Backend an und Sie sehen
Geräteinfo == Gerätenummer == Endgerätenummer (Geschäftsnummer oder Kassengeräte-ID). Hinweis: Bitte übergeben Sie „WEB "
body==Produktbeschreibung==Eine kurze Beschreibung des Produkts oder der Zahlungsanweisung (es wird empfohlen, es zu Beginn auf Englisch zu senden, versuchen Sie es nicht auf Chinesisch zu senden, sonst gibt es keine Möglichkeit um später zu überprüfen, ob ein Problem mit der Signatur vorliegt)
trade_type==Handelstyp==Die Werte lauten wie folgt: JSAPI, NATIVE, APP. Die JSAPI, die wir hier verwenden. Wie der Titel bereits sagt, handelt es sich um die offizielle WeChat-Kontozahlung. Zu den Unterschieden siehe
ps: JSAPI – offizielle Kontozahlung, NATIVE – native Scancode-Zahlung, APP – App-Zahlung, die Parameter der einheitlichen Bestellschnittstelle trade_type finden Sie hier. MICROPAY – Kartenzahlung verfügt über eine separate Zahlungsschnittstelle und ruft nicht die einheitliche Bestellschnittstelle auf
nonce_str==random string==random string, nicht länger als 32 Bits (Referenzalgorithmus)
notify_url==Benachrichtigungsadresse==Die Rückrufadresse für den Empfang asynchroner WeChat-Zahlungsbenachrichtigungen. Die Benachrichtigungs-URL muss eine direkt zugängliche URL sein und darf keine Parameter enthalten. (Hier, was ist ein guter Name? Nennen Sie ihn einfach beiläufig, Sie werden ihn sowieso eine Weile nicht brauchen)
out_trade_no==Händler-Bestellnummer==Bestellnummer innerhalb des Händlersystems, maximal 32 Zeichen, kann be Enthält Buchstaben (Referenz:) (Jedes Mal, wenn ich die offizielle Erklärung auf WeChat lese, werde ich verwirrter. Gibt es welche? Egal, ich sende nur 1.)

total_fee ==Gesamtbetrag= =Gesamtbetrag der Bestellung,
Die Einheit ist Cent (beachten Sie dies, ich habe zuerst nicht darauf geachtet, was übergeben wurde, war 0,01, und die Entwicklung verwendet 1 Cent, und dann wurde es zu einer Tragödie . Nachdem ich es viele Male gelesen hatte, stellte ich fest, dass die Einheit Cent ist.
openid==user ID==trade_type=JSAPI, dieser Parameter muss übergeben werden, die eindeutige ID des Benutzers unter der des Händlers appid. (Wenn Sie nicht wissen, woher das kommt, spielt es keine Rolle. Hat WeChat das Dokument nicht für uns geschrieben?)
Und das Wichtigste: Wichtige Zeichen erscheinen immer am Ende.
attach==Anhängedaten, die unverändert in der Abfrage-API und der Zahlungsbenachrichtigung zurückgegeben werden, können als benutzerdefinierte Parameter verwendet werden. (Ich denke, das ist sehr nützlich und kann zum Speichern von Geschäftsdaten verwendet werden, da ich Geschäftsdaten in WeChat-Rückrufen verarbeite. Die Verwendung dieses Parameters ist sicher und schmerzlos.)
sign==signature==offizieller Signaturalgorithmus . . Ich verstehe es nicht, ich verstehe es nicht ganz. Wenn Sie denken, dass Sie es verstehen, ist es egal. Wenn Sie nicht auf ein paar Signaturfehler stoßen, ist es Ihnen peinlich zu sagen, dass Sie die WeChat-Zahlung durchgeführt haben Entwicklung? (Ich persönlich empfehle, bei der Entwicklung die Tools im offiziellen SDK zu verwenden, was Geld sparen kann. Es ist sehr mühsam, das SDK herunterzuladen und Beispiele entsprechend der Java-API hier aufzurufen. Es sind viele Tools darin enthalten.)
sagte, dass dieses Zeichen einen wichtigeren Parameter hat. An der Signatur beteiligte Parameter. Jedenfalls hat es lange gedauert, bis ich es gefunden habe. (Der Firmenbetrieb beantragte eine WeChat-Zahlung. Als ich sie danach fragte, sah sein Gesichtsausdruck so aus.)
key==key Setting Path: WeChat Merchant Platform (pay.weixin.qq.com) -- >Kontoeinstellungen-->API-Sicherheit-->Schlüsseleinstellungen (dies ist sehr wichtig, es wird für Signaturen verwendet)

Die Zusammenfassung dieses Teils besteht darin, die Daten zunächst in eine Karte zu kapseln und sie dann über ein Tool in XML zu konvertieren (das Tool ist oben erwähnt, gehen Sie zurück und lesen Sie es selbst) und fordern Sie dann die [WeChat Unified Order Interface] an. durch eine Post-Anfrage. Wenn es kein Problem mit dem Schild gibt, wird eine XML-Datei mit vielen Daten zurückgegeben. Dies ist der Parameter. Anschließend wird die Signatur generiert und an die Rezeption zurückgegeben. OK, dieser Schritt ist abgeschlossen.

Problemzusammenfassung (Probleme, auf die ich während dieses Prozesses gestoßen bin): 1 (Wichtig) appid und openid müssen übereinstimmen, mit anderen Worten, die openid des Benutzers muss unter dem aktuellen offiziellen Konto des Benutzers liegen (wir haben mehrere öffentliche Bei Konten tritt dieses Problem möglicherweise nicht auf, aber es ist sehr wichtig. Lassen Sie mich zuerst darüber sprechen 🎜>

Die vom Hintergrund an die Rezeption zurückgegebenen Parameter sollten die folgenden Elemente enthalten:
<span style="text-decoration: underline; color: #ff0000">第二步,生成签名并返回到前台</span><span style="color: #ff0000">这个过程中一定要注意参数一定要写对了,大小写,是否有空格,我在这上面掉了一个大坑,界面调用支付时一直闪退,注意.<br><br></span>
Nach dem Login kopieren
appId==Dies ist unverändert==Ändert sich nie

timeStamp==Zeitstempel ==Regel:. Nachdem ich es gelesen habe, sehe ich immer noch verwirrt aus. Es spielt keine Rolle, wir haben die Werkzeugklasse.
nonceStr == Wie auch immer, ich habe gerade die gleiche zufällige Zeichenfolge als Signatur verwendet. Theoretisch sollte es keine Rolle spielen, wenn Sie es nicht verwenden. Fleißige Freunde können es versuchen : prepay_id=** *(Sie haben es richtig erraten. Hier wird die prepay_id verwendet, die wir mit so viel Aufwand erhalten haben)
signType==Signature method==Signaturalgorithmus, unterstützt derzeit MD5

paySign ==Signatur== Diese Signatur muss im Hintergrund neu generiert werden. Verwenden Sie die oben genannten 4 Parameter + einen Schlüssel (nie ändern). (Der Zeitstempel, als ich die Signatur erstellt habe, und der Zeitstempel, der an die Rezeption zurückgesendet wurde, sind derselbe Zeitstempel. Funktioniert es, wenn sie unterschiedlich sind? Es erfolgt keine Überprüfung)

Code zum Generieren von PaySign

Hinweis: Bei der Generierung von prepay_id ist die App-ID ein kleines i. Bei der Generierung von paySign ist die appId ein großes I. Diese beiden sind unterschiedlich
Wenn alles gut geht, erscheint diese Seite
Nachdem all dies erledigt ist, können Sie sich entspannen
Fünf, WeChat-Rückrufverarbeitung
Dieser Teil besteht aus den folgenden 3 kleinen Schritten
 1) Analysieren Sie die übergebenen Flussinformationen und überprüfen Sie die darin enthaltenen Informationen Fluss durch Neuunterzeichnung der Korrektheit. Es soll festgestellt werden, ob die Informationen von WeChat gesendet wurden
2) Wenn return_code und result_code beide ERFOLGREICH sind, verarbeiten Sie die eigene Geschäftslogik des Händlers. Es handelt sich lediglich um den Zahlungsstatus der Bestellung und einige andere Informationen.
3) Teilen Sie WeChat mit, dass ich Ihren Rückgabewert erhalten habe. Keine Notwendigkeit, noch einmal zu posten.

Ohne weitere Umschweife posten wir einfach den Code!

Denken Sie daran,

3. Der Händlerserver ruft die einheitliche Bestellschnittstelle auf, um einen

Anhang

-Parameter anzufordern. Es ist sehr praktisch, Geschäftsdaten hierher zu bringen
public String return_data(HttpServletRequest request, HttpServletResponse response) throws Exception {
        logger.info("微信支付请求回调了");
        String resXml = "";
        Map<String, String> backxml = new HashMap<String, String>();
        InputStream inStream;try {
            inStream = request.getInputStream();
            ByteArrayOutputStream outSteam = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = inStream.read(buffer)) != -1) {
                outSteam.write(buffer, 0, len);
            }
            outSteam.close();
            inStream.close();
            String result = new String(outSteam.toByteArray(), "utf-8");// 获取微信调用我们notify_url的返回信息Map<String, String> map = WXPayUtil.xmlToMap(result);if (map.get("result_code").toString().equalsIgnoreCase("SUCCESS")) {if (WXPayUtil.isSignatureValid(map, PayConfigUtil.API_KEY)) {
                    logger.info("微信支付-签名验证成功");//                    backxml.put("return_code", "SUCCESS");//                    backxml.put("return_msg", "OK");//                    String toXml = WXPayUtil.mapToXml(backxml);//                    response.getWriter().write(toXml);resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"+ "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";//业务处理开始                   //业务处理结束                }
                BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());out.write(resXml.getBytes());out.flush();out.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }return resXml;
    }
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Beispiele für die Entwicklung öffentlicher WeChat-Kontozahlungen (Java).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!