2014-02-22 56 views
2

我試圖從使用託管頁面的遺留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,直到我做出改變。我不得不這樣做第一個呼叫服務器端,通過後,以「保護」我的憑據

要在前面回答一個顯而易見的問題:

  1. 是的,我產生一個新的密鑰
  2. 是一切在我的帳戶設置正確(根據貝寶)
  3. 是的,我使用的是相同的增值經銷商(除了新生成的SECURETOKENID)兩個請求

中號

**解決方案非常簡單;雖然找到實際的問題是一些工作。對於所有的CFHTTPPARAM類型= formfield標籤,選擇編碼= 「無」

**

+0

可能試着查看成功調用的頭文件,對於那些類似[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

+0

原來問題是cfhttp是urlencoding的金額。數量的整數工作fin,添加一個小數,你會得到結果= 4。我發現的方式是在服務器上的一個不同的頁面cfhttp,我做了一個GetHttpRequestData()並將結果轉儲到一個文件中。現在要弄清楚如何解決CF對我來說「簡單」.. – MikeG

+0

慚愧承認它,但這似乎是一個!RTFM的情況。正確的做法是爲每個cfhttpparam表單調用添加'encoded =「no」'。 (假設你有CF9或更高)。我將編輯問題以包含此信息以防其他人遇到此問題。 – MikeG

回答

0

這是一個!RTFM的情況。

**該解決方案非常簡單;雖然發現實際問題是一點工作,但事後看來,我應該做到這一點。

解決方案:對於所有的CFHTTPPARAM類型= formfield標籤,選擇編碼=「無」

要找到那個我從一個頁面張貼了我的開發服務器上的抓取網頁,我用我的開發服務器上的問題GetHttpRequestData()來轉儲我發送的內容。一旦我看到編碼,我就知道問題是什麼,從那裏解決問題很簡單。