Я настроил платеж на своем сервере с помощью PayPal, после некоторой проверки он перенаправляет пользователя на страницу оплаты PayPal, которая, в свою очередь, перенаправляет пользователя на мой сайт с помощью одного настраиваемого параметра «Approved» = «OK» или «NOK». Помимо этого я получаю еще 3 поля в параметрах GET, т. Е. Идентификатор оплаты, payerid и токен при успехе. Я хочу проверить, поступают ли эти параметры от PayPal, и проверить статус платежа, действительно ли пользователь заплатил сумму только на стороне сервера.
Кто-нибудь поможет. Готов предоставить больше информации.
Мой обратный URL выглядит так:
HTTP: //localhost/test/payment.php утвержден = ок&PaymentID = ОПЛАТА-6P3424788A4717248KYR6EPA&маркер = EC-0V6779052Y720131T&PayerID = JWTZXBN9AEBMC
Заранее спасибо.
Вы можете видеть статус транзакции после отправки параметров в PayPal, и они возвращают сообщение об ошибке или успешном сообщении. Вот один полный пример процесса оплаты с периодическим и после этого обычным платежом:
// Параметры для SetExpressCheckout, который будет отправлен в PayPal
$ padata ['L_BILLINGAGREEMENTDESCRIPTION0'] = 'Описание продукта'; $ padata ['L_BILLINGAGREEMENTDESCRIPTION0'] = $ padata ['L_BILLINGAGREEMENTDESCRIPTION0']. '$'. $ product-> price. '/ month'; $ padata ['L_PAYMENTREQUEST_0_DESC0'] = $ padata ['L_BILLINGAGREEMENTDESCRIPTION0']. '$'. $ product-> price. '/ month';
$ padata ['PAYMENTREQUEST_0_NOTIFYURL'] = 'http: // site_url / paypal / ipn'; $ padata ['PAYMENTREQUEST_0_DESC'] = $ product-> name; $ padata ['RETURNURL'] = 'http: // site_url / paypal / returnurl'; $ padata ['CANCELURL'] = 'http: // site_url / paypal / cancelurl';
$ padata ['PAYMENTREQUEST_0_CURRENCYCODE'] = 'USD'; $ padata ['PAYMENTREQUEST_0_PAYMENTACTION'] = 'SALE'; $ padata ['PAYMENTREQUEST_0_ITEMAMT'] = $ product-> price;
$ padata ['PAYMENTREQUEST_0_AMT'] = $ product-> price;
$ padata ['L_BILLINGTYPE0'] = 'RecurringPayments';
$ padata ['L_PAYMENTREQUEST_0_NAME0'] = $ product-> name;
$ padata ['L_PAYMENTREQUEST_0_NUMBER0'] = '322';
$ padata ['L_PAYMENTREQUEST_0_QTY0'] = '1';
$ padata ['L_PAYMENTREQUEST_0_AMT0'] = $ product-> price;
$ paypal_data = http_build_query ($ padata); $ httpParsedResponseAr = $ this-> PPHttpPost ('SetExpressCheckout', $ paypal_data); // Отвечаем согласно сообщению, которое мы получаем от Paypal if ("SUCCESS" == strtoupper ($ httpParsedResponseAr ["ACK"]) || "SUCCESSWITHWARNING" == strtoupper ($ httpParsedResponseAr ["ACK"])) { // Перенаправить пользователя в магазин PayPal с полученным токеном. $ paypalurl = 'https: //www.paypal.com/cgi-bin/webscr? cmd = _express-checkouttoken ='. $ httpParsedResponseAr ["TOKEN"]. ''; header ('Location:'. $ paypalurl); } Еще { эхоОшибка : ».Urldecode ($ httpParsedResponseAr [ "L_LONGMESSAGE0"]). '';
}
Возврат страницы:
$ hosteddata ['L_BILLINGAGREEMENTDESCRIPTION0'] = 'Повторяющееся описание';
$ hosteddata ['L_BILLINGAGREEMENTDESCRIPTION0'] = $ hosteddata ['L_BILLINGAGREEMENTDESCRIPTION0']. '$'. $ pr-> price. '/ month';
$ hosteddata ['L_PAYMENTREQUEST_0_NAME0'] = $ pr-> name;
$ hosteddata ['PROFILEREFERENCE'] = $ GetExpressCheckoutDetails ['L_PAYMENTREQUEST_0_NUMBER0'];
$ hosteddata ['PROFILESTARTDATE'] = дата ('Y-m-d'). «Т». Дата ( 'H: I: S'). 'Z';
$ hosteddata ['SUBSCRIBERNAME'] = $ GetExpressCheckoutDetails ['FIRSTNAME']. ''. $ GetExpressCheckoutDetails [ 'LASTNAME'];
$ hosteddata ['TOKEN'] = urlencode ($ _ POST ['token']);
$ hosteddata ['DESC'] = $ hosteddata ['L_BILLINGAGREEMENTDESCRIPTION0'];
$ hosteddata ['AMT'] = $ pr-> цена;
$ hosteddata ['BILLINGPERIOD'] = 'Месяц';
$ hosteddata ['BILLINGFREQUENCY'] = '1';
$ hosteddata ['TOTALBILLINGCYCLES'] = '12';
$ hosteddata ['REGULARTOTALBILLINGCYCLES'] = '1';
$ hosteddata ['VERSION'] = '74 .0 ';
$ hosteddata ['MAXFAILEDPAYMENTS'] = '1';
$ hosteddata ['L_PAYMENTREQUEST_0_QTY0'] = '1';
$ hosteddata ['L_BILLINGTYPE0'] = 'RecurringPayments';
$ hosteddata ['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] = 'Digital';
$ hosteddata ['L_PAYMENTREQUEST_0_AMT0'] = $ pr-> цена;
$ hosteddata ['INITAMT'] = $ pr-> цена;
$ hosteddata ['L_PAYMENTREQUEST_0_NUMBER0'] = $ pr-> id;
$ hosteddata ['PAYMENTREQUEST_0_NOTIFYURL'] = 'http: // site_url / paypal / ipn';
$ paypal_data = http_build_query ($ hosteddata); $ hosted_saas_response = $ this-> PPHttpPost ('CreateRecurringPaymentsProfile', $ paypal_data);
Я использовал отдельный метод для публикации параметров в PayPal
приватная функция PPHttpPost ($ methodName_, $ nvpStr_) {
$ api_username = '[email protected]'; $ api_password = 'QWEQWEWQEQWEQEQWE';
$ api_signature = 'WQEQWEQWEQWEWQEQWEQWEQWEQWEQWE.cT';
$ api_endpoint = "https://api-3t.paypal.com/nvp";
$ version = '124.0'; $ ch = curl_init ();
curl_setopt ($ ch, CURLOPT_URL, $ api_endpoint);
curl_setopt ($ ch, CURLOPT_VERBOSE, 1);
curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ ch, CURLOPT_POST, 1);
$ nvpreq = "METHOD = $ methodName_VERSION = $ versionPWD = $ api_passwordUSER = $ api_usernameSIGNATURE = $ api_signature $ nvpStr_";
curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ nvpreq);
$ httpResponse = curl_exec ($ ch); if (! $ httpResponse) { выход («$ methodName_ failed:» .curl_error ($ ch). '('. curl_errno ($ ch). ')');
} // Извлекаем детали ответа. $ httpResponseAr = explode ("", $ httpResponse);
$ httpParsedResponseAr = array (); foreach ($ httpResponseAr as $ i => $ value) { $ tmpAr = explode ("=", $ value); if (sizeof ($ tmpAr)> 1) { $ httpParsedResponseAr [$ tmpAr [0]] = $ tmpAr [1]; } } if ((0 == sizeof ($ httpParsedResponseAr)) ||! array_key_exists ('ACK', $ httpParsedResponseAr)) {
exit («Неверный HTTP-ответ для запроса POST ($ nvpreq) на $ api_endpoint.»);
} return $ httpParsedResponseAr;
}
Параметры для SetExpressCheckout для одноразового обычного платежа:
// Параметры для SetExpressCheckout для однократного обычного платежа
$ padata ['L_BILLINGAGREEMENTDESCRIPTION0'] = 'Описание продукта;
$ padata ['L_PAYMENTREQUEST_0_DESC0'] = $ padata ['L_BILLINGAGREEMENTDESCRIPTION0'];
$ padata ['PAYMENTREQUEST_0_NOTIFYURL'] = 'http://siteurl.com/paypal/ipn';
$ padata ['PAYMENTREQUEST_0_DESC'] = $ padata ['L_BILLINGAGREEMENTDESCRIPTION0'];
$ padata ['RETURNURL'] = 'http://siteurl.com/paypal/returnToDownload';
$ padata ['CANCELURL'] = 'http://siteurl.com/paypal/cancelurl';
$ padata ['PAYMENTREQUEST_0_CURRENCYCODE'] = 'USD';
$ padata ['PAYMENTREQUEST_0_PAYMENTACTION'] = 'SALE';
$ padata ['PAYMENTREQUEST_0_ITEMAMT'] = $ product-> price;
$ padata ['PAYMENTREQUEST_0_AMT'] = $ product-> price;
$ padata ['L_PAYMENTREQUEST_0_NAME0'] = $ product-> price;
$ padata ['L_PAYMENTREQUEST_0_NUMBER0'] = 'valid_id # @@ #! @ #! @ # @ !! @ # ASDASD';
$ padata ['L_PAYMENTREQUEST_0_QTY0'] = '1';
$ padata ['L_PAYMENTREQUEST_0_AMT0'] = $ product-> price;
Других решений пока нет …