Maison  >  Article  >  Java  >  Explication détaillée du cas Java appelant l'interface de paiement Alipay

Explication détaillée du cas Java appelant l'interface de paiement Alipay

php是最好的语言
php是最好的语言original
2018-08-09 13:59:354583parcourir

1. Scénario : L'entreprise doit effectuer le paiement Alipay sur le site Web.
2. API : utilisez la capacité de paiement de l'interface de paiement instantané de la plateforme ouverte d'Alipay. Lien de la plateforme ouverte Alipay
3. Analyse :

1. Les documents d'Alipay sont relativement faciles à lire, principalement parce qu'il existe des DEMO correspondantes. en regardant ici, c'est la version JAVA-UTF-8.

Explication détaillée du cas Java appelant linterface de paiement Alipay

2. Importez DEMO et remplissez le partenaire correspondant et saisissez com.alipay.config (obtenu à partir du backend du marchand correspondant. Exécutez-le). directement pour comprendre le processus de paiement.

Explication détaillée du cas Java appelant linterface de paiement Alipay

3. Réécrire : j'utilise springmvc+mybatis. Le produit lance l'achat (payer avec Alipay), passe à Alipay et Alipay rappelle l'état du paiement.

4. Mise en œuvre :

1. Lancez une demande d'achat du produit (utilisez directement la page dans la DÉMO).

[javascript] voir en clair copier


  1. >="en-tête">

  2.         

    classe

    ="conteneur noir">  

  3.             

    classe

    ="qrcode" >  

  4.                 

    classe

    ="petit code" >  

  5.                     Explication détaillée du cas Java appelant l'interface de paiement Alipay"16px" src="img/little_qrcode .jpg" id="licode">  

  6.                     

    class

    ="showqrs" id=" showqrs">  

  7.                        

    classe

    ="shtoparrow" >≪/p>  

  8.                        

    classe

    ="guanzhuqr" >  

  9.                            Explication détaillée du cas Java appelant l'interface de paiement Alipay"img/guanzhu_qrcode.png" width= "80">  

  10.                                                                                      margin-top:5px;"> 🎜 >                                                                                      ;p cours

    =
  11. "shmsg"

    style=

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

    Recevoir des informations importantes

  13. ;/p>                                        

  14.             

      
  15.         

      
  16.         

    classe

    ="conteneur">  

  17.             

    class

    ="nav" >  

  18.                 "https://www.alipay.com/"  classe="logo">Explication détaillée du cas Java appelant l'interface de paiement Alipay"img/alipay_logo.png" height="30px">  

  19.                 classe="jetée">  

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

  21.                 

      class
    ="barre de navigation" >  

  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.         

    classe

    ="conteneur bleu">  

  32.             

    classe

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

      
  33.         

      
  34.     

      
  35.     

    classe

    ="contenu">  

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

  37. 🎜>"élément" style="margin-top:60px;">                                                                                                                                                   ​

  38.             

    classe

    ="élément">  

  39.                 

    classe

    ="etitle" >商户订单号 :

      
  40.                 

    class

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

      
  41.                 
      

  42.                                                                                                                                                   ).Obligatoire (il est recommandé d'utiliser des lettres et des chiffres en anglais, sans caractères spéciaux)

    > > >"élément">
  43. "etitle">Nom du produit :

  44.                                                                      >"texte" name="WIDsubject" id= "WIDsubject" value="test produit 123">

    >                                                                     Nom (sujet), obligatoire (chinois, anglais, chiffres) sont recommandés, ne peuvent pas contenir de caractères spéciaux) >
  45.                                             
  46.                                                                              ;                                            >>"texte "

    nom=
  47. "WIDtotal_fee"

    id="WIDtotal_fee " valeur=" 0.01">

                                                                                                mark" >Remarque : Montant du paiement (total_fee) est requis (format tel que : 1,00, veuillez être précis à la minute près)                                 
  48. classe

    ="élément"> 🎜>

  49.      

    class

    ="etitle">Description du produit :

  50. "texte" nom ="WIDbody" id= "WIDbody" value="Test de paiement instantané">                                                                                       
  51.                                             🎜>

  52. & lt; "Bouton"

  53. >
  54. "alisubmit"

    id="sbumitBtn" valeur = "Confirmer le paiement">

  55. 🎜>

    "returnAli"

    >

  56.     

    classe

    ="pied de page">  

  57.         

    class

    ="footer-sub">  

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

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

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

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

  62.             "#" id="international" target="_blank">Commerce international|  

  63.             "http://ab.alipay.com/i/jieshao.htm#fr" target="_blank">À propos Alipay  

  64.             
      

  65.              支付宝版权所有  

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

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

  68.                                                 

  69.                                          🎜>

  70. 2. Après avoir cliqué pour confirmer le paiement, demandez l'arrière-plan via ajax et mettez le code html renvoyé directement au-dessus

    , ce formulaire sera être automatiquement soumis.
  71. [javascript]

    voir en clair
  72. copier


