Загрузка корзины 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.
1 answers
Поскольку на этот вопрос еще не ответили, я подумал, что могу ответить на него и для других, кто находится в той же лодке, что и я.
Хотя на самом деле это не ответ на вопрос, можете ли вы достичь того, чего я пытался достичь с помощью генератора кнопок Paypal, я в итоге вместо этого использовал API экспресс-проверки (именно это предложила служба поддержки Paypal вместо генератора кнопок после того, как несколько их предложений не сработали работа).
Этот API, похоже, немного изменился с тех пор, как я использовал его в последний раз, и теперь, возможно, есть лучший способ.