如何获取 PayPal Payments 高级网关集成的安全令牌?

Posted

技术标签:

【中文标题】如何获取 PayPal Payments 高级网关集成的安全令牌?【英文标题】:How do I get the Security Token for PayPal Payments Advanced gateway integration? 【发布时间】:2013-06-07 15:43:29 【问题描述】:

我们有 PayPal Payments Advanced,但我无法通过第一个网关集成步骤。也许我遗漏了一些应该很明显的简单内容。

我能找到的所有用于集成高级网关的官方 PayPal 文档都说第一步是获取安全令牌。页面位于 https://developer.paypal.com/webapps/developer/docs/classic/payflow/gs_ppa_hosted_pages/ 例如。

我在下面发布我的测试脚本(敏感信息已修改)。

每次运行测试脚本时,我都会收到“错误:您的交易无法再处理。请返回商家网站或联系商家。错误:160”错误消息。

根据 PayPal Gateway 开发人员指南和参考,错误 160 是“安全令牌已被使用。表示安全令牌已过期由于交易成功或尝试成功处理时令牌已使用 3 次交易。您必须生成新的安全令牌。”

然而,安全令牌尚未被使用。每次运行脚本时都会生成一个新的。

“启用安全令牌”在 PayPal 管理器中设置为“是”。

这是脚本。我做错了什么?

<?php
$url = 'https://payflowlink.paypal.com';
#$url = 'https://pilot-payflowlink.paypal.com';

$token = md5( 'Will Bontrager' . time() );

/* $info assignment is all one line. Multi-line here for readability */
$info = "PARTNER=PayPal&
VENDOR=CertainReservations&
USER=ABC123&
PWD=321cba&
TRXTYPE=S&
AMT=23.45&
CREATESECURETOKEN=Y&
SECURETOKENID=$token";

echo "<pre>Value:$info</pre>";

$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER         => false,
CURLOPT_VERBOSE        => false,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_POST           => 1,
CURLOPT_POSTFIELDS     => $info
);
$ch = curl_init($url);
curl_setopt_array($ch,$options);
$content = curl_exec($ch);
$err = curl_errno($ch);
$errmsg = curl_error($ch) ;
$info = curl_getinfo($ch);
curl_close($ch);
if( $err )

echo "<pre>Error. $err\n$errmsg\n";
print_r($info);
echo '</pre>';

echo $content;
?>

非常感谢您的任何指导。

我想我一定遗漏了一些关键信息。

【问题讨论】:

【参考方案1】:

只是想补充一点,当没有安全令牌传递到第 2 步时,也会引发错误 160。

如果发生这种情况:主机阻止 curl 调用,因此请求的 Paypal iframe 没有安全令牌,导致错误 160。

【讨论】:

【参考方案2】:

根据Page 31 of this Payflow Gateway documentation 这可能有效。如果他的 PDF 在没有适当的 301 重定向的情况下被删除或移动,我已经在此处复制了内容。

要创建安全令牌,请传递您需要处理的所有参数 除付款明细参数外的交易,例如 信用卡号、到期日期和支票号码。

此外,传递以下 Payflow 参数以创建 安全令牌。

    将 SECURETOKENID 设置为长度不超过 36 个字符的唯一字母数字值。 SECRETOKENID=9a9ea8208de1413abc3d60c86cb1f4c5

    将 CREATESECURETOKEN 设置为值 Y 以请求网关服务器返回令牌。 CREATESECURETOKEN=Y

    将 SILENTTRAN 设置为 TRUE 以禁止显示托管页面。 静音=真

成功的交易将返回 RESULT=0。 从第 33 页开始。

Payflow 安全令牌将过期:

如果相同的 Secure Token 被传递到 Payflow 总共 3 次。 安全令牌生成后 20 分钟。 在成功交易中使用令牌时

可能是格式问题...这里有一些关于您传递的参数的信息(来自 第 51 页):

因为和号 (&) 和等号 (=) 字符有特殊的 含义,它们在名称-值对值中是无效的。

以下内容无效:

COMPANYNAME=Ruff & Johnson COMMENT1=Level=5

在名称-值的值部分包含特殊字符 对,使用长度标签。长度标签指定了确切的数量 值中出现的字符和空格。以下是 有效。

COMPANYNAME[14]=Ruff & Johnson

COMMENT1[7]=级别=5

注意:即使使用长度标记,也不要使用引号 ("")。

【讨论】:

"...如果 PDF 被删除或移动而没有适当的 301 重定向,则在此处复制内容":在处理 PayPal 时,这始终是一个很好的协议。他们比人力车司机有更多的手动操作。【参考方案3】:

据我所知(虽然this is helpful 没有明确记录,但我发现您无法从https://pilot-payflowlink.paypal.com 获得安全令牌,但https://pilot-payflowpro.paypal.com 似乎工作得很好。获得令牌后,您可以将其与 payflowlink 一起使用。

【讨论】:

以上是关于如何获取 PayPal Payments 高级网关集成的安全令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 PayPal Adaptive Payments 授权表的移动浏览器视图

调用 PayPal API /payments/payment 时如何传递送货地址

Express Payments rails 模块需要啥样的 PayPal 沙盒帐户?

使用 ActiveMerchant (payments pro) 将商品数据传递给 PayPal

如何使用 Paypal Payments Pro 沙盒模拟错误?

如何测试定期结算(Paypal Payments Pro)