在PHP中,我正在尝试检索DocuSign中不断刷新的特定页面的URL。检索此网址的POST格式为:
POST http://demo.docusign.net/restapi/{apiVersion}/accounts/{accountId}/envelopes/{envelopeId}/views/recipient
这应该以以下形式返回一个json文件:
{
"url": "example.example.com"
}
但是,我对使用PHP和POST方法非常陌生,并且不相信我正确地这样做了。此方法的API资源管理器特别是here。我正在使用cURL方法来发出此请求。这是我的代码($recipient
,$account_id
,$access_token
在另一个文件中准确找到):
$url = "http://demo.docusign.net/restapi/v2/accounts/$account_id
/envelopes/$envelope_id/views/recipient";
$body = array("returnUrl" => "http://www.docusign.com/devcenter",
"authenticationMethod" => "None",
"email" => "$recipient",
"userName" => "$recipient");
$body_string = json_encode($body);
$header = array(
'Accept: application/json',
'Content-Type: application/json',
'Content-Length: '.strlen($body_string),
);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $body_string);
$json_response = curl_exec($curl);
$response = json_decode($json_response, true);
var_dump($response);
我能够在API资源管理器上获得正确的回报,但在使用PHP发出请求时却没有。我认为这是因为我没有正确地合并$header
或$body
,但此时我还不确定。
已添加:这是在API Explorer上正确运行该方法时请求的原始输出:
接受:application / json
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en; q = 0.8,fa; q = 0.6,sv; q = 0.4
缓存控制:无缓存
来源:https://apiexplorer.docusign.com
推荐人:https://apiexplorer.docusign.com/
用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_11_5)
AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 51.0.2704.103 Safari / 537.36
授权:持票人fGehcK7fkRvFguyu / 7NGh01UUFs =
内容长度:
内容类型:application / json
这是我的代码中形成的JSON请求:
{
"returnUrl":"http:\/\/www.docusign.com\/devcenter",
"authenticationMethod":"Password",
"email":"example@example.com",
"userName":"example@example.com",
"clientUserId":"4c6228f4-fcfe-47f9-bee1-c9d5e6ab6a41",
"userId":"example@example.com"
}
答案 0 :(得分:1)
您没有在cURL代码中点击有效的DocuSign网址。现在您要发送请求:
http://demo.docusign.net/apiVersion/v2/accounts/{accountId}/envelopes/{envelopeId}/views/recipient
而不是" apiVersion"它应该是" restApi"像这样:
http://demo.docusign.net/restapi/v2/accounts/{accountId}/envelopes/{envelopeId}/views/recipient
答案 1 :(得分:0)
我们无法发送帖子字段,因为我们想发送JSON,而不是假装成一个表单(接受带有表格格式数据的POST请求的API的优点是一个有趣的争论)。相反,我们创建正确的JSON数据,将其设置为POST请求的主体,并正确设置标头,以便接收此请求的服务器将了解我们发送的内容:
$data = array("name" => "Hagrid", "age" => "36");
$data_string = json_encode($data);
$ch = curl_init('http://api.local/rest/users');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
所有这些设置都在curl_setopt()页面上得到了很好的解释,但基本上我的想法是将请求设置为POST请求,将json编码的数据设置为正文,然后设置正确用于描述帖子正文的标题。 CURLOPT_RETURNTRANSFER完全是为了使来自远程服务器的响应放在$ result中而不是回显。如果您使用PHP发送JSON数据,我希望这可能有所帮助!
答案 2 :(得分:0)
我知道这个问题是3年前问的,但这可能会对发现此问题的人有所帮助,因为他们遇到了同样的问题。我看不到cURL选项可以解码您代码中的响应。我发现我需要像这样使用cURL选项CURLOPT_ENCODING
:curl_setopt($ch,CURLOPT_ENCODING,"");
根据在线PHP手册,它说,'CURLOPT_ENCODING-“ Accept-Encoding:”标头的内容。这使得能够解码响应。支持的编码为“身份”,“放气”和“ gzip”。如果设置了空字符串“”,则将发送包含所有受支持的编码类型的标头。您可以在https://www.php.net/manual/en/function.curl-setopt.php上找到此选项。我希望这可以帮助某人免于头痛。