не могу разобраться как обработать ответ палки после платежа куча статусов-ACK, PAYERSTATUS,CHECKOUTSTATUS,PAYMENTSTATUS и что с ними делать? доку читаю но не могу ничего понять, в гугле нашел один пример , но там проверяют только ACK официальных примеров найти не могу делаю через http://payum.org/ но у них в доке тоже сложно разобраться
посмотрел пример по ссылке. насколько я понял это примеры данных, которые идут при запросе и ответе то что мне нужно я не нашел может это настолько тривиально что никто об этом не хочет писать?
А ты этот пример запустил как это было написано в readme файле? Там есть пример формирование ссылки на оплату и при получении ответа от paypal проверка статуса платежа. PayPal Payments - similar to Express Checkout in Classic APIs (Source I, Source II) что такое Step II: Execute after Success (required step after user approval) https://github.com/paypal/PayPal-PHP-SDK/blob/master/sample ... PayPal.php // # Create Payment using PayPal as payment method // This sample code demonstrates how you can process a // PayPal Account based Payment. // API used: /v1/payments/payment https://github.com/paypal/PayPal-PHP-SDK/blob/master/sample ... ayment.php // #Execute Payment Sample // This is the second step required to complete // PayPal checkout. Once user completes the payment, paypal // redirects the browser to "redirectUrl" provided in the request. // This sample will show you how to execute the payment // that has been approved by // the buyer by logging into paypal site. // You can optionally update transaction // information by passing in one or more transactions. // API used: POST '/v1/payments/payment/<payment-id>/execute' ------------ в первом файле формируешь ссылку и указываешь куда вернуть пользователя, во втором файле когда пользователь оплатит или откажется пайпал из настроек первого файла перенаправит пользователя на второй файл где ты уже и решай что делать
под Express попал только пример CreatePaymentUsingPayPal.php. source 2 показывает как получить объект платежа, но не показывает как обработать его с учетом статусов попытался найти в файлах упоминание ACK но не нашел может я не правильно объяснил- как получить сам ответ я знаю. мне нужно понять как с учетом статуса ответа определить засчитать на моем сайте оплату или нет
у меня нет песочницы paypal, во втором файле есть ResultPrinter:rintResult("Executed Payment", "Payment", $payment->getId(), $execution, $result); что он пишет? Там и должен быть ответ на твою возможность.
Код (Text): Response Object { "intent": "sale", "payer": { "payment_method": "paypal", "payer_info": { "shipping_address": { } } }, "redirect_urls": { "return_url": "http://test/vendor/paypal/rest-api-sdk-php/sample/payments/ExecutePayment.php?success=true", "cancel_url": "http://test/vendor/paypal/rest-api-sdk-php/sample/payments/ExecutePayment.php?success=false" }, "transactions": [ { "amount": { "total": "20.00", "currency": "USD", "details": { "subtotal": "17.50", "tax": "1.30", "shipping": "1.20" } }, "description": "Payment description", "invoice_number": "54eaf6cbc0889", "item_list": { "items": [ { "name": "Ground Coffee 40 oz", "price": "7.50", "currency": "USD", "quantity": "1" }, { "name": "Granola bars", "price": "2.00", "currency": "USD", "quantity": "5" } ] }, "related_resources": { } } ], "id": "PAY-5F461248J7086223KKTVPNTA", "create_time": "2015-02-23T09:45:48Z", "update_time": "2015-02-23T09:45:48Z", "state": "created", "links": [ { "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-5F461248J7086223KKTVPNTA", "rel": "self", "method": "GET" }, { "href": "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-8DK66721XG429593M", "rel": "approval_url", "method": "REDIRECT" }, { "href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-5F461248J7086223KKTVPNTA/execute", "rel": "execute", "method": "POST" } ] } вот что пишет из статусов только "state": "created"
Ну вот ты сделал create и если клиент согласен, или автоматом делай execute чтобы платёж пошёл в обработку, и потом так же запросишь этот объект чтобы узнать о статусе completed Вот по шагам (переключи на PHP): https://developer.paypal.com/docs/integration/web/web-checkout/ Добавлено спустя 5 минут 57 секунд: На счёт complete ошибся, там approved используют
всю грязную работу по созданию токенов, и прочие проверки делает библиотека http://payum.org/ я только создаю запрос на платеж, и обрабатываю ответ палки вот пример кода http://payum.org/doc/0.13/PayumYiiExtension/get-it-started Код (Text): class PaypalController extends CController { public function actionPrepare() { $paymentName = 'paypal_ec'; $payum = $this->getPayum(); $storage = $payum->getRegistry()->getStorage( 'PaymentDetails', $paymentName ); $details = $storage->create(); $details['PAYMENTREQUEST_0_CURRENCYCODE'] = 'USD'; $details['PAYMENTREQUEST_0_AMT'] = 1.23; $storage->update($details); $captureToken = $payum->getTokenFactory()->createCaptureToken($paymentName, $details, 'paypal/done'); $this->redirect($captureToken->getTargetUrl()); } public function actionDone() { $token = $this->getPayum()->getHttpRequestVerifier()->verify($_REQUEST); $payment = $this->getPayum()->getRegistry()->getPayment($token->getPaymentName()); $status = new \Payum\Core\Request\GetHumanStatus($token); $payment->execute($status); echo CHtml::tag('h3', array(), 'Payment status is ' . $status->getValue()); echo CHtml::tag('pre', array(), json_encode(iterator_to_array($status->getModel()), JSON_PRETTY_PRINT)); Yii::app()->end(); } /** * @return \Payum\YiiExtension\PayumComponent */ private function getPayum() { return Yii::app()->payum; } } больше всего смущают статусы ACK и CHECKOUTSTATUS. ACK может быть success но оплата не произведена думаю сделать такую проверку Код (Text): if ($model["ACK"] == Api::ACK_SUCCESS || $model["ACK"] == Api::ACK_SUCCESS_WITH_WARNING || $model['CHECKOUTSTATUS'] == Api::CHECKOUTSTATUS_PAYMENT_ACTION_COMPLETED ) { принимает оплату } else { throw new CHttpException(503, $model["L_LONGMESSAGE0"]); }