如何用PHP读取PayPal托管按钮中的商品价格数据?
解决方案
PayPal的REST API目前没有直接获取托管按钮详情的端点,但你可以使用PayPal经典NVP/SOAP API的BMGetButtonDetails操作来读取托管按钮的价格等信息。以下是具体实现步骤:
1. 获取经典API凭据
你需要先在PayPal企业账户后台获取经典API的访问凭据(和REST的Client ID/Secret不通用):
- 登录PayPal账户,进入「账户设置」→「API访问」
- 选择「更新」API访问权限,生成签名类型的API凭据(包含用户名、密码、签名)
2. PHP请求示例
使用PHP通过curl调用BMGetButtonDetails接口,传入托管按钮ID来获取详情:
<?php // 经典API凭据 $api_user = "你的经典API用户名"; $api_pwd = "你的经典API密码"; $api_signature = "你的经典API签名"; $hosted_button_id = "你的托管按钮ID(从按钮代码中提取)"; // 环境切换:沙箱用api-3t.sandbox.paypal.com,生产用api-3t.paypal.com $api_endpoint = "https://api-3t.paypal.com/nvp"; // 构造请求参数 $params = [ "METHOD" => "BMGetButtonDetails", "VERSION" => "124.0", // 使用PayPal支持的最新版本号 "USER" => $api_user, "PWD" => $api_pwd, "SIGNATURE" => $api_signature, "HOSTEDBUTTONID" => $hosted_button_id ]; // 发起POST请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $api_endpoint); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); $response = curl_exec($ch); curl_close($ch); // 解析NVP格式的响应 parse_str($response, $result); // 提取价格信息(遍历所有L_BUTTONVAR字段,找到amount参数) $button_price = null; if (isset($result["L_BUTTONVAR0"])) { foreach ($result as $key => $value) { if (str_starts_with($key, "L_BUTTONVAR")) { list($param, $val) = explode("=", $value, 2); if ($param === "amount") { $button_price = urldecode($val); break; } } } } // 输出或使用价格 if ($button_price) { echo "当前按钮价格:$" . $button_price; } else { echo "未找到价格信息或请求失败"; } ?>
3. 关键说明
- 托管按钮ID可以从你生成的静态按钮代码中提取,比如代码里的
hosted_button_id="XXX"部分 - 响应中的
L_BUTTONVAR系列字段存储了按钮的所有自定义参数,除了价格,还能提取商品描述等信息 - 测试时建议先用PayPal沙箱环境验证,确保请求正常后再切换到生产环境
内容的提问来源于stack exchange,提问作者IanS
相关产品推荐
相关产品推荐

