php - 使用 PayPal 的 BMUpdateButton 方法获取按钮类型无效的 10004 错误

标签 php paypal shopping-cart paypal-nvp

我一直在 paypal 网站、论坛和 Google 上搜索有关此问题的解决方案。我知道还有另一个问题与我的非常相似,尽管它仍然没有得到解答,而且我不允许(还)在这里发表评论以要求澄清:what's wrong with this code to update a paypal button? I get "buttontype invalid error"

我是使用 Paypal API 的新手,所以我将只重现将我带到这里的步骤。

  1. 在 Paypal 上创建了一个类型为“添加到购物车”的托管按钮。
  2. 将生成的 HTML 复制到我的网站。
  3. 我没有直接发布到 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 上,但在为我的客户解决此问题之前我不允许“发布”该网站。

提前致谢

最佳答案

我已经在这篇文章中回答了这个问题:

https://stackoverflow.com/a/20899747/2067005

BUTTONTYPE 需要 BUTTONSUBTYPE 伴随它,即使它说它是一个可选字段。

关于php - 使用 PayPal 的 BMUpdateButton 方法获取按钮类型无效的 10004 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18085988/

相关文章:

php - 知道您在 PayPal 上销售什么?

paypal - 您可以在 PayPal 中创建比订阅期更短的试用期吗?

Paypal:无需引入额外步骤即可获取买方所在国家/地区以建立邮费的技术

php - 多个产品(购物车) strip API

jQuery 购物车

php - 从 php 嵌入变量

javascript - 在复选框列表中选中复选框后启用输入字段

php - 比较两个sql表

php - 如何获得 Paypal 销售交易

php - PDO 查询后返回 500 错误(查询确实有效)