Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung des Falles, dass Java die Alipay-Zahlungsschnittstelle aufruft

Detaillierte Erläuterung des Falles, dass Java die Alipay-Zahlungsschnittstelle aufruft

php是最好的语言
php是最好的语言Original
2018-08-09 13:59:354541Durchsuche

1. Szenario: Das Unternehmen muss eine Alipay-Zahlung auf der Website vornehmen.
2. API: Nutzen Sie die Zahlungsfunktion der offenen Plattform-Sofortzahlungsschnittstelle von Alipay. Link zur offenen Alipay-Plattform
3. Analyse:

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.

Detaillierte Erläuterung des Falles, dass Java die Alipay-Zahlungsschnittstelle aufruft

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.

Detaillierte Erläuterung des Falles, dass Java die Alipay-Zahlungsschnittstelle aufruft

3. Umschreiben: Ich verwende springmvc+mybatis. Das Produkt initiiert den Kauf (Zahlung über Alipay), springt zu Alipay und Alipay ruft den Zahlungsstatus zurück.

4. Umsetzung:

1. Initiieren Sie eine Kaufanfrage für das Produkt (verwenden Sie direkt die Seite in der DEMO).

[javascript]einfach anzeigenkopieren


  1. >="header">

  2.         

    class

    ="container black">  

  3.             

    class

    ="qrcode" >  

  4.                 

    class

    ="littlecode" >  

  5.                     Detaillierte Erläuterung des Falles, dass Java die Alipay-Zahlungsschnittstelle aufruft"16px" src="img/little_qrcode .jpg" id="licode">  

  6.                    showqrs">                          

    class=

    "shtoparrow"
  7. >  

                            

    class=

    "guanzhuqr"
  8. >  

                                Detaillierte Erläuterung des Falles, dass Java die Alipay-Zahlungsschnittstelle aufruft"img/guanzhu_qrcode.png" width=

    „80“
  9. >  

  10.                                                                                     margin-top:5px;"> 🎜 >                                                                      ;S. Klasse

    =
  11. "shmsg"

    style=

    "margin-bottom:5px; "
  12. > 🎜>

    Erhalten Sie wichtige Informationen

  13. ;/p>                                    

  14.             

      
  15.         

      
  16.         

    class

    ="container">  

  17.             

    class

    ="nav" >  

  18.                 "https://www.alipay.com/"  class="logo">Detaillierte Erläuterung des Falles, dass Java die Alipay-Zahlungsschnittstelle aufruft"img/alipay_logo.png" height="30px">  

  19.                 class="pier">  

  20.                 "http://open.alipay.com/platform/home.htm" class="open" target="_blank">开放平台  

  21.                 

      class
    ="navbar" >  

  22.                     

  23. "https://doc.open.alipay.com/doc2/detail? treeId=62&articleId=103566&docType=1"
  24.  target="_blank">在线文档

      
  25.                     

  26. "https://cschannel.alipay.com/portal.htm?sourceId=213"
  27.  target ="_blank">技术支持

      
  28.                   

  29.             

      
  30.         

      
  31.         

    Klasse

    ="container-blue">  

  32.             

    class

    ="title" >支付宝即时到账(create_direct_pay_by_user)

      
  33.         

      
  34.     

      
  35.     

    class

    ="content">  

  36.           "${ctx}/aliPay/open" class="alipayform" method="POST" target="_blank"> --%>

  37. 🎜>"element" style="margin-top:60px;">                                                                                                              

  38.             

    class

    ="element">  

  39.                 

    class

    ="etitle" >商户订单号:

      
  40.                 

    class

    ="input" >"text" name="WIDout_trade_no" id="out_trade_no" >

      
  41.                 
      

  42.                                                                                                                                               . Erforderlich (empfohlen werden englische Buchstaben und Zahlen, keine Sonderzeichen)

    > > >"element">
  43. "etitle"

    >Produktname:

  44.                                                                       >"text" name="WIDsubject" id= „WIDsubject“value=„Testprodukt 123“>

    >                                                     Name (Betreff), erforderlich (Chinesisch, Englisch, Zahlen werden empfohlen, dürfen keine Sonderzeichen enthalten) >
  45.                                                              
  46.                                                     ;                                            >>"Text "

  47. name=
  48. "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)                         
  49. class

    ="element"> 🎜>

  50.      

    Klasse

    ="etitle">Produktbeschreibung:

  51. >"text" Name ="WIDbody" id= "WIDbody" value="Instant Credit Test">                                                                                       
  52.                                                                                             , optional (empfohlen werden Chinesisch, Englisch, Zahlen, dürfen keine Sonderzeichen enthalten)

  53.                                            🎜>

    & lt; Eingabetyp =
  54. „Schaltfläche“
  55. >"alisubmit" id="sbumitBtn" value =

  56. „Zahlung bestätigen“
  57. >

    "returnAli">

  58.     

    class

    ="footer">  

  59.         

    class

    ="footer-sub">  

  60.             "http://ab.alipay.com/i/index.htm" target="_blank">关于支付宝|  

  61.             "https://e.alipay.com/index.htm" target="_blank">商家中心|  

  62.             "https://job.alibaba.com/zhaopin/index.htm" target="_blank">诚征英才|  

  63.             "http://ab.alipay.com/i/lianxi.htm" target="_blank">联系我们|  

  64.             "#" id="international" target="_blank">Internationales Geschäft|  

  65.             "http://ab.alipay.com/i/jieshao.htm#en" target="_blank">Über Alipay  

  66.             
      

  67.              支付宝版权所有  

  68.             class="footer-date"> ;2004-2016  

  69.             "http://fun.alipay.com/certificate/jyxkz.htm"  target="_blank">ICP证:沪B2-20150087  

  70.                                                          🎜>

  71. 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.
  72. [javascript]einfach anzeigen

    kopieren
