我正在尝试从使用托管页面的传统 Payflow 链接转移到使用 ColdFusion 的安全令牌方法(仍然是 PayFlow 链接),但已经碰壁了。我想我已经通过 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,直到我做出改变。我必须通过帖子“保护”我的凭据来首先调用服务器端
回答前面明显的问题:
- 是的,我正在生成一个新密钥
- 是的,我的帐户中的所有内容都设置正确(根据 PayPal)
- 是的,我对两个请求都使用相同的变量(新生成的 SECURETOKENID 除外)
米
**解决方案非常简单;尽管找到实际问题需要一些工作。对于所有 CFHTTPPARAM type=formfield 标签,选择 encoded="no"
**