Получение ошибки 10004 с недопустимым типом кнопки с помощью метода BMUpdateButton для PayPal
Я искал сайт PayPal, форумы и Google в целом в поисках решения этой проблемы. Я знаю, что есть еще один вопрос, очень похожий на мой, хотя он остается без ответа, и я не могу (пока) публиковать комментарии, чтобы попросить разъяснений: что не так с этим кодом для обновления кнопки PayPal? Я получаю "buttontype invalid error"
Я относительно новичок в использовании API Paypal, поэтому я просто воспроизведу шаги, которые привели меня сюда.
- Создал размещенную кнопку типа "добавить в корзину" на Paypal.
- Скопировал сгенерированный HTML на мой сайт.
- Вместо публикации непосредственно в Paypal я просто публикую скрипт на PHP (вставлено ниже).
ini_set ('track_errors', true);
$url = trim('https://api-3t.paypal.com/nvp');
$body_data = array(
'USER' => "omitted",
'PWD' => "omitted",
'SIGNATURE' => "_omitted_",
'VERSION' => "104",
'METHOD' => "BMUpdateButton",
'HOSTEDBUTTONID' => "_omitted_",
'BUTTONTYPE' => "CART",
'BUTTONCODE' => "HOSTED",
'L_BUTTONVAR0' => "amount="_new item price_",
'L_BUTTONVAR1' => "item_name="_item name_",
'L_BUTTONVAR2' => "currency_code="_new currency code_",
'L_BUTTONVAR3' => "on0=".$_POST['os0'],
'L_BUTTONVAR4' => "on1=".$_POST['on1'],
'L_BUTTONVAR5' => "on2=".$_POST['on2'],
'L_BUTTONVAR6' => "quantity=".$_POST['quantity']
);
$body_data = http_build_query($body_data, '', chr(38));
try
{
//create request and add headers
$params = array('http' => array(
'method' => "POST",
'content' => $body_data,
));
//create stream context
$ctx = stream_context_create($params);
//open the stream and send request
$fp = @fopen($url, 'r', false, $ctx);
//get response
$response = stream_get_contents($fp);
//check to see if stream is open
if ($response === false) {
throw new Exception("php error message = " . "$php_errormsg");
}
//echo $response . "<br/>";
//close the stream
fclose($fp);
//parse key from the response
$key = explode("&",$response);
//print_r ($key);
//set url to approve the transaction
$payPalURL = "https://www.paypal.com/cgi-bin/webscr" . str_replace("TOKEN", "token", htmlspecialchars(urldecode($key[0])));
If ( $key[5] == 'ACK=Success')
{
header( "Location: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=T3XNV39TEVDJG" );
}
else
{
echo $response;
echo $key[3];
echo 'ERROR Code: "' . str_replace("L_ERRORCODE0=", "", htmlspecialchars(urldecode($key[5]))) . '"<br/> Error Long Message: "' . str_replace("L_LONGMESSAGE0=", "", htmlspecialchars(urldecode($key[7]))) . '"';
}
}
catch(Exception $e)
{
echo 'Message: ||' .$e->getMessage().'||';
}
}
и в основном то, что я получаю, это ошибка:
Код: "10004" Длинное сообщение об ошибке: "Указанный тип кнопки недействителен".
Основная проблема заключается в том, что, несмотря на то, что я следую всем инструкциям API, которые мне удастся получить (ИМХО веб-сайт разработчиков PayPal - беспорядок), и я уверен, что я правильно устанавливаю переменную BUTTONTYPE, я все еще получаю эту ошибку.
Что я проверил:
- Протестировал размещенную кнопку напрямую, отлично работает. Но мне нужно динамически обновлять цену товара.
- Изменил BUTTONTYPE на что-то не так. Это дает мне соответствующую ошибку: 11925, но когда я перемещаю ее в правильное значение, я снова получаю предыдущий код ошибки.
- Убраны все переменные, кроме обязательных: USER, PWD, SIGNATURE, VERSION, METHOD, HOSTEDBUTTONID,BUTTONTYPE,BUTTONCODE. Я получаю ту же ошибку.
- Поменял версию. На всякий случай значения, разрешенные для BUTTONTYPE, изменились с одного на другой. Та же ошибка
В общем, я застрял здесь. Есть ли у вас какие-либо идеи? Мой сайт размещен на bluehost, хотя я не могу "публиковать" сайт, пока это не будет исправлено для моего клиента.
заранее спасибо
1 ответ
Я ответил на это в этом посте:
BUTTONTYPE нужен BUTTONSUBTYPE, чтобы сопровождать его, даже если он говорит, что это необязательное поле.