J'ai donc intégré Paypal dans mon flux de paiement et voici ce qui se passe :
- L'utilisateur arrive sur la page. Il clique sur le bouton de paiement
- L'utilisateur est d'abord redirigé vers une page qui appelle
SetExpressCheckout
et est redirigé vers Paypal. (Il doit être facturé une fois pour, disons, 77 $, puis tous les mois pendant un an pour le même montant. C'est pourquoi je ne fixe pas le montant initial, mais le déduit directement). - À son retour, il clique sur le bouton de confirmation et le paiement unique est déduit en utilisant le système de paiement par carte bancaire.
DoExpressCheckout
et le profil de facturation est créé.
Tout fonctionne bien. Je reçois le paiement chaque mois. L'utilisateur n'est pas facturé deux fois au départ.
Le PROBLÈME : Lorsque l'utilisateur a été redirigé vers Paypal, il ne voit que l'icône NOM DE L'ÉLÉMENT y DESCRIPTION J'ai réglé. En d'autres termes, Paypal ne décrit pas s'il s'agit d'une transaction unique ou d'un abonnement, comme c'est le cas lorsque vous utilisez un simple bouton d'abonnement pour le paiement. Paypal ne mentionne que le montant mais pas le type de transaction.
NVPEncoder encoder = new NVPEncoder();
encoder.add("METHOD","SetExpressCheckout");
encoder.add("RETURNURL",returnURL);
encoder.add("CANCELURL",cancelURL);
encoder.add("CURRENCYCODE","USD");
encoder.add("AMT",amt);
encoder.add("BILLINGPERIOD", "Month");
encoder.add("BILLINGFREQUENCY", "1");
encoder.add("PROFILESTARTDATE",dateFormatGmt.format(new Date()));
encoder.add("L_BILLINGTYPE0", "RecurringPayments");
encoder.add("L_BILLINGAGREEMENTDESCRIPTION0",package_name);
encoder.add("L_NAME0",package_name);
encoder.add("L_AMT0",amt);
encoder.add("L_QTY0","1");
String strNVPRequest = encoder.encode();
String ppresponse = (String) caller.call(strNVPRequest);
NVPDecoder resultValues = new NVPDecoder();
resultValues.decode(ppresponse);
String strAck = resultValues.get("ACK");
if (strAck !=null && !(strAck.equals("Success") ||
strAck.equals("SuccessWithWarning"))) {
response.sendRedirect("APIError.jsp");
} else {
response.sendRedirect(redirectUrl);
}