【问题标题】:Payflow Link Secure Token not returning token due to Result=4 (and who knows what else?)由于 Result=4,Payflow Link 安全令牌未返回令牌(谁知道还有什么?)
【发布时间】:2014-03-23 22:39:05
【问题描述】:

我正在尝试从使用托管页面的传统 Payflow Link 转移到使用 ColdFusion 的安全令牌方法(仍然是 PayFlow Link),但已经碰壁了。我想我已经通过 Stack 上的所有东西,并且尝试了所有这些,仍然没有快乐 - 太棒了。

我创建了一个表单,只是简单的 HTML,它按预期工作

<cfscript>
  variables.pfl_user="suppressed";
  variables.pfl_vendor = "suppressed";
  variables.pfl_partner = "PayPal";
  variables.pfl_pwd = "suppressed";
  variables.pfl_host_addr = "https://payflowlink.paypal.com";
  //variables.pfl_gettoken_host_addr = "https://pilot-payflowpro.paypal.com";
  variables.pfl_gettoken_host_addr = "https://payflowpro.paypal.com";
</cfscript>

<cfoutput>
<form method="post" action="#variables.pfl_gettoken_host_addr#">

<input type="text" name="USER" value="#variables.pfl_user#" />
<input type="text" name="VENDOR" value="#variables.pfl_vendor#" />
<input type="text" name="PARTNER" value="#variables.pfl_partner#" />
<input type="text" name="PWD" value="#variables.pfl_pwd#" />
<input type="text" name="CREATESECURETOKEN" value="Y" />
<input type="text" name="SECURETOKENID" value="#key#" />
<input type="text" name="TRXTYPE" value="S" />
<input type="text" name="AMT" value="24.95" />
<input type="text" name="CURRENCY" value="USD" />
<input type="submit" />
</form>
</cfoutput>

这很好用,给了我我正在寻找的东西。但是...下面的 cfhttp 代码只返回我的 securetokenId 和一个没有意义的错误代码..

结果代码 4 表示我的 AMT 格式不正确

RESULT=4&SECURETOKENID=08646BF7E5BC88E8A44015803CCF54&RESPMSG=金额无效

<cfhttp method="post" url="#pfl_gettoken_host_addr#" useragent="Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.7 (KHTML, like Gecko) Chrome/5.0.391.0 Safari/533.7" >
        <cfhttpparam name="USER" type="formField" value="#variables.pfl_user#">
        <cfhttpparam name="VENDOR" type="formField" value="#variables.pfl_vendor#">
        <cfhttpparam name="PARTNER" type="formField" value="#variables.pfl_partner#">
        <cfhttpparam name="PWD" type="formField" value="#variables.pfl_pwd#">
        <cfhttpparam name="CREATESECURETOKEN" type="formField" value="Y">
        <cfhttpparam name="SECURETOKENID" type="formField" value="#rStr.newTokenKey#">
        <cfhttpparam name="TRXTYPE" type="formField" value="S">
        <cfhttpparam name="AMT" type="formField" value="24.95">
        <cfhttpparam name="CURRENCY" type="formfield" value="USD">


        <cfhttpparam type="header" name="X-VPS-REQUEST-ID" value="#gettickcount()#" >
        <cfhttpparam type="header" name="Accept-Encoding" value="gzip, deflate, sdch, x-gzip, compress, x-compress" >
        <cfhttpparam type="header" name="X-VPS-CLIENT-TIMEOUT" value="10" >
        <cfhttpparam type="header" name="Accept" value="application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5">
        <cfhttpparam type="header" name="Accept-Language" value="en-US,en;q=0.8">
        <cfhttpparam type="header" name="Accept-Charset" value="ISO-8859-1,utf-8;q=0.7,*;q=0.3">
        <cfhttpparam type="header" name="content-type" value="text/name value">
    </cfhttp>

有人有什么想法吗?所有 Header 的想法都来自 PayPal Docs 和我在 Stack 上找到的东西。

我必须做点什么,我有一些使用我的 PayPal 帐户来测试他/她被盗的信用卡的屏幕截图。所以我已经关闭了 PayPal,直到我做出改变。我必须通过帖子“保护”我的凭据来首先调用服务器端

先回答显而易见的问题:

  1. 是的,我正在生成一个新密钥
  2. 是的,我的帐户中的所有设置都正确(根据 PayPal)
  3. 是的,我对两个请求都使用了相同的变量(新生成的 SECURETOKENID 除外)

M

**解决方法很简单;尽管找到实际问题需要一些工作。对于所有 CFHTTPPARAM type=formfield 标签,选择 encoded="no"

**

【问题讨论】:

  • 可能会尝试使用Fiddler 之类的工具或在jvm 通过 -Djavax.net.debug=all 。只是看看有没有明显的区别。
  • 原来问题在于 cfhttp 正在对金额进行 urlencoding。金额中的整数工作fin,加上一个小数,你得到结果= 4。我发现的方法是将 cfhttp 转到服务器上的另一个页面,在该页面上我执行了 GetHttpRequestData() 并将结果转储到文件中。现在要弄清楚如何绕过 CF 让它对我来说“简单”..
  • 不好意思承认,但这似乎是 !RTFM 的情况。执行此操作的正确方法是将encoded="no" 添加到每个 cfhttpparam 表单字段调用中。 (假设您有 CF9 或更高版本)。我将编辑问题以包含此信息,以防其他人遇到此问题。
  • 我会继续并将其作为单独的“答案”发布,因此遇到相同问题的任何人都会更容易看到解决方案。

标签: paypal coldfusion payflowpro payflowlink


【解决方案1】:

这是一个 !RTFM 的案例。

**解决方法很简单;尽管找到实际问题需要做一些工作,但事后看来,我应该立即做到这一点。

解决方案:对于所有 CFHTTPPARAM type=formfield 标签,选择 encoded="no"

为了找到我从我的开发服务器上的一个页面发布到我的开发服务器上的一个捕获页面的问题,我使用 GetHttpRequestData() 来转储我发送的内容。一旦我看到编码,我就知道问题出在哪里,从那里修复很简单。

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 2014-09-12
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2021-11-21
    • 1970-01-01
    • 2019-09-08
    相关资源
    最近更新 更多