Платеж работает, но пользователь никогда не узнает, была ли это подписка или однократный платеж на странице PayPal. - PullRequest
4 голосов
/ 25 января 2012

Итак, я интегрировал Paypal в свой поток платежей, и вот что происходит:

  • Пользователь заходит на страницу. Кликает кнопку оплаты
  • Пользователь сначала перенаправляется на страницу, которая вызывает SetExpressCheckout и перенаправляется на Paypal. (Он должен быть выставлен один раз, скажем, на 77 долларов, а затем каждый месяц на 1 год на одну и ту же сумму. Поэтому я не устанавливаю первоначальную сумму, вместо этого вычитаю ее напрямую.)
  • По возвращении он нажимает кнопку подтверждения, и один раз платеж удерживается с помощью DoExpressCheckout и создается профиль выставления счета.

Все отлично работает. Я получаю оплату каждый месяц. Пользователь не оплачивается дважды при запуске.

ПРОБЛЕМА: Когда пользователь был перенаправлен на Paypal, он видит только ИМЯ ПУНКТА и ОПИСАНИЕ Я установил. То есть Paypal не описывает, является ли транзакция однократной или подпиской, как при использовании простой кнопки подписки для оплаты. Paypal указывает только сумму, но не тип транзакции.

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

1 Ответ

4 голосов
/ 25 января 2012

Включаете ли вы L_BILLINGTYPE0=RecurringPayments?
Это то, что должно изменить формулировку на целевой странице PayPal.

Напомним;вызовите следующие вызовы API, используя (как минимум) следующие параметры:

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;

И CreateRecurringPaymentsProfileс:

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