使用PayPal PHP SDK时,Identity Token应传入哪个类及代码位置?
PayPal PHP SDK中Payment Data Transfer(PDT)身份令牌的传入位置
PDT的身份令牌不需要预先注入到SDK的核心配置类中,而是在处理Return URL的回调逻辑里,向PayPal发送PDT验证请求时直接传入。具体操作如下:
- 当用户付款完成从PayPal跳转回你的Return URL时,PayPal会在URL参数里带上
tx(交易ID)等关键信息 - 你需要构建一个POST请求到PayPal的PDT验证端点,把身份令牌作为
at参数传入,同时带上tx参数和固定值cmd=_notify-synch - 用PayPal PHP SDK的HttpClient发送请求并处理响应
示例代码:
// 初始化SDK客户端(根据你的版本调整引入路径) use PayPal\Core\PayPalHttpClient; use PayPal\Core\SandboxEnvironment; use PayPal\Http\HttpRequest; $clientId = '你的Client ID'; $clientSecret = '你的Client Secret'; $environment = new SandboxEnvironment($clientId, $clientSecret); $client = new PayPalHttpClient($environment); // 获取PayPal跳转带来的交易令牌 $txToken = $_GET['tx'] ?? ''; // 你的PDT身份令牌 $identityToken = '你的Identity Token'; // 构建PDT验证请求体 $postData = http_build_query([ 'cmd' => '_notify-synch', 'tx' => $txToken, 'at' => $identityToken ]); // 发送请求到PayPal验证端点 $endpoint = $environment->getBaseUrl() . '/cgi-bin/webscr'; $request = new HttpRequest($endpoint, 'POST'); $request->setBody($postData); $request->addHeader('Content-Type', 'application/x-www-form-urlencoded'); try { $response = $client->execute($request); $responseContent = $response->getBody(); // 解析响应:第一行是SUCCESS/FAIL,后续是交易详情 $lines = explode("\n", trim($responseContent)); if ($lines[0] === 'SUCCESS') { // 处理交易数据,比如提取付款金额、买家信息等 $transactionData = []; foreach (array_slice($lines, 1) as $line) { list($key, $value) = explode('=', $line, 2); $transactionData[urldecode($key)] = urldecode($value); } // 这里可以把交易数据存入数据库或做后续处理 } else { echo 'PDT验证失败: ' . $lines[1]; } } catch (\Exception $e) { echo '请求出错: ' . $e->getMessage(); }
注意事项:
- 沙箱环境和生产环境的验证端点域名会通过
SandboxEnvironment/ProductionEnvironment的getBaseUrl()自动获取,不用手动写死 - PDT是同步验证机制,和SDK里的REST付款接口逻辑完全独立,所以不需要在初始化SDK全局配置时传入令牌
- 响应内容是URL编码的文本行,需要用
urldecode解析真实数据
内容的提问来源于stack exchange,提问作者user3432056
相关产品推荐
相关产品推荐