$(

fonction (){


$("#sbumitBtn"

    ).on(
  1. 'clic', fonction (){                                                                     type : "post"

    ,
  2.             données : {  

  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.              succès  : fonction(données) {  

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

  11.             },  

  12. erreur : fonction(da){

  13. }

  14. })

  15.  

  16. })

  17. 3. Dans le contrôleur d'arrière-plan, alipayapi.jsp dans la démo est essentiellement utilisé directement. La différence est que le transfert de paramètres est défini par nous-mêmes et que la méthode de retour est conforme aux exigences d'apringmvc et est basée sur l'entreprise. Les informations de commande avec un statut impayé sont enregistrées.


[javascript] voir en clair copier


@RequestMapping(

    "ouvrir"
  1. ) public

  2. ResponseEntity open(Modèle modèle, String WIDout_trade_no, String WIDsubject, String WIDtotal_fee,
  3. Chaîne WIDbody) {

  4.  ///////////////////////////////// ////Paramètres de la demande//////////////////////////////////

  5. // Numéro de commande du marchand, dans la commande du site marchand système Numéro de commande unique, requis

  6. String out_trade_no = WIDout_trade_no

  7. // Nom de la commande, obligatoire

  8. String subject = WIDsubject

  9. // Montant du paiement, requis

  10. String total_fee = WIDtotal_fee;

  11. // Description du produit, vide

  12. Corps de chaîne = WIDbody

  13. //Regroupez les paramètres de la requête dans un tableau

  14. Map >nouveau HashMap(); , AlipayConfig.service

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

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

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

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

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

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

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

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

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

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

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

  27. sParaTemp.put("corps", corps);

  28. // D'autres paramètres commerciaux sont ajoutés selon le document de développement en ligne Adresse du document : https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.O9yorI&treeId. = 62&articleId=103740&docType=1

  29. // Tel que sParaTemp.put("Nom du paramètre", Valeur du paramètre ");

  30. // Demande de build

  31. String sHtmlText = AlipaySubmit.buildRequest(sParaTemp, "get" , "Confirmer" ;

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

  33. > // Enregistrer l'enregistrement de paiement

  34. hysWebMeetingAliService.insertSelective(sParaTemp);

  35. retour nouveau ResponseEntity(modèle, HttpStatus.OK )

  36. }


4. Rappel : Le code java dans notify_url.jsp dans DEMO est également directement utilisé et légèrement modifié et le code métier (statut modifié, etc.) est ajouté

[javascript] voir en clair copier


  1. @RequestMapping("notifier")

  2. @ResponseBody

  3. public String notify (demande HttpServletRequest){

  4. //Obtenir des commentaires d'Alipay POST

  5.     Carte params = nouveau HashMap();  

  6.     Map requestParams = request.getParameterMap();  

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

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

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

  10.         String valueStr = "";  

  11.         pour (int i = 0; i

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

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

  14.         }  

  15.                                                                                                                                                                                          . Si mysign et sign ne sont pas égaux, vous pouvez également utiliser ce code pour convertir

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

  17. paramètres. put(nom , valueStr);

  18. }

  19. //Pour obtenir les paramètres de retour de notification d'Alipay, veuillez vous référer à la liste des paramètres de notification de synchronisation de saut de page dans la documentation technique (ce qui suit est à titre de référence uniquement)//
  20. //Numéro de commande du marchand
  21. String out_trade_no = request.getParameter(
  22. "out_trade_no"
  23. //Numéro de transaction Alipay
  24. String trade_no = request.getParameter(

    "trade_no"
  25. );

  26. //Statut de la transaction
  27. String trade_status = request.getParameter("trade_status"

  28. Référence) //

  29. if(AlipayNotify.verify(params)){//Vérification réussie  

  30.  

    //////////////////// ////////////////////// ///////////////////////// //////////////////////

  31. Écrivez un programme (le code suivant est pour référence seulement) -

  32. booléen

    flg =
  33. faux

    ;

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

  35.                                                                                                                                                                           🎜>                                                                                      

  36. >

  37.                                                 🎜>

    Envoyer une notification sur l'état de la transaction
  38. } else if (trade_status.equals("TRADE_SUCCESS" )){

  39.                                                          >                                          Accéder au détail de la commande et exécuter les procédures commerciales du commerçant

  40. Le total_fee et le seller_id sont cohérents avec le total_fee et le seller_id obtenus lors de la notification <.>

  41. Après traitement, les procédures commerciales du commerçant ne sont pas exécutées

  42. >
  43.                                                                                                        Notification de l'état de la transaction

  44.                                                                                                                                                                                                                                                               🎜> flg = hysWebMeetingAliService.changeOrderAndAliStatusSuccess(out_trade_no);

  45.  

  46.  //—— Veuillez écrire le programme selon votre logique métier (le code ci-dessus est à titre de référence uniquement) -

  47. >

  48.  
  49. //out.print("success"); //Veuillez ne pas modifier ou supprimer

  50.                                                                          "succès"

  51. >
  52. {

  53.  retour "échec"

  54. ;
  55.                                                                                      ///////////////////// ////////////////////// ///////////// ////////////////////////////////// /

     
  56. }
  57. autre

    {//Échec de la vérification

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

  59. retour

    "échec"

    ;
  60. 5. return_url : chemin de la page de notification de synchronisation de saut de page, qui est une page à laquelle Alipay reviendra une fois le paiement réussi. "Le chemin complet au format http:// est requis, et les paramètres personnalisés tels que ?id=123 ne peuvent pas être ajoutés. Le réseau externe doit être accessible normalement." Alipay stipule clairement qu'aucun paramètre personnalisé ne peut être ajouté après la page qui rebondit. de retour, donc certains d'entre nous le sont. Il est un peu difficile de juger le saut en fonction de certains types. J'ai fait une astuce ici : déplacez d'abord le code Java directement dans return_url.jsp et modifiez-le légèrement (passage à la méthode springmvc). Mon adresse de rebond est IP/aliPay/returnUrl, puis new ModelAndView ("redirect:/meeting/info" ). ) pour rediriger vers l'URL à laquelle nous pensons (voir point 4 du résumé ci-dessous pour les problèmes de paramètres).

    [javascript] voir en clair copier


    1. @RequestMapping("returnUrl")

    2. public ModelAndView returnUrl (demande HttpServletRequest){

    3.  ModelAndView mv = nouveau ModelAndView("redirection:/réunion/info"); 🎜>

    4.                               

                                                  

    5.         Carte params = nouveau HashMap();  

    6.         Map requestParams = request.getParameterMap();  

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

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

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

    10.              String valueStr = "";  

    11.             pour (int i = 0; i

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

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

    14.                                                                                                      Si mysign et sign ne sont pas égaux, vous pouvez également utiliser ce code pour convertir

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

    16. params.put (nom, valueStr);

    17.                                                                  🎜>

                                                                                                                                                                        🎜>

    18.  

      //Numéro de commande du marchand
    19.  

    20. String out_trade_no = request.getParameter(

      "out_trade_no"
    21. //Numéro de transaction Alipay
    22. String trade_no = request.getParameter(

      "trade_no"
    23. );

    24.                                                                                                                                                     .getParameter("trade_status"              "color:#ff000); 0;"

    25. >String meetingId = request.getParameter(

      "extra_common_param");

    26. ;

      mv.addObject("meetingId"

      , meetingId);

  61.  

    //Obtenir les paramètres de retour de notification Alipay, veuillez vous référer à la liste des paramètres de notification de synchronisation de saut de page dans la documentation technique (ce qui précède est à titre de référence uniquement) //
  62. //Calculer le résultat de la vérification de la notification

  63.  boolean

  64. verify_result = AlipayNotify.verify(params);
  65.      🎜>
  66.  if(verify_result){//Vérification réussie 

  67.     //////////////////////////////// /////////////////////////////////////////////// /// ////// 

  68.                                                         🎜> 

  69.  

  70.                   —Veuillez écrire le programme selon votre logique métier (le code suivant est à titre de référence uniquement)— —

  71. (trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")) {

    🎜>
  72.                                                                                                                                                                            Exécuter les procédures commerciales du commerçant

  73.                                                                                                                                          }

                                                    
  74. //Cette page peut être utilisée comme illustration de page éditeur
  75. ");

  76. Pour référence)——
  77. /////////////////////////// ///////////////////// ////////////////////////// ///////////////
  78. }

    autre
  79. {

     

    //Cette page peut être modifiée avec des illustrations de page
  80. // out.println ("Échec de la vérification");

  81.  

  82.  retour mv >

  83. }
  84. 5.Résumé :

1. si vous jetez un œil à la DÉMO et l’exécutez pour comprendre le processus.

2. Lors du débogage, notamment des rappels, le projet doit être déployé sur un serveur accessible depuis le réseau externe.

3. Je n'ai pas rencontré les problèmes inexplicables ci-dessus. Si vous le faites, vous pouvez me contacter ou lire l'article sur le débogage à distance d'Eclipse pour suivre le problème.

4. Que dois-je faire si je dois transmettre des paramètres lors de la synchronisation du chemin de la page de notification de saut de page ? J'ai d'abord personnalisé un paramètre, mais je ne l'ai pas obtenu. Ensuite, j'ai vu un commentaire dans la DÉMO. like this Écrit par :

[javascript]

view plain

copy


  1. // D'autres paramètres commerciaux sont ajoutés selon le document de développement en ligne Adresse du document : https://doc.open.alipay.com/doc2/detail. .htm ? spm=a219a.7629140.0.0.O9yorI&treeId=62&articleId=103740&docType=1

  2. Donc, après l'avoir ouvert et je l'ai regardé, j'ai sélectionné Le paramètre de retour public extra_common_param est fourni, et je sais ce que ce champ signifie pour moi. Mais il faut aussi faire attention, ont expliqué d'autres :

[javascript] voir en clair copier


  1. Les paramètres body (description du produit), subject (nom du produit), extra_common_param (paramètres de retour publics) ne peuvent pas contenir de caractères spéciaux (tels que : #, %, &, +), de mots sensibles, et les caractères étrangers ne peuvent pas être utilisés (langues étrangères que Wangwang ne prend pas en charge, comme le coréen, le thaï, le tibétain, le mongol et l'arabe)

méthode ouverte Valeur intermédiaire :

[javascript] view plain copie


  1. sParaTemp.put("extra_common_param", meetingId

Récupérez la valeur dans la méthode returnUrl et utilisez-la comme paramètre de redirection :

[javascript]

voir en clair copie


  1. String meetingId = request.getParameter("extra_common_param"

  2. mv.addObject("meetingId", meetingId

Recommandations associées :

Interface de paiement Alipay Interface de requête de transaction unique

Interface de paiement du site Web mobile Alipay POUR ECShop

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn