我有一些我一直在研究的代码,它只是围绕Docusign PHP SDK的包装类,以便为我们的应用程序量身定制一些。问题是,现在,身份验证已从我们的生产服务器开始失败,但完全相同的代码(字面意思是逐字复制)在其他服务器上正常工作。我对这件事情感到茫然。
这是失败的原因:
Exception: exception 'DocuSign\eSign\ApiException' with message 'API call to https://demo.docusign.net/restapi/v2/login_information timed out: a:26:{s:3:"url";s:54:"https://demo.docusign.net/restapi/v2/login_information";s:12:"content_type";N;s:9:"http_code";i:0;s:11:"header_size";i:0;s:12:"request_size";i:0;s:8:"filetime";i:-1;s:17:"ssl_verify_result";i:1;s:14:"redirect_count";i:0;s:10:"total_time";d:0.168601;s:15:"namelookup_time";d:0.004248;s:12:"connect_time";d:0.081040000000000001;s:16:"pretransfer_time";d:0;s:11:"size_upload";d:0;s:13:"size_download";d:0;s:14:"speed_download";d:0;s:12:"speed_upload";d:0;s:23:"download_content_length";d:-1;s:21:"upload_content_length";d:-1;s:18:"starttransfer_time";d:0;s:13:"redirect_time";d:0;s:12:"redirect_url";s:0:"";s:10:"primary_ip";s:14:"162.248.184.25";s:8:"certinfo";a:0:{}s:12:"primary_port";i:443;s:8:"local_ip";s:14:"10.231.215.217";s:10:"local_port";i:39287;}' in /srv/www/vhosts/redacted.com/pages/test/docusign/sdk/docusign-php-client-master/src/ApiClient.php:233
Stack trace:
#0 /srv/www/vhosts/redacted.com/pages/test/docusign/sdk/docusign-php-client-master/src/Api/AuthenticationApi.php(264): DocuSign\eSign\ApiClient->callApi('/v2/login_infor...', 'GET', Array, '', Array, '\DocuSign\eSign...')
#1 /srv/www/vhosts/redacted.com/pages/test/docusign/sdk/docusign-php-client-master/src/Api/AuthenticationApi.php(193): DocuSign\eSign\Api\AuthenticationApi->loginWithHttpInfo(Object(DocuSign\eSign\Api\AuthenticationApi\LoginOptions))
#2 /srv/www/vhosts/redacted.com/pages/test/docusign/myclass.php(46): DocuSign\eSign\Api\AuthenticationApi->login(Object(DocuSign\eSign\Api\AuthenticationApi\LoginOptions))
#3 /srv/www/vhosts/redacted.com/pages/test/docusign/myclass.php(41): DocuSignWrapper->doLogin()
#4 /srv/www/vhosts/redacted.com/pages/test/docusign/classtest.php(130): DocuSignWrapper->__construct()
#5
我已经从其他四台服务器中成功发送了代码:
{
"envelopeId": "881f8fb2-d089-49e5-b70c-8fab37ddc717",
"uri": "\/envelopes\/881f8fb2-d089-49e5-b70c-8fab37ddc717",
"statusDateTime": "2016-12-19T16:47:34.3265610Z",
"status": "sent"
}
这是包装类的相关部分(构造函数和登录函数,带有auth信息编辑):
function __construct()
{
$this->config = new DocuSign\eSign\Configuration();
$this->config->setHost($this->host);
$this->config->addDefaultHeader("X-DocuSign-Authentication", '{"Username":"' . $this->username . '",
"Password":"' . $this->password . '",
"IntegratorKey":"' . $this->integratorKey . '"}');
$this->apiClient = new DocuSign\eSign\ApiClient($this->config);
$this->authApi = new DocuSign\eSign\Api\AuthenticationApi($this->apiClient);
$this->options = new DocuSign\eSign\Api\AuthenticationApi\LoginOptions();
$this->doLogin();
}
function doLogin()
{
$loginInfo = $this->authApi->login($this->options);
if (isset($loginInfo) && count($loginInfo) > 0)
{
$loginAccount = $loginInfo->getLoginAccounts()[0];
if (isset($loginInfo))
{
$this->accountId = $loginAccount->getAccountId();
}
}
}
我真的可以使用一些帮助来试图找出这种情况发生的原因和原因,因为我的项目因此而停滞不前。我应该注意,身份验证仍然可以工作到大约一周前,代码没有改变。它必须是别的东西。
感谢您的帮助!
答案 0 :(得分:1)
一些想法:
您手动构建身份验证标头,而不是使用PHP JSON转换方法。不同之处在于您无法转义需要转义的用户名或密码中的任何字符。
因此,请确保使用名称凭据进行测试。 (另外,这是一个潜伏的错误,你应该修复。)
显然,您的两台服务器之间会发生不同的事情。最好是观察发送的内容并比较两者。
如果您的请求要记录足够的DocuSign堆栈,请比较DocuSign日志。 Article
如果没有,则使用适当的调试工具记录/查看机器的输出。或者您可以将您的请求发送到requestb.in端点并比较两个服务器'要求那样。