我正在使用Coldfusion和cfhttp调用API,如下所示:
<cfhttp url="http://api.domain.com/api/proxy.cfc" method="post" result="httpResult" charset="UTF-8">
<cfhttpparam type="url" name="method" value="apiauth"/>
<cfhttpparam type="url" name="argumentCollection" value="#jsData#"/>
</cfhttp>
#jsData#是表示数据数组的json字符串。
我遇到的问题
<cfhttpparam type="url" name="method" value="apiauth"/>
使用cURL。如果我将其附加到URL:
http://api.domain.com/api/proxy.cfc?method=apiauth
我收到的回复:302暂时移动
在PHP中我已经将我的数组创建为$ remoteArray(并且数据工作正常,所以问题不存在)并且我已经尝试过这个作为我的CURL:
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'http://api.domain.com/api/proxy.cfc',
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => array(
'method' => 'apiauth',
'argumentCollection' => json_encode($remoteArray)
)
));
$resp = curl_exec($curl);
但它不起作用(可能是因为method =&gt; apiauth不是一个帖子字段 - 它是一个URL参数 - 但如果我真的把它放在URL中,我会得到302.
已解决 - $ remoteArray 中有错误。最初$ apiauthkey,$ apicomponent和$ apimethod是在数组之外定义的。一旦将它们添加到数组中以进行json编码就可以了。这是$ remoteArray构建的房子:
$remoteArray = array(
"apiauthkey" => "$apiauthkey",
"apicomponent" => "$apicomponent",
"apimethod" => "$apimethod",
"apiarguments" => array(
'address_1'=>"test 1",
'address_2'=>"test 2",
'city'=>"new york",
'email'=>"user@domain.com",
'first_name'=>"test fname",
'last_name'=>"test lname",
'ph_num'=>"2155551212",
'state'=>"NY",
'zip'=>"90210",
'rbpid' => $rbpid,
)
);
一旦嵌套数组设置正确,它就可以正常使用cURL。感谢那些回复的人!
答案 0 :(得分:1)
由于PHP交叉而不是官方回答只是OP引用的结构示例:
fieldType可以是url
或formfield
方法可以是get
或post
在密码示例中,我已经过authed所以我只是传递令牌,所以我可以得到一些东西。
你的argscollection
是一个结构...所以你可以循环它。
requestOject
是cfhhtp中常见预期事物的正常结构,调用名称和匹配的argsCollection
值(然后是参数类型)
<cfhttp url="#url#"
method="#method#"
result="response"
username="#AccountID#"
password="#AuthToken#">
<cfloop collection="#argscollection#" item="v">
<cfhttpparam name="#parameterTarget(v, requestObject)#"
value="#argscollection[v]#"
type="#fieldType#" />
</cfloop>
</cfhttp>
<cfdump var="#response#">
我相信这会让你的思维摆脱一些“可能性”。或鼓励另一位CFHTTP专家参与......
此外,如果这是一个常用的库,你可以考虑RIAForge,CFLib或GitHub,因为很可能已经构建了一个Coldfusion包装器并在那里等你。 / p>
答案 1 :(得分:0)
$ remoteArray确实有错误。最初$ apiauthkey,$ apicomponent和$ apimethod是在数组之外定义的。一旦将它们添加到数组中进行json编码就可以了。