Загрузка корзины PayPal переходит на белую страницу


В настоящее время я пытаюсь интегрировать кнопку оформления заказа PayPal на сайт, но у меня не очень получается. В основном пользователь может добавлять номера и количества товаров в свою корзину, которая хранится на сервере. Затем они могут перейти на страницу "просмотр корзины", на которой будут показаны товары в их корзине. Оттуда они должны иметь возможность нажать кнопку, чтобы передать всю соответствующую информацию в PayPal, чтобы они могли оформить заказ с помощью PayPal, но кнопка, которую я сгенерировал, просто становится белой страница (на конце PayPal https://www.paypal.com/cgi-bin/webscr).

Вот код для создания кнопки:

$sendPayData = array(
    "METHOD" => "BMCreateButton",
    "USER" => "****",
    "PWD" => "****",
    "SIGNATURE" => "****",
    "BUTTONCODE" => "CLEARTEXT", //Just while debugging
    "BUTTONTYPE" => "BUYNOW",
    "BUTTONCOUNTRY" => "GB",
    "BUTTONIMAGE" => "reg",
    "VERSION" => "65.1"
);

$productInfo = array();

$connection = new mysqli(constant("PERCH_DB_SERVER"),constant("PERCH_DB_USERNAME"),constant("PERCH_DB_PASSWORD"),constant("PERCH_DB_DATABASE"));
$sql = 'SELECT * FROM perch2_shop_products WHERE productCode IN ("'.implode('","',array_keys($_SESSION["cartProducts"])).'")';
if($connection->connect_error){
    die("Connection Failed: ".$connection->connect_error);
}

$result = $connection->query($sql);
$total = 0;

if($result->num_rows>0){
    $i = 0;
    while($row = $result->fetch_assoc()){
        $sendPayData["L_BUTTONVAR".((3*$i)+1)] = 'item_name_'.($i+1).'='.preg_replace("/[^A-Za-z0-9 ]/", '',$row["productTitle"]);
        $sendPayData["L_BUTTONVAR".((3*$i)+2)] = 'quantity_'.($i+1).'='.$_SESSION["cartProducts"][$row["productCode"]];
        $sendPayData["L_BUTTONVAR".((3*$i)+3)] = 'amount_'.($i+1).'='.$row["productPrice"];
        $total += $row["productPrice"];
        $i++;
    }
}
$i--;

$sendPayData["L_BUTTONVAR".((3*$i)+4)] = "cmd=_cart";
$sendPayData["L_BUTTONVAR".((3*$i)+5)] = "upload=1";
$sendPayData["L_BUTTONVAR".((3*$i)+6)] = "currency_code=GBP";
$sendPayData["L_BUTTONVAR".((3*$i)+7)] = "business=****";
$sendPayData["L_BUTTONVAR".((3*$i)+8)] = "no_shipping=1";
$sendPayData["L_BUTTONVAR".((3*$i)+9)] = "no_note=1";

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_URL, 'https://api-3t.paypal.com/nvp?'.http_build_query($sendPayData));
$nvpPayReturn = curl_exec($curl);
curl_close($curl);

parse_str($nvpPayReturn, $returnArray);

echo $returnArray["WEBSITECODE"];

Чтобы упростить задачу, вот переменные, которые отправляются в PayPal (без интервала):

https://api-3t.paypal.com/nvp?
METHOD=BMCreateButton&
USER=****&
PWD=****&
SIGNATURE=****&
BUTTONCODE=CLEARTEXT&
BUTTONTYPE=BUYNOW&
BUTTONCOUNTRY=GB&
BUTTONIMAGE=reg&
VERSION=65.1&
L_BUTTONVAR1=item_name_1%3DName1&
L_BUTTONVAR2=quantity_1%3D1&
L_BUTTONVAR3=amount_1%3D6.85&
L_BUTTONVAR4=item_name_2%3DName2&
L_BUTTONVAR5=quantity_2%3D1&
L_BUTTONVAR6=amount_2%3D5.99&
L_BUTTONVAR7=item_name_3%3DName3&
L_BUTTONVAR8=quantity_3%3D1&
L_BUTTONVAR9=amount_3%3D12.85&
L_BUTTONVAR10=cmd%3D_cart&
L_BUTTONVAR11=upload%3D1&
L_BUTTONVAR12=currency_code%3DGBP&
L_BUTTONVAR13=business%3D****&
L_BUTTONVAR14=no_shipping%3D1&
L_BUTTONVAR15=no_note%3D1

ОБНОВЛЕНИЕ 1

Оказывается, paypal не применял переменную cmd, а cmd все еще был:

<input type="hidden" name="cmd" value="_xclick">

Вместо:

<input type="hidden" name="cmd" value="_cart">

Я сообщу, если выясню причину.

Как уже говорилось ранее, это, похоже, проблема с PayPal не мой php, как белый экран был, когда я перешел на веб-сайт PayPal.

ОБНОВЛЕНИЕ 2

Похоже, что если вы установите тип кнопки на cart вместо buynow, то он установит cmd на _cart, но создаст кнопку только в том случае, если у вас есть item_name, quantity эст вместо item_name_1, quantity_1 эст. Однако, если вы сделаете это, при переходе в PayPal будет указано, что ваша корзина пуста. Если я вручную изменю переменные элемента на _1, то кнопка будет работать как предназначен для отображения страницы входа в систему PayPal со всеми товарами, перечисленными в заказе.

Что-то не так с генератором кнопок PayPals?

ОБНОВЛЕНИЕ 3

Причина, по которой он переходит на белый экран, заключается в том, что если вы определите переменную cmd, она просто добавит другую вместо перезаписи старой. Paypal тогда не знает, что делать, так как их 2.

Похоже, что нет способа создать кнопку "Загрузить корзину", если вы сделайте это вручную с помощью html, который можно изменить.

ОБНОВЛЕНИЕ 4

Если вы измените buynow на cart и удалите <input type="hidden" name="cmd" value="_cart"> с кнопки, то это сработает. По какой-то причине использование переменной upload=1 не переопределяет функцию add=1 кнопки cart и заставляет вашу корзину отображаться пустой.

Но даже если это работает в html-версии, мне нужно иметь возможность использовать зашифрованную кнопку, поэтому я все еще не знаю, что делать, кроме как сгруппировать заказ в один элемент используйте переменную custom, чтобы отправить детали заказа по IPN.

 3
Author: D. Hodge, 2016-02-26

1 answers

Поскольку на этот вопрос еще не ответили, я подумал, что могу ответить на него и для других, кто находится в той же лодке, что и я.

Хотя на самом деле это не ответ на вопрос, можете ли вы достичь того, чего я пытался достичь с помощью генератора кнопок Paypal, я в итоге вместо этого использовал API экспресс-проверки (именно это предложила служба поддержки Paypal вместо генератора кнопок после того, как несколько их предложений не сработали работа).

Https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/server-side-REST-integration/

Этот API, похоже, немного изменился с тех пор, как я использовал его в последний раз, и теперь, возможно, есть лучший способ.

 0
Author: D. Hodge, 2017-08-11 09:48:13