$(


Funktion (){

$("#sbumitBtn"

).on(

'click'

,

Funktion
  1. (){

    $.ajax({ type : "post"

    ,
  2.             Daten : {  

  3.                 WIDout_trade_no : $('#out_trade_no' ).val(),  

  4.                 WIDsubject : $('#WIDsubject').val(),

  5.                 WIDtotal_fee : $('#WIDtotal_fee').val(),  

  6.                 WIDbody : $('#WIDbody').val()  

  7.             },  

  8.             url : "${ctx}/aliPay/open",

  9.             Erfolg : Funktion(Daten) {  

  10.                 $('#returnAli').append(data.sHtmlText);  

  11.             },  

  12. Fehler: Funktion(da){

  13. }

  14. });

  15. })

  16.  

  17. });


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


  1. @RequestMapping("open")

  2. public ResponseEntity open(Model model, String WIDout_trade_no, String WIDsubject, String WIDtotal_fee,

  3. String WIDbody) {

  4.  /////////////////////////////////// / / Parameter anfordern///////////////////////////////////

  5. // Händler-Bestellnummer, in der Händler-Website-Bestellung System Eindeutige Bestellnummer, erforderlich

  6. String out_trade_no = WIDout_trade_no

  7. // Bestellname, erforderlich

  8. String subject = WIDsubject;

  9. // Zahlungsbetrag, erforderlich

  10. String total_fee = WIDtotal_fee;

  11. // Produktbeschreibung, leer

  12. String body = WIDbody;

  13. //Packen Sie die Anforderungsparameter in ein Array

  14. Map sParaTemp = new HashMap(); , AlipayConfig.service

  15.     sParaTemp.put("partner", AlipayConfig.partner);  

  16.     sParaTemp.put("seller_id", AlipayConfig.seller_id);  

  17.     sParaTemp.put("_input_charset", AlipayConfig.input_charset);  

  18.     sParaTemp.put("zahlungstyp", AlipayConfig.zahlungstyp);  

  19.     sParaTemp.put("notify_url", AlipayConfig.notify_url);  

  20.     sParaTemp.put("return_url", AlipayConfig.return_url);  

  21.     sParaTemp.put("anti_phishing_key", AlipayConfig.anti_phishing_key);  

  22.     sParaTemp.put("exter_invoke_ip", AlipayConfig.exter_invoke_ip);  

  23.     sParaTemp.put("out_trade_no", out_trade_no);  

  24.     sParaTemp.put("subject", subject);  

  25.     sParaTemp.put("total_fee", total_fee);  

  26. sParaTemp.put("body", body);

  27. // 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

  28. // So wie sParaTemp.put("Parameter name"," Parameterwert ");

  29. // Build-Anfrage

  30. String sHtmlText = AlipaySubmit.buildRequest(sParaTemp, "get" , "Bestätigen");

  31. model.addAttribute(" sHtmlText", sHtmlText);

  32. > // Zahlungsdatensatz speichern

  33. hysWebMeetingAliService.insertSelective(sParaTemp);

  34. return new ResponseEntity(model, HttpStatus.OK);

  35. }


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


  1. @RequestMapping("notify")

  2. @ResponseBody

  3. public String notify(HttpServletRequest request){

  4. //Erhalten Sie Feedback von Alipay POST

  5.     Map params = new HashMap();  

  6.     Map requestParams = request.getParameterMap();  

  7.     for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {

  8.         String name = (String) iter.next();  

  9.         String[] values = (String[]) requestParams.get(name);  

  10.         String valueStr = "";  

  11.         for (int i = 0; i

  12.             valueStr = (i == values.length - 1) ? valueStr + values[i]  

  13.                     : valueStr + values[i] + ",";  

  14.         }  

  15.                                                                                                                                                                                       . Wenn mysign und sign nicht gleich sind, können Sie diesen Code auch verwenden, um

  16. //valueStr = zu konvertieren new String( valueStr.getBytes("ISO-8859-1"), "gbk");

  17. params. put(name , valueStr);

  18. }

  19. //Um die Benachrichtigungsrückgabeparameter von Alipay zu erhalten, sehen Sie sich bitte die Liste der Benachrichtigungsparameter für die Seitensprungsynchronisierung in der technischen Dokumentation an (das Folgende dient nur als Referenz)//
  20. //Händlerbestellnummer
  21. String out_trade_no = request.getParameter(
  22. "out_trade_no"
  23. );

  24. //Alipay-Transaktionsnummer
  25. String trade_no = request.getParameter(
  26. "trade_no"
  27. );

  28. //Transaktionsstatus
  29. String trade_status = request.getParameter("trade_status");

  30. Referenz) //

  31. if(AlipayNotify.verify(params)){//Verifizierung erfolgreich  

  32.  //////////////////// ////////////////////// /////////////////////////////////////////////////////////////// //////////////////////

  33. Schreiben Sie ein Programm (der folgende Code dient nur als Referenz) -

  34. boolean

  35. flg =
  36. false;

  37.  if(trade_status.equals("TRADE_FINISHED")){

  38.                                                                                                                                                               🎜>                                                                                     

  39. >

  40.                                              🎜>

    Transaktionsstatusbenachrichtigung senden
  41. 🎜>

  42. } else if (trade_status.equals("TRADE_SUCCESS" )){

  43.                                                                                           Gehen Sie zu den Details der Bestellung und führen Sie die Geschäftsverfahren des Händlers aus

  44. 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

  45. Nach der Bearbeitung werden die Geschäftsvorgänge des Händlers nicht ausgeführt

  46. . >
  47.                                                                                Nicht Überprüfung des Transaktionsstatus

  48.                                                                                                                                                                                                                                                    

  49.  
  50.  
  51. //—— Bitte schreiben Sie das Programm entsprechend Ihrer Geschäftslogik (der obige Code dient nur als Referenz) -
  52. >

  53.  

    //out.print("success"); //Bitte nicht ändern oder löschen <.>

  54.                                                           >
  55. "Erfolg"; >

    {
  56.  zurück "fehlgeschlagen";

  57.                                                                                     /////////////////////// ///////////// ////////////////////////////////// /

     
  58. }
  59. else

    {//Verifizierung fehlgeschlagen

  60. //out.print("fail");

  61. zurück

    "fehlgeschlagen";

  62. 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


    1. @RequestMapping("returnUrl")

    2. public ModelAndView returnUrl(HttpServletRequest request){

    3.  ModelAndView mv = new ModelAndView("redirect:/meeting/info"); 🎜>

    4.  

      // Erhalten Sie Alipay-Feedback-Informationen

    5.         Map params = new HashMap();  

    6.         Map requestParams = request.getParameterMap();  

    7.         for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {

    8.             String name = (String) iter.next();  

    9.             String[] values = (String[]) requestParams.get(name);  

    10.             String valueStr = "";  

    11.             for (int i = 0; i

    12.                valueStr = (i == values.length - 1) ? valueStr + values[i]  

    13.                         : valueStr + values[i] + ",";  

    14.                                                                                                      Wenn mysign und sign nicht gleich sind, können Sie diesen Code auch verwenden, um

    15. valueStr.getBytes("ISO- 8859-1"), "utf-8");

    16. params.put (name, valueStr);

    17.                                                                                                                                                                                                                           🎜>

    18.  

      //Händler-Bestellnummer 

    19. String out_trade_no = request.getParameter("out_trade_no");

    20. //Alipay-Transaktionsnummer

    21. String trade_no = request.getParameter(

      "trade_no");

  63.                                                                                                                                                .getParameter("trade_status");              "color:#ff0000; "

  64. >String meetId = request.getParameter(

    "extra_common_param");

  65. mv.addObject("meetingId"

    , meetId);
  66.  

    //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). //
  67. //Berechnen das Ergebnis der Benachrichtigungsüberprüfung

  68.  boolean

  69. verify_result = AlipayNotify.verify(params);
  70.      🎜>
  71.  if(verify_result){//Verifizierung erfolgreich 

  72.     ///////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// //// ////// 

  73.                                                        🎜> 

  74.  

  75.                    – Bitte schreiben Sie das Programm entsprechend Ihrer Geschäftslogik (der folgende Code dient nur als Referenz). ——

  76. (trade_status.equals("TRADE_FINISHED") || >                                                                                                                                                               Geschäftsabläufe des Händlers ausführen

  77.                                                                                                                                            //Diese Seite kann als Seitengrafik verwendet werden Herausgeber ");

  78. Als Referenz)——
  79. //////////////////////////// ///////////////////// ///////////////////////////////////////////////////////////////// ////////////////

  80. }else{  

  81.  //Diese Seite kann mit Seitengrafiken bearbeitet werden

  82. // out.println ("Überprüfung fehlgeschlagen");

  83.  

  84.  zurück mv;>

  85. }
  86. 5. Zusammenfassung:

1. Vergleich der Alipay-Integration. Kurze Antwort, es wird einfacher Schauen Sie sich die DEMO an und führen Sie sie aus, um den Vorgang zu verstehen.

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 Plain

Copy


  1. // 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

  2. Also nachdem ich geöffnet habe Ich habe es mir angesehen und ausgewählt. Der öffentliche Rückgabeparameter extra_common_param wird bereitgestellt, und ich weiß, was dieses Feld für mich bedeutet. Aber man sollte auch aufpassen, erklärten andere:

[javascript]einfach anzeigenkopieren


  1. 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:

  2. [javascript]
view plain

copy


sParaTemp.put(

"extra_common_param"
  1. , meetId);

    Rufen Sie den Wert in der returnUrl-Methode ab und verwenden Sie ihn als Umleitungsparameter:

  2. [javascript]
Ebene anzeigen

kopieren

  1. String meetId = request.getParameter("extra_common_param");

  2. 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!

Stellungnahme:
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