我試圖從使用託管頁面的遺留Payflow鏈接移動到使用ColdFusion的安全令牌方法(仍然PayFlow鏈接)並擊中一堵牆。我認爲我一直都在Stack的所有東西上,並嘗試了所有這些,但仍然沒有快樂 - sooo。Payflow Link安全令牌沒有返回令牌,因爲結果= 4(誰知道還有什麼?)
我創建了一個表格,只是簡單的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>
任何人有一些想法?所有的標題想法都來自PayPal Docs以及我在Stack上發現的東西。
我必須做點什麼,我有一些使用我的PayPal帳戶的screenscraper douche來測試他/她的被盜信用卡..所以我已經關閉了PayPal,直到我做出改變。我不得不這樣做第一個呼叫服務器端,通過後,以「保護」我的憑據
要在前面回答一個顯而易見的問題:
- 是的,我產生一個新的密鑰
- 是一切在我的帳戶設置正確(根據貝寶)
- 是的,我使用的是相同的增值經銷商(除了新生成的SECURETOKENID)兩個請求
中號
**解決方案非常簡單;雖然找到實際的問題是一些工作。對於所有的CFHTTPPARAM類型= formfield標籤,選擇編碼= 「無」
**
可能試着查看成功調用的頭文件,對於那些類似[Live HTTP Headers](https://addons.mozilla.org/en-US/firefox/addon/live-http-headers/)的文件你的失敗的cfhttp調用(只有通用字段)使用像[Fiddler](http://fiddler2.com/)這樣的工具,或者通過'-Djavax.net.debug = all'在jvm中啓用調試。只是爲了看看是否有明顯的差異。 – Leigh
原來問題是cfhttp是urlencoding的金額。數量的整數工作fin,添加一個小數,你會得到結果= 4。我發現的方式是在服務器上的一個不同的頁面cfhttp,我做了一個GetHttpRequestData()並將結果轉儲到一個文件中。現在要弄清楚如何解決CF對我來說「簡單」.. – MikeG
慚愧承認它,但這似乎是一個!RTFM的情況。正確的做法是爲每個cfhttpparam表單調用添加'encoded =「no」'。 (假設你有CF9或更高)。我將編輯問題以包含此信息以防其他人遇到此問題。 – MikeG