Heim >Java >javaLernprogramm >Detaillierte Erläuterung des Falles, dass Java die Alipay-Zahlungsschnittstelle aufruft
1. Die Dokumente von Alipay sind relativ einfach zu lesen, vor allem weil es entsprechende DEMOs gibt Schauen Sie sich hier an Es handelt sich um die JAVA-UTF-8-Version.
2. Importieren Sie DEMO, geben Sie den entsprechenden Partner ein und geben Sie com.alipay.config ein (vom entsprechenden Händler-Backend erhalten). direkt, um den Zahlungsvorgang zu verstehen.
3. Umschreiben: Ich verwende springmvc+mybatis. Das Produkt initiiert den Kauf (Zahlung über Alipay), springt zu Alipay und Alipay ruft den Zahlungsstatus zurück.
1. Initiieren Sie eine Kaufanfrage für das Produkt (verwenden Sie direkt die Seite in der DEMO).
[javascript]einfach anzeigenkopieren
>="header">
class
class
class
"16px" src="img/little_qrcode .jpg" id="licode">
showqrs"> class=
class=
"img/guanzhu_qrcode.png" width=
„80“
margin-top:5px;"> 🎜 > ;S. Klasse
=style=
"margin-bottom:5px; "Erhalten Sie wichtige Informationen
;/p>
class
class
"https://www.alipay.com/" class="logo">"img/alipay_logo.png" height="30px">
class="pier">
"http://open.alipay.com/platform/home.htm" class="open" target="_blank">开放平台
class
="navbar" >
Klasse
class
class
"${ctx}/aliPay/open" class="alipayform" method="POST" target="_blank"> --%>
🎜>"element" style="margin-top:60px;">
class
class
class
. Erforderlich (empfohlen werden englische Buchstaben und Zahlen, keine Sonderzeichen)
> > >"element">
>Produktname:
>"text" name="WIDsubject" id= „WIDsubject“value=„Testprodukt 123“>
> Name (Betreff), erforderlich (Chinesisch, Englisch, Zahlen werden empfohlen, dürfen keine Sonderzeichen enthalten) >; >>"Text "
"WIDtotal_fee" id="WIDtotal_fee " value=" 0,01">
<. sie> >Hinweis: Zahlungsbetrag (total_fee) ist erforderlich (Format wie: 1,00, bitte auf die Minute genau sein) class
Klasse
="etitle">Produktbeschreibung:
, optional (empfohlen werden Chinesisch, Englisch, Zahlen, dürfen keine Sonderzeichen enthalten)
& lt; Eingabetyp =
>"alisubmit" id="sbumitBtn" value =
>
"returnAli">
class
class
"http://ab.alipay.com/i/index.htm" target="_blank">关于支付宝|
"https://e.alipay.com/index.htm" target="_blank">商家中心|
"https://job.alibaba.com/zhaopin/index.htm" target="_blank">诚征英才|
"http://ab.alipay.com/i/lianxi.htm" target="_blank">联系我们|
"#" id="international" target="_blank">Internationales Geschäft|
"http://ab.alipay.com/i/jieshao.htm#en" target="_blank">Über Alipay
支付宝版权所有
class="footer-date"> ;2004-2016
"http://fun.alipay.com/certificate/jyxkz.htm" target="_blank">ICP证:沪B2-20150087
🎜>
2. Nachdem Sie auf die Bestätigung der Zahlung geklickt haben, Fordern Sie den Hintergrund über Ajax an und fügen Sie den zurückgegebenen HTML-Code direkt über ein. Dieses Formular wird automatisch übermittelt.
[javascript]einfach anzeigen
kopieren
Funktion (){
$("#sbumitBtn"
).on(
,
Funktion$.ajax({ type : "post"
,Daten : {
WIDout_trade_no : $('#out_trade_no' ).val(),
WIDsubject : $('#WIDsubject').val(),
WIDtotal_fee : $('#WIDtotal_fee').val(),
WIDbody : $('#WIDbody').val()
},
url : "${ctx}/aliPay/open",
Erfolg : Funktion(Daten) {
$('#returnAli').append(data.sHtmlText);
},
Fehler: Funktion(da){
}
});
})
});
3. Im Hintergrundcontroller wird alipayapi.jsp in der Demo grundsätzlich direkt verwendet. Der Unterschied besteht darin, dass die Parameterübertragung von uns selbst definiert wird und die Rückgabemethode den Anforderungen von apringmvc entspricht und auf dem Geschäft basiert Bestellinformationen mit dem Status „Unbezahlt“ werden gespeichert.
[javascript]einfach anzeigenkopieren
@RequestMapping("open")
public ResponseEntity
String WIDbody) {
/////////////////////////////////// / / Parameter anfordern///////////////////////////////////
// Händler-Bestellnummer, in der Händler-Website-Bestellung System Eindeutige Bestellnummer, erforderlich
String out_trade_no = WIDout_trade_no
// Bestellname, erforderlich
String subject = WIDsubject;
// Zahlungsbetrag, erforderlich
String total_fee = WIDtotal_fee;
// Produktbeschreibung, leer
String body = WIDbody;
//Packen Sie die Anforderungsparameter in ein Array
Map
sParaTemp.put("partner", AlipayConfig.partner);
sParaTemp.put("seller_id", AlipayConfig.seller_id);
sParaTemp.put("_input_charset", AlipayConfig.input_charset);
sParaTemp.put("zahlungstyp", AlipayConfig.zahlungstyp);
sParaTemp.put("notify_url", AlipayConfig.notify_url);
sParaTemp.put("return_url", AlipayConfig.return_url);
sParaTemp.put("anti_phishing_key", AlipayConfig.anti_phishing_key);
sParaTemp.put("exter_invoke_ip", AlipayConfig.exter_invoke_ip);
sParaTemp.put("out_trade_no", out_trade_no);
sParaTemp.put("subject", subject);
sParaTemp.put("total_fee", total_fee);
sParaTemp.put("body", body);
// Weitere Geschäftsparameter werden gemäß der Online-Entwicklungsdokumentadresse hinzugefügt: https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.O9yorI&treeId = 62&articleId=103740&docType=1
// So wie sParaTemp.put("Parameter name"," Parameterwert ");
// Build-Anfrage
String sHtmlText = AlipaySubmit.buildRequest(sParaTemp, "get" , "Bestätigen");
model.addAttribute(" sHtmlText", sHtmlText);
> // Zahlungsdatensatz speichern
hysWebMeetingAliService.insertSelective(sParaTemp);
return new ResponseEntity(model, HttpStatus.OK);
}
4. Der Java-Code in notify_url.jsp in DEMO wird ebenfalls direkt verwendet und leicht geändert und Geschäftscode (geänderter Status usw.) hinzugefügt;
[javascript]einfach anzeigenkopieren
@RequestMapping("notify")
@ResponseBody
public String notify(HttpServletRequest request){
//Erhalten Sie Feedback von Alipay POST
Map
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
. Wenn mysign und sign nicht gleich sind, können Sie diesen Code auch verwenden, um
//valueStr = zu konvertieren new String( valueStr.getBytes("ISO-8859-1"), "gbk");
params. put(name , valueStr);
}
String out_trade_no = request.getParameter(
);
String trade_no = request.getParameter(
);
String trade_status = request.getParameter("trade_status");
Referenz) //
if(AlipayNotify.verify(params)){//Verifizierung erfolgreich
//////////////////// ////////////////////// /////////////////////////////////////////////////////////////// //////////////////////
Schreiben Sie ein Programm (der folgende Code dient nur als Referenz) -
boolean
false;
if(trade_status.equals("TRADE_FINISHED")){
🎜>
>
Transaktionsstatusbenachrichtigung senden
} else if (trade_status.equals("TRADE_SUCCESS" )){
Gehen Sie zu den Details der Bestellung und führen Sie die Geschäftsverfahren des Händlers aus
Die Gesamtgebühr und die Verkäufer-ID stimmen mit der Gesamtgebühr und der Verkäufer-ID überein, die während der Benachrichtigung erhalten wurden
}
>
//out.print("success"); //Bitte nicht ändern oder löschen <.>
"Erfolg"; >
{zurück "fehlgeschlagen";
/////////////////////// ///////////// ////////////////////////////////// /
{//Verifizierung fehlgeschlagen
//out.print("fail");
"fehlgeschlagen";
} }
5. return_url: Seitenpfad für die Benachrichtigung über die Seitensprungsynchronisierung. Dies ist eine Seite, zu der Alipay nach erfolgreicher Zahlung zurückspringt. „Der vollständige Pfad im http://-Format ist erforderlich und es können keine benutzerdefinierten Parameter wie ?id=123 hinzugefügt werden. Auf das externe Netzwerk muss normal zugegriffen werden können.“ Alipay schreibt eindeutig vor, dass nach der Seite, die zurückspringt, keine benutzerdefinierten Parameter hinzugefügt werden können zurück, also sind es einige von uns. Es ist etwas mühsam, den Sprung anhand einiger Typen zu beurteilen. Ich habe hier einen Trick gemacht: Verschieben Sie zuerst den Java-Code direkt in return_url.jsp und ändern Sie ihn leicht (ändern Sie ihn zur springmvc-Methode. Meine Bounce-Adresse lautet IP/aliPay/returnUrl und dann neues ModelAndView („redirect:/meeting/info“). ), um zu der URL weiterzuleiten, an die wir denken (siehe Punkt 4 der Zusammenfassung unten für Parameterprobleme).
[javascript]einfach anzeigenkopieren
@RequestMapping("returnUrl")
public ModelAndView returnUrl(HttpServletRequest request){
ModelAndView mv = new ModelAndView("redirect:/meeting/info"); 🎜>
// Erhalten Sie Alipay-Feedback-Informationen
Map
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
Wenn mysign und sign nicht gleich sind, können Sie diesen Code auch verwenden, um
valueStr.getBytes("ISO- 8859-1"), "utf-8");
params.put (name, valueStr);
//Händler-Bestellnummer
String out_trade_no = request.getParameter("out_trade_no");
//Alipay-Transaktionsnummer
"trade_no");
.getParameter("trade_status"); "color:#ff0000; "
"extra_common_param");
mv.addObject("meetingId"
, meetId);//Erhalten Sie die Rückgabeparameter für die Alipay-Benachrichtigung. Bitte beachten Sie die Liste der Benachrichtigungsparameter für die Seitensprungsynchronisierung in der technischen Dokumentation (das Obige dient nur als Referenz). //
//Berechnen das Ergebnis der Benachrichtigungsüberprüfung
boolean
if(verify_result){//Verifizierung erfolgreich
///////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// //// //////
🎜>
(trade_status.equals("TRADE_FINISHED") || > Geschäftsabläufe des Händlers ausführen
//Diese Seite kann als Seitengrafik verwendet werden Herausgeber ");
Als Referenz)——
//////////////////////////// ///////////////////// ///////////////////////////////////////////////////////////////// ////////////////
}else{
//Diese Seite kann mit Seitengrafiken bearbeitet werden
// out.println ("Überprüfung fehlgeschlagen");
}
zurück mv;>
5. Zusammenfassung:
2. Beim Debuggen, insbesondere bei Rückrufen, muss das Projekt auf einem Server bereitgestellt werden, auf den vom externen Netzwerk aus zugegriffen werden kann.
3. Ich bin nicht auf die oben genannten unerklärlichen Probleme gestoßen. Wenn Sie dies tun, können Sie mich kontaktieren oder den Eclipse-Remote-Debugging-Artikel lesen, um das Problem zu verfolgen.
4. Was soll ich tun, wenn ich beim Seitensprung-Benachrichtigungspfad Parameter übergeben muss, aber dann habe ich einen Kommentar in der DEMO gesehen? das sagte dies Geschrieben von:
[Javascript]
View PlainCopy
[javascript]einfach anzeigenkopieren
Die Parameter body (Produktbeschreibung), subject (Produktname), extra_common_param (öffentliche Rückgabeparameter) dürfen keine Sonderzeichen (z. B. #, %, &, +), sensible Wörter, und Ausländische Zeichen können nicht verwendet werden (Fremdsprachen, die Wangwang nicht unterstützt, wie z. B. Koreanisch, Thailändisch, Tibetisch, Mongolisch und Arabisch); 🎜>open method Mid-set value:
copy
sParaTemp.put(
"extra_common_param"Rufen Sie den Wert in der returnUrl-Methode ab und verwenden Sie ihn als Umleitungsparameter:
kopieren
String meetId = request.getParameter("extra_common_param");
mv.addObject("meetingId", meetId);
Verwandte Empfehlungen:
Alipay-Zahlungsschnittstelle, Einzeltransaktionsabfrageschnittstelle
Alipay mobile Website-Zahlungsschnittstelle FÜR ECShop
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Falles, dass Java die Alipay-Zahlungsschnittstelle aufruft. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!