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-Grundkonfigurationmch_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 aufnonce_str==random string==random string, nicht länger als 32 Bits (Referenzalgorithmus)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>
timeStamp==Zeitstempel ==Regel:. Nachdem ich es gelesen habe, sehe ich immer noch verwirrt aus. Es spielt keine Rolle, wir haben die Werkzeugklasse.
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 unterschiedlichOhne weitere Umschweife posten wir einfach den Code!
Denken Sie daran,3. Der Händlerserver ruft die einheitliche Bestellschnittstelle auf, um einen
Anhang
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; }
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!