Maison >Java >javaDidacticiel >Explication détaillée du cas Java appelant l'interface de paiement Alipay
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.
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.
3. Réécrire : j'utilise springmvc+mybatis. Le produit lance l'achat (payer avec Alipay), passe à Alipay et Alipay rappelle l'état du paiement.
1. Lancez une demande d'achat du produit (utilisez directement la page dans la DÉMO).
[javascript] voir en clair copier
>="en-tête">
classe
classe
classe
"16px" src="img/little_qrcode .jpg" id="licode">
class
classe
classe
"img/guanzhu_qrcode.png" width= "80">
margin-top:5px;"> 🎜 > ;p cours
=style=
"margin-bottom:5px; "Recevoir des informations importantes
;/p>
classe
class
"https://www.alipay.com/" classe="logo">"img/alipay_logo.png" height="30px">
classe="jetée">
"http://open.alipay.com/platform/home.htm" class="ouvrir" target="_blank">开放平台
class
="barre de navigation" >
classe
classe
classe
"${ctx}/aliPay/open" class="alipayform" method="POST" target="_blank"> --%>
🎜>"élément" style="margin-top:60px;">
classe
classe
class
).Obligatoire (il est recommandé d'utiliser des lettres et des chiffres en anglais, sans caractères spéciaux)
> > >"élément">"etitle">Nom du produit :
>"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) >; >>"texte "
nom=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) classe
class
="etitle">Description du produit :
🎜>
id="sbumitBtn" valeur = "Confirmer le paiement">
🎜> "returnAli"
classe
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">Commerce international|
"http://ab.alipay.com/i/jieshao.htm#fr" target="_blank">À propos Alipay
支付宝版权所有
class="footer-date"> ;2004-2016
"http://fun.alipay.com/certificate/jyxkz.htm" target="_blank">ICP证:沪B2-20150087
🎜>
[javascript]
voir en clairfonction (){
$("#sbumitBtn"
'clic', fonction (){ type : "post"
,données : {
WIDout_trade_no : $('#out_trade_no' .val(),
WIDsubject : $('#WIDsubject').val(),
WIDtotal_fee : $('#WIDtotal_fee').val(),
WIDbody : $('#WIDbody').val()
},
url : "${ctx}/aliPay/open",
succès : fonction(données) {
$('#returnAli').append(data.sHtmlText);
},
erreur : fonction(da){
}
})
})
[javascript] voir en clair copier
@RequestMapping(
) public
Chaîne WIDbody) {
///////////////////////////////// ////Paramètres de la demande//////////////////////////////////
// Numéro de commande du marchand, dans la commande du site marchand système Numéro de commande unique, requis
String out_trade_no = WIDout_trade_no
// Nom de la commande, obligatoire
String subject = WIDsubject
// Montant du paiement, requis
String total_fee = WIDtotal_fee;
// Description du produit, vide
Corps de chaîne = WIDbody
//Regroupez les paramètres de la requête dans un tableau
Map
sParaTemp.put("partenaire", AlipayConfig.partner);
sParaTemp.put("seller_id", AlipayConfig.seller_id);
sParaTemp.put("_input_charset", AlipayConfig.input_charset);
sParaTemp.put("payment_type", AlipayConfig.payment_type);
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("sujet", sujet);
sParaTemp.put("total_fee", total_fee);
sParaTemp.put("corps", corps);
// 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
// Tel que sParaTemp.put("Nom du paramètre", Valeur du paramètre ");
// Demande de build
String sHtmlText = AlipaySubmit.buildRequest(sParaTemp, "get" , "Confirmer" ;
model.addAttribute(" sHtmlText", sHtmlText);
> // Enregistrer l'enregistrement de paiement
hysWebMeetingAliService.insertSelective(sParaTemp);
retour nouveau ResponseEntity(modèle, HttpStatus.OK )
}
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
@RequestMapping("notifier")
@ResponseBody
public String notify (demande HttpServletRequest){
//Obtenir des commentaires d'Alipay POST
Carte
Map requestParams = request.getParameterMap();
pour (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
pour (int i = 0; i
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
. Si mysign et sign ne sont pas égaux, vous pouvez également utiliser ce code pour convertir
//valueStr = new String( valueStr.getBytes("ISO-8859-1"), "gbk");
paramètres. put(nom , valueStr);
}
String out_trade_no = request.getParameter(
//Numéro de transaction Alipay
String trade_no = request.getParameter(
"trade_no"
//Statut de la transaction
String trade_status = request.getParameter("trade_status"
Référence) //
if(AlipayNotify.verify(params)){//Vérification réussie
//////////////////// ////////////////////// ///////////////////////// //////////////////////
Écrivez un programme (le code suivant est pour référence seulement) -
booléen
flg =;
if(trade_status.equals("TRADE_FINISHED")){
🎜>
>
Envoyer une notification sur l'état de la transaction
} else if (trade_status.equals("TRADE_SUCCESS" )){
> Accéder au détail de la commande et exécuter les procédures commerciales du commerçant
Le total_fee et le seller_id sont cohérents avec le total_fee et le seller_id obtenus lors de la notification <.>
🎜> flg = hysWebMeetingAliService.changeOrderAndAliStatusSuccess(out_trade_no);
}
//—— Veuillez écrire le programme selon votre logique métier (le code ci-dessus est à titre de référence uniquement) -
>
"succès"
retour "échec"
///////////////////// ////////////////////// ///////////// ////////////////////////////////// /
{//Échec de la vérification
//out.print("fail");
"échec"
;} }
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
@RequestMapping("returnUrl") public ModelAndView returnUrl (demande HttpServletRequest){ ModelAndView mv = nouveau ModelAndView("redirection:/réunion/info"); 🎜> Carte Map requestParams = request.getParameterMap(); pour (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = (String[]) requestParams.get(name); String valueStr = ""; pour (int i = 0; i valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; Si mysign et sign ne sont pas égaux, vous pouvez également utiliser ce code pour convertir valueStr.getBytes("ISO- 8859-1"), "utf-8"); params.put (nom, valueStr); 🎜>
String out_trade_no = request.getParameter( String trade_no = request.getParameter( ); .getParameter("trade_status" "color:#ff000); 0;" "extra_common_param"); mv.addObject("meetingId"
//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) //
//Calculer le résultat de la vérification de la notification
boolean
if(verify_result){//Vérification réussie
//////////////////////////////// /////////////////////////////////////////////// /// //////
🎜>
(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")) {
🎜>Exécuter les procédures commerciales du commerçant
}
");
Pour référence)——
/////////////////////////// ///////////////////// ////////////////////////// ///////////////
}
autre//Cette page peut être modifiée avec des illustrations de page
// out.println ("Échec de la vérification");
}
retour mv >
5.Résumé :
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 plaincopy
[javascript] voir en clair copier
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
sParaTemp.put("extra_common_param", meetingId
[javascript]
voir en clair copie
String meetingId = request.getParameter("extra_common_param" mv.addObject("meetingId", meetingId
Interface de paiement Alipay Interface de requête de transaction unique
Recommandations associées :
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!