我正在使用PayPal,我需要这段代码来阅读API的付款后回复:
<cfif StructKeyExists(FORM.TRANSACTION[0],"ID_FOR_SENDER_TXN")>
<cfset pTxnId = FORM.TRANSACTION[0].ID_FOR_SENDER_TXN />
</cfif>
但是当我运行支付响应测试工具时,我收到了这个错误:在类型为[Ljava.lang.String;。
的类型的Java对象中未定义500个元素TRANSACTION我使用了这个循环:
<cfloop collection="#form#" item="theField">
<cfif theField is not "fieldNames">
#theField# = #form[theField]#<br>
</cfif>
</cfloop>
查看以FORM格式发送的变量,变量如下:
我不知道为什么我无法访问它。
(从评论中更新)
尝试使用此代码:
<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>
谢谢!
答案 0 :(得分: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期望这个数据结构:
它在名为transaction的表单中查找一个键,并尝试从中获取第0个索引(旁注:这在CF中无论如何都不起作用,数组以索引1开头),并且作为第一个项目在数组,它期望一个名为ID_FOR_SENDER_TXN的键结构。
但是,PayPal发送给您的实际上是使用以下格式:
这解释了错误消息:“在类型为[Ljava.lang.String;。”的Java对象中未定义元素TRANSACTION。