2

我正在使用 PayPal,我需要这段代码来阅读 API 的付款响应后:

<cfif StructKeyExists(FORM.TRANSACTION[0],"ID_FOR_SENDER_TXN")>
    <cfset pTxnId = FORM.TRANSACTION[0].ID_FOR_SENDER_TXN />
</cfif>

但是当我运行支付响应测试工具时,我得到了这个错误:500 Element TRANSACTION is undefined in an Java object of type [Ljava.lang.String;.

我使用了这个循环:

<cfloop collection="#form#" item="theField">
        <cfif theField is not "fieldNames">
            #theField# = #form[theField]#<br>
        </cfif>
    </cfloop>

查看 FORM 中发送的变量,变量是这样的:

  • TRANSACTION[0].ID_FOR_SENDER_TXN
  • TRANSACTION[0].IS_PRIMARY_RECEIVER
  • TRANSACTION[0].RECEIVER TRANSACTION[0].AMOUNT
  • TRANSACTION[0].STATUS_FOR_SENDER_TXN

我不知道为什么我不能访问这个。

(评论更新)

尝试使用此代码:

<cfif isDefined("form['FORM.TRANSACTION[0].ID_FOR_SENDER_TXN']")> 
     <cfset pTxnId = form['FORM.TRANSACTION[0].ID_FOR_SENDER_TXN'] />  
</cfif> 

现在我收到错误:

500 函数 IsDefined 的参数 1,现在是 form['FORM.TRANSACTION[0].ID_FOR_SENDER_TXN'],必须是语法上有效的变量名。

如果我使用同样的错误

form['FORM.TRANSACTION[0].ID_FOR_SENDER_TXN']

或者

form['TRANSACTION[0].ID_FOR_SENDER_TXN']

更新 2

曾与:

<cfif structKeyExists(FORM, "TRANSACTION[0].ID_FOR_SENDER_TXN")>

</cfif>

谢谢!

4

1 回答 1

7

如果表单字段名称是TRANSACTION[0].ID_FOR_SENDER_TXN(这是您的调试循环所指示的),那么您应该将其寻址为:

form['FORM.TRANSACTION[0].ID_FOR_SENDER_TXN']

澄清:

当您使用此表示法访问变量时:

<cfset pTxnId = FORM.TRANSACTION[0].ID_FOR_SENDER_TXN />

ColdFusion 需要这种数据结构:

http://note.io/15v3o51

它在名为 transaction 的表单中查找一个键,并尝试从中获取第 0 个索引(旁注:这在 CF 中无论如何都不起作用,数组从索引 1 开始),并且作为数组中的第一项,它是期望具有名为 ID_FOR_SENDER_TXN 的键的结构。

但是,PayPal 发送给您的内容实际上是使用这种格式:

http://note.io/19nTSZR

这解释了错误消息:“元素 TRANSACTION 在类 [Ljava.lang.String; 类型的 Java 对象中未定义;。”

于 2013-08-12T16:13:40.463 回答