2013-08-23 46 views
1

我想解決與Authorize.net發生的問題。 SessionToken在測試模式下通過測試帳戶生成。現在,每次通過測試帳戶或實際帳戶預覽表單時都會生成一個新的SessionToken需要幫助爲ColdFusion SessionToken和AIM的Authorize.net

每次以預覽模式訪問表單時,都會顯示隱藏的輸入字段。我使用從x_loginx_tran_key組合的toBase64()字符串在我的表單上生成了一個隱藏的輸入字段。輸出是這樣的:

<INPUT TYPE="HIDDEN" NAME="SessionToken" ID="SessionToken" VALUE="TXpOSFRUWXpXbk40VjNSeg==TlRsU2JqaHFOM2RLZFd0RU5VdzJadz09"> 
在隱藏輸入字段 SessionToken,你可以看到上面的表格

當生成自己SessionToken進行處理,嘗試處理https://test.authorize.net/gateway/transact.dll後顯示的錯誤表明這一點:

(46)您的會話已過期或不存在。您必須再次登錄 才能繼續工作。

表單實際工作的唯一方法是在預覽模式下從窗體中獲取SessionToken代碼之後。例如:轉到賬戶 - >設置 - >付款方式 - >預覽 - >並查看並複製來自視圖幀源的代碼。它看起來像這樣:

<INPUT TYPE="HIDDEN" NAME="SessionToken" ID="SessionToken" VALUE="jMsCez2DId$VvgF4s4Hbjbe$Uv6WnJh8cEKBD5HqTUEqlHoRBebKZ07bp4RZdpwOPnGabB3pbcWFppJCph7dg6HjQeroJvlay6mQm5ocjkZPq44uT4nqeg2zWhX13b7Blp$qN7ZDzQ5HF1abfukJTQAA,jMsCez2DId$VvgF4s4Hbjbe$Uv6WnJh8cEKBD5HqTUEqlHoRBebKZ07bp4RZdpwOPnGabB3pbcWFppJCph7dg6HjQeroJvlay6mQm5ocjkZPq44uT4nqeg2zWhX13b7Blp$qN7ZDzQ5HF1abfukJTQAA"> 

最後,如果我使用的值:

jMsCez2DId $ VvgF4s4Hbjbe $ Uv6WnJh8cEKBD5HqTUEqlHoRBebKZ07bp4RZdpwOPnGabB3pbcWFppJCph7dg6HjQeroJvlay6mQm5ocjkZPq44uT4nqeg2zWhX13b7Blp $ qN7ZDzQ5HF1abfukJTQAA

SessionToken爲:

<cfset SessionToken = 'jMsCez2DId$VvgF4s4Hbjbe$Uv6WnJh8cEKBD5HqTUEqlHoRBebKZ07bp4RZdpwOPnGabB3pbcWFppJCph7dg6HjQeroJvlay6mQm5ocjkZPq44uT4nqeg2zWhX13b7Blp$qN7ZDzQ5HF1abfukJTQAA'> 

並處理它的工作形式。但是,如果登錄到測試帳戶,它只能在當前會話中使用一次。

當然,所有的幫助表示讚賞。這是我需要的代碼的最後一部分,只是無法弄清楚如何使它工作。我需要獲取SessionToken的響應來填充窗體上的SessionToken隱藏字段輸入。

我沒有使用CFHTTP方法,因爲窗體在網站上,並且在付款表單加載SessionToken時需要。這意味着表單上的提交/發送...按鈕被提交,然後處理付款並顯示收據。

+0

在開發人員文檔中是否有您想要實現的功能的在線示例?我快速瀏覽了一下,在這裏的CF例子中沒有看到有關'SessionToken'的任何信息:[開發者。authorize.net](http://developer.authorize.net/api/aim/)。 – Leigh

+0

你是對的,開發者文檔中沒有關於SessionToken或者我可以找到的任何網絡上的任何東西。由於SessionToken位於Authorize.net的窗體上,有點奇怪。爲了解決錯誤,我在頁面處理方面進行了改變。我設法創建了一個32位字符串的SessionToken,因爲SessionToken是Authorize.net表單上的32位字符串。我組合了x_login和x_tran_key並將其轉換爲Base64()。將頁面進程從一頁更改爲兩頁後,transact.dll文件在單獨的頁面上使用CFHTTP進行處理。沒有令牌需要。 –

+0

有趣。不知道爲什麼單獨的網頁有所作爲。無論如何,你可能想發佈最終的代碼作爲答案。幫助遇到同樣問題的下一個人。 – Leigh

回答

0

如果您從Authorize.net下載Coldfusion示例代碼,您將注意到您不需要SessionToken。請看下圖:

來源:http://developer.authorize.net/downloads/samplecode/

<cfhttp method="Post" url="https://test.authorize.net/gateway/transact.dll"> 
<!--- the API Login ID and Transaction Key must be replaced with valid values ---> 
<cfhttpparam type="Formfield" name="x_login" value="API_LOGIN_ID"> 
<cfhttpparam type="Formfield" name="x_tran_key" value="TRANSACTION_KEY"> 

<cfhttpparam type="Formfield" name="x_delim_data" value="TRUE"> 
<cfhttpparam type="Formfield" name="x_delim_char" value="|"> 
<cfhttpparam type="Formfield" name="x_relay_response" value="FALSE"> 

<cfhttpparam type="Formfield" name="x_type" value="AUTH_CAPTURE"> 
<cfhttpparam type="Formfield" name="x_method" value="CC"> 
<cfhttpparam type="Formfield" name="x_card_num" value="4111111111111111"> 
<cfhttpparam type="Formfield" name="x_exp_date" value="0115"> 

<cfhttpparam type="Formfield" name="x_amount" value="19.99"> 
<cfhttpparam type="Formfield" name="x_description" value="Sample Transaction"> 

<cfhttpparam type="Formfield" name="x_first_name" value="John"> 
<cfhttpparam type="Formfield" name="x_last_name" value="Doe"> 
<cfhttpparam type="Formfield" name="x_address" value="1234 Street"> 
<cfhttpparam type="Formfield" name="x_state" value="WA"> 
<cfhttpparam type="Formfield" name="x_zip" value="98004"> 
<!--- Additional fields can be added here as outlined in the AIM integration 
guide at: http://developer.authorize.net ---> 
<!--- The following fields show an example of how to include line item details, they are commented out by default. 
<cfhttpparam type="Formfield" name="x_line_item" value="item1<|>golf balls<|><|>2<|>18.95<|>Y"> 
<cfhttpparam type="Formfield" name="x_line_item" value="item2<|>golf bag<|>Wilson golf carry bag, red<|>1<|>39.99<|>Y"> 
<cfhttpparam type="Formfield" name="x_line_item" value="item3<|>book<|>Golf for Dummies<|>1<|>21.99<|>Y"> 
---> 
</cfhttp> 

希望這有助於。