Я пытаюсь настроить повторяющиеся платежи в paypal с помощью PHP. Но проблема, с которой я столкнулась, заключается в том, что я не знаю, поступаю ли я правильно. У меня есть этот класс, который делает запрос к Paypal API:Как настроить периодические платежи в paypal
<?php
class Paypal {
protected $_errors = array();
protected $_credentials = array(
'USER' => 'my-user-id',
'PWD' => 'my-pass',
'SIGNATURE' => 'my-signature',
);
protected $_endPoint = 'https://api-3t.sandbox.paypal.com/nvp';
protected $_version = '74.0';
public function request($method,$params = array()) {
$this -> _errors = array();
if(empty($method)) {
$this -> _errors = array('API method is missing');
return false;
}
$requestParams = array(
'METHOD' => $method,
'VERSION' => $this -> _version
) + $this -> _credentials;
$request = http_build_query($requestParams + $params);
$http_header = array(
'X-PAYPAL-SECURITY-USERID' => 'my-user-id',
'X-PAYPAL-SECURITY-PASSWORD' => 'my-pass',
'X-PAYPAL-SECURITY-SIGNATURE' => 'my-signature',
'X-PAYPAL-REQUEST-DATA-FORMAT' => 'JSON',
'X-PAYPAL-RESPONSE-DATA-FORMAT' => 'JSON'
);
$curlOptions = array (
CURLOPT_HTTPHEADER => $http_header,
CURLOPT_URL => $this -> _endPoint,
CURLOPT_VERBOSE => 1,
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $request
);
$ch = curl_init();
curl_setopt_array($ch,$curlOptions);
$response = curl_exec($ch);
if (curl_errno($ch)) {
$this -> _errors = curl_error($ch);
curl_close($ch);
return false;
} else {
curl_close($ch);
$responseArray = array();
parse_str($response,$responseArray);
return $responseArray;
}
}
}
?>
Тогда я делаю первоначальный запрос, как это:?
session_start();
require_once('Paypal.php');
$paypal = new Paypal();
$amount = 1;
$requestParams = array(
'RETURNURL' => 'http://localhost/tester/paypal/new_test/test_done.php',
'CANCELURL' => 'http://localhost/tester/paypal/new_test/test_cancel.php',
'NOSHIPPING' => '1',
'ALLOWNOTE' => '1',
'L_BILLINGTYPE0' => 'RecurringPayments',
'L_BILLINGAGREEMENTDESCRIPTION0' => 'site donation'
);
$orderParams = array(
'PAYMENTREQUEST_0_AMT' => '1',
'PAYMENTREQUEST_0_CURRENCYCODE' => 'USD',
'PAYMENTREQUEST_0_ITEMAMT' => $amount
);
$item = array(
'L_PAYMENTREQUEST_0_NAME0' => 'site donation',
'L_PAYMENTREQUEST_0_DESC0' => 'site donation',
'L_PAYMENTREQUEST_0_AMT0' => $amount,
'L_PAYMENTREQUEST_0_QTY0' => '1'
);
$response = $paypal->request('SetExpressCheckout', $requestParams + $orderParams + $item);
$sandbox_location = 'https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token=';
if(is_array($response) && $response['ACK'] == 'Success'){
$token = $response['TOKEN'];
$_SESSION['token'] = $token;
header('Location: ' . $sandbox_location . urlencode($token));
}
>
Как вы можете видеть, что я» m, используя метод API SetExpressCheckout
, чтобы получить нужный мне токен и сохранить его в сеансе, чтобы я мог использовать его позже с запросом на CreateRecurringPaymentsProfile
.
Я в настоящее время перенаправлены на страницу, похожее на это:
После того как пользователь сделал вход с PayPal и подтвердить сумму, которую она перенаправляет на страницу успеха, что я указал, который содержит этот код:
session_start();
require_once('Paypal.php');
$amount = 1;
$paypal = new Paypal();
$token_param = array('TOKEN' => $_SESSION['token']);
$current_date = date('Y-m-d');
$recurring_payment_params = array(
'PROFILESTARTDATE' => gmdate('Y-m-d H:i:s', strtotime($current_date . ' + 1 months')),
'DESC' => 'site donation',
'BILLINGPERIOD' => 'Month',
'BILLINGFREQUENCY' => '1',
'TOTALBILLINGCYCLES' => '0',
'AMT' => $amount
);
$recurringpayment_response = $paypal->request('CreateRecurringPaymentsProfile', $recurring_payment_params + $token_param);
Это работает, я уточнена в песочнице внимания, что возвращающийся платежный профиль был создана и что следующие фактуры в следующем месяц. Но проблема в том, что он не очень заметен в интерфейсе paypal (снимок экрана ранее), который они платят за подписку. Возможно, я неправильно получаю URL-адрес перенаправления? (https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token=) или мне нужно добавить дополнительные аргументы в метод SetExpressCheckout
? Пожалуйста помоги.
Кстати, вас может заинтересовать моя [библиотека классов PHP для PayPal] (http://www.angelleye.com/download-angell-eye-php-class-library-for-paypal/). Это по сути делает то же самое, что вы сделали здесь, но он устанавливает каждый возможный параметр для каждого возможного вызова API для вас, поэтому все, что вам нужно сделать, это заполнить значения. Он также содержит комментарии с подробностями о каждом параметре, извлеченном из документации PayPal, поэтому он действительно экономит много времени. –
Да, есть кнопка «Согласен» и «Продолжить», если я установил экспресс-платеж как повторяющийся платеж, но после прочтения текста он явно не кажется очевидным, что его повторяющаяся оплата. Но как я это сделал в коде, правильно? – user225269
Из того, что я вижу, это выглядит хорошо, да. Вам просто нужно убедиться, что ваши клиенты знают, что они подписываются на подписку, прежде чем отправлять PayPal, если вы действительно хотите быть уверенным. –