如何通过PHP向Pinterest传递自定义数据(图片、名称、价格)?
使用PHP向Pinterest传递自定义数据(图片、名称、价格)
核心需求拆解
你已经持有Pinterest开发者凭证(APP_ID、APP_SECRET),并且基于DirkGroenen的Pinterest PHP SDK搭建了基础流程,现在要实现的是上传自定义图片、设置Pin的名称,同时添加价格类自定义元数据。先帮你修正现有代码的问题,再给出完整的实现方案。
先修正现有代码的致命问题
你的boot.php里有两处错误,会直接导致流程中断:
- 错误使用
getenv():getenv()是读取系统环境变量的函数,不能直接把APP_ID/APP_SECRET写在括号里,直接传入字符串即可。 - 调试代码阻断流程:
echo "comming";die;会在OAuth授权后直接终止程序,无法获取和保存access token,必须移除。
修正后的boot.php
<?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); require "../autoload.php"; // 直接传入你的开发者凭证 $pinterest = new DirkGroenen\Pinterest\Pinterest('4947671503463268619', 'ce54e73e9f1f366748f3e616b48574c90f8557458bc1ed126bce70c9a6ae70cb'); // 处理OAuth授权流程 if (isset($_GET["code"])) { $token = $pinterest->auth->getOAuthToken($_GET["code"]); $pinterest->auth->setOAuthToken($token->access_token); // 把token存在cookie里,有效期设为7天 setcookie("access_token", $token->access_token, time() + 3600*24*7); } else if (isset($_GET["access_token"])) { $pinterest->auth->setOAuthToken($_GET["access_token"]); } else if (isset($_COOKIE["access_token"])) { $pinterest->auth->setOAuthToken($_COOKIE["access_token"]); } else { // 没有token时跳转到登录页 header("Location: index.php"); exit; } ?>
实现自定义数据传递(图片、名称、价格)
Pinterest的Pin API支持通过metadata字段添加价格等自定义信息,同时note字段可以作为Pin的名称,图片支持本地文件或远程URL两种方式。
完整的callback.php(含自定义数据)
<?php require "boot.php"; ?> <!DOCTYPE html> <html> <head></head> <body> <?php try { // 可选:新建一个画板用于存放自定义Pin,也可以直接用已有的画板(格式:用户名/画板名) $board = $pinterest->boards->create([ "name" => "我的商品展示板", "description" => "存放带价格信息的自定义商品Pin" ]); $board_identifier = $board->id; // 用新建画板的ID // 或者直接用现有画板:$board_identifier = "你的用户名/已有画板名"; // 创建带自定义数据的Pin $pin = $pinterest->pins->create([ "board" => $board_identifier, // 本地图片路径(确保PHP有文件读取权限) "image" => "./testimage.jpg", // 也可以用远程图片URL:"image_url" => "https://你的域名/商品图片.jpg", "note" => "自定义商品名称:无线降噪蓝牙耳机", // Pin的显示名称 "link" => "https://你的域名/商品详情页", // 点击Pin跳转的链接 // 添加价格及其他自定义元数据 "metadata" => [ "price" => [ "amount" => 129.99, "currency" => "USD" // 必须是ISO 4217货币代码,比如CNY、EUR ], // 可以额外添加自定义字段 "custom_fields" => [ "sku" => "BT-007", "category" => "消费电子" ] ] ]); echo "Pin创建成功!Pin ID:" . $pin->id; } catch (Exception $e) { // 捕获异常,方便排查问题(比如权限不足、图片无法读取等) echo "出错啦:" . $e->getMessage(); } ?> </body> </html>
关键注意事项
- 权限验证:确保你的Pinterest应用已经申请了
write_public权限,这是创建Pin的必要权限。 - 图片规范:支持JPG/PNG格式,建议尺寸≥600x900像素,避免使用过小或模糊的图片。
- 元数据规则:
metadata里的price字段必须包含amount(数字类型)和currency(标准货币代码),否则会被API拒绝。 - 错误处理:一定要添加try-catch块,API请求可能因为网络、权限、参数格式等问题失败,捕获异常能快速定位问题。
内容的提问来源于stack exchange,提问作者rajkumar
相关产品推荐
相关产品推荐

