4 votes

Le paiement fonctionne mais l'utilisateur ne sait jamais s'il s'agit d'un abonnement ou d'un paiement unique sur la page Paypal.

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);
}

4voto

Robert Points 14020

Est-ce que vous incluez L_BILLINGTYPE0=RecurringPayments ?
C'est ce qui devrait changer le libellé de la page de destination de PayPal.

Pour récapituler, appelez les appels API suivants, avec (au moins) les paramètres suivants :

SetExpressCheckout :

$nvps = array();
$nvps["VERSION"] = "80.0";

$nvps["METHOD"] = "SetExpressCheckout";

$nvps["PAYMENTREQUEST_0_PAYMENTACTION"] = "Sale";
$nvps["PAYMENTREQUEST_0_AMT"] = "1.00";
$nvps["PAYMENTREQUEST_0_CURRENCYCODE"] = "GBP";
$nvps["PAYMENTREQUEST_0_ITEMAMT"] = "1.00";

$nvps["L_BILLINGTYPE0"] = 'RecurringPayments';
$nvps["L_BILLINGAGREEMENTDESCRIPTION0"] = "the subscription";

$nvps["L_PAYMENTREQUEST_0_NUMBER0"] = 1;
$nvps["L_PAYMENTREQUEST_0_NAME0"]= "subscription";
$nvps["L_PAYMENTREQUEST_0_AMT0"]= 1.00;
$nvps["L_PAYMENTREQUEST_0_QTY0"]= 1;

Y CreateRecurringPaymentsProfile avec :

$nvps["PROFILESTARTDATE"] = "2011-07-08T17:40:00Z";
$nvps["BILLINGPERIOD"] = "Month";
$nvps["BILLINGFREQUENCY"] = "1";
$nvps["AMT"] = "1.00";
$nvps["CURRENCYCODE"] = "GBP";
$nvps["DESC"] = "the subscription";

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X