Отсутствие суммы и сумма заказа в PayPal Express Checkout
Я включил paypal в codeigniter с paypal_helper (не помню, где я его нашел, но это слегка переписанная версия исходного кода Paypals для экспресс-проверки. Я пытаюсь вызвать эту функцию,
CallShortcutExpressCheckout ($ paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL)
отправка $paymentAmount как int, $currencyCodeType как "NOK" и $paymentType как "Продажа".
Как в песочнице, так и вживую, на сайте PayPal не появляется сумма...
Что может быть неправильным?
Изменить, чтобы еще больше объяснить мой процесс. Я использую это, в основном, как указано в https://www.paypal-labs.com/integrationwizard/ecpaypal/cart.php. Это должно выполняться без формы? Платежный аккаунт может быть отправлен как стандартная переменная при вызове функции CallShortcutExpressCheckout?:
$resArray = CallShortcutExpressCheckout ($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL);
$ack = strtoupper($resArray["ACK"]);
if($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING")
{
RedirectToPayPal ( $resArray["TOKEN"] );
}
else
{
//Display a user friendly Error on the page using any of the following error information returned by PayPal
$ErrorCode = urldecode($resArray["L_ERRORCODE0"]);
$ErrorShortMsg = urldecode($resArray["L_SHORTMESSAGE0"]);
$ErrorLongMsg = urldecode($resArray["L_LONGMESSAGE0"]);
$ErrorSeverityCode = urldecode($resArray["L_SEVERITYCODE0"]);
echo "SetExpressCheckout API call failed. ";
echo "Detailed Error Message: " . $ErrorLongMsg;
echo "Short Error Message: " . $ErrorShortMsg;
echo "Error Code: " . $ErrorCode;
echo "Error Severity Code: " . $ErrorSeverityCode;
}
Маркер сохраняется в базе данных. Пользователь перенаправляется в Paypal, где не указано количество.
Ответы
Ответ 1
Поскольку вы не передаете так называемые "данные о позиции" (данные продукта), PayPal не отображает общую сумму.
Если вы хотите показать сумму для текущей покупки, перенаправите покупателей на https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxxx&useraction=commit (вместо https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxx)
Если вы хотите начать отправку данных о позициях в PayPal, включите следующее в запрос SetExpressCheckout
API:
// Total amount of the purchase, incl shipping, tax, etc
PAYMENTREQUEST_0_AMT=300.0
// Total amount of items purchased, excl shipping, tax, etc
PAYMENTREQUEST_0_ITEMAMT=300.0
// Authorize the funds first (Authorization), or capture immediately (Sale)?
PAYMENTREQUEST_0_PAYMENTACTION=Sale
// First item
L_PAYMENTREQUEST_0_NAME0=Item1
L_PAYMENTREQUEST_0_QTY0=1
L_PAYMENTREQUEST_0_AMT0=100.00
// Second item
L_PAYMENTREQUEST_0_NAME1=Item2
L_PAYMENTREQUEST_0_QTY1=1
L_PAYMENTREQUEST_0_AMT1=200.00
Если вы хотите увидеть это и в своей собственной истории, вам также нужно включить это в DoExpressCheckoutPayment
.
Это также было опубликовано в проблемах с экспресс-проверкой php paypal
Ответ 2
После обширного чтения на беспорядочном веб-сайте Paypal это краткое руководство ExpressCheckout, работающее в 2013 году. Я хотел, чтобы данные о деталях отображались на странице платежных карт и странице истории транзакций.
Ссылки документации по Paypal
Вы можете вызвать следующие методы URL непосредственно в веб-браузере, обновить параметры токена и плательщика соответственно.
Это цифровые товары, поэтому доставка и оплата за обработку груза не предоставляются. Отдельная строка позиции. Сумма и налоговые сборы указаны. Не требуется подтвержденный адрес доставки, никаких полей почтового адреса, не разрешать примечание freetext, плательщику не нужна учетная запись PayPal и не требуется регистрация (solutiontype = sole). Активируйте раздел кредитной карты на сайте PayPal (приземление = биллинг). Используйте персонализированный бренд на сайте PayPal. Используйте настраиваемое поле, чтобы дать собственное значение для целей отслеживания. История транзакций сайта торговца должна содержать сведения о деталях (дайте подробные сведения о методах SetExpressCheckout и DoExpressCheckoutPayment).
Метод SetExpressCheckout открывает новую транзакцию
https://api-3t.sandbox.paypal.com/nvp?
USER=<userid>
&PWD=<pwd>
&SIGNATURE=<mysig>
&METHOD=SetExpressCheckout
&VERSION=98
&PAYMENTREQUEST_0_PAYMENTACTION=SALE
&REQCONFIRMSHIPPING=0
&NOSHIPPING=1
&ALLOWNOTE=0
&SOLUTIONTYPE=Sole
&LANDINGPAGE=Billing
&BRANDNAME=MY+WEBSHOP+TITLE
&PAYMENTREQUEST_0_AMT=22.22
&PAYMENTREQUEST_0_TAXAMT=4.30
&PAYMENTREQUEST_0_ITEMAMT=17.92
&PAYMENTREQUEST_0_DESC=mypurdesc
&PAYMENTREQUEST_0_CUSTOM=custom1
&PAYMENTREQUEST_0_CURRENCYCODE=EUR
&L_PAYMENTREQUEST_0_NUMBER0=itemid1
&L_PAYMENTREQUEST_0_NAME0=MyItem1
&L_PAYMENTREQUEST_0_DESC0=Item1+description
&L_PAYMENTREQUEST_0_QTY0=1
&L_PAYMENTREQUEST_0_AMT0=17.92
&L_PAYMENTREQUEST_0_TAXAMT0=4.30
&RETURNURL=https://myserver.com/webapp/paypal.jsp%3Fcmd=successexp
&CANCELURL=https://myserver.com/webapp/paypal.jsp%3Fcmd=cancelexp
Ответ должен иметь ACK = Успех или ACK = SuccessWithWarning, читать значение TOKEN
Перенаправить браузер пользователя на сайт Paypal, указать значение токена
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=<token>
Пользователь использует учетную запись PayPal или кредитную карту. Paypal перенаправляет пользователя для возврата или отмены URL-адреса.
URL-адрес перенаправления адресата получает значения токена и значения параметра PayerID.
Транзакция еще не завершена, мы должны вызвать метод doExpressCheckoutPayment.
Показать диалоговое окно подтверждения на экране (с помощью кнопки OK, CANCEL) или простой случай
совершить транзакцию и показать сообщение "Спасибо, покупка завершена".
Пользователь уже принял платеж на сайте PayPal и ожидает завершения транзакции.
Вы можете совершить транзакцию в рамках одного обработчика запроса или ответа
асинхронная фоновая задача. Сайт Paypal может быть временно недоступен, поэтому не ожидайте его немедленной работы.
Зафиксировать транзакцию, если перенаправление было успешным, использовать токен и плательщик
https://api-3t.sandbox.paypal.com/nvp?
USER=<userid>
&PWD=<pwd>
&SIGNATURE=<mysig>
&METHOD=DoExpressCheckoutPayment
&VERSION=98
&PAYMENTREQUEST_0_PAYMENTACTION=SALE
&PAYMENTREQUEST_0_AMT=22.22
&PAYMENTREQUEST_0_TAXAMT=4.30
&PAYMENTREQUEST_0_ITEMAMT=17.92
&PAYMENTREQUEST_0_CURRENCYCODE=EUR
&L_PAYMENTREQUEST_0_NUMBER0=itemid1
&L_PAYMENTREQUEST_0_NAME0=MyItem1
&L_PAYMENTREQUEST_0_QTY0=1
&L_PAYMENTREQUEST_0_AMT0=17.92
&L_PAYMENTREQUEST_0_TAXAMT0=4.30
&token=<token>
&payerid=<payerid>
Чтение ACK = Успех и проверка полей
ACK=Success
PAYMENTINFO_0_PAYMENTSTATUS=Completed
PAYMENTINFO_0_ACK=Success
PAYMENTINFO_0_AMT=22.22 total amount must match
PAYMENTINFO_0_FEEAMT=0.99 (just for fun, read paypal comission fee)
PAYMENTINFO_0_CURRENCYCODE=EUR currency must match
(необязательно) Чтение сведений о транзакции из Paypal
Вы можете использовать это во время рабочего процесса транзакции или в любое время, если вы сохранили токен для последующего использования.
https://api-3t.sandbox.paypal.com/nvp
?USER=<userid>
&PWD=<pwd>
&SIGNATURE=<mysig>
&METHOD=GetExpressCheckoutDetails
&VERSION=98
&token=<token>
Чтение параметров ответа.
ACK=Success
CHECKOUTSTATUS=PaymentActionCompleted
PAYMENTREQUEST_0_AMT=22.22
PAYMENTREQUEST_0_TAXAMT=4.30
PAYMENTREQUEST_0_CURRENCYCODE=EUR
(Необязательно) Чтение и сохранение идентификатора транзакции, идентификатора корреляции и идентификатора токена и записи в журнал.
PAYMENTREQUEST_0_TRANSACTIONID=11E585715B622391E
CORRELATIONID=4534b683c335f
Я хочу получать комментарии, если есть логические ошибки.
Ответ 3
Проверьте эту ссылку, надеюсь, что это поможет в некотором смысле:
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECGettingStarted
PAYMENTREQUEST_0_AMT=amount //for amount