如何在Laravel中获取并展示DocuSign的所有API调用历史?
实现Laravel网站展示DocuSign API调用历史的方案
1. 确认DocuSign可用接口与权限
DocuSign的Monitor API专门用于获取账号下的API调用历史(包含请求路径、状态码、调用时间、操作人等核心信息)。首先要确认你的DocuSign账号已开通Monitor相关权限,需联系账号管理员开启或验证权限状态。
2. 安装DocuSign PHP SDK
在Laravel项目根目录执行Composer命令,安装官方SDK简化API调用:
composer require docusign/esign-client
3. 配置JWT认证(后台服务专用)
后台自动调用API推荐使用JWT认证,无需用户手动授权:
- 在DocuSign开发者平台创建集成应用,生成
Integrator Key和RSA私钥。 - 在Laravel的
.env文件添加配置项:DOCUSIGN_INTEGRATOR_KEY=你的集成密钥 DOCUSIGN_ACCOUNT_ID=你的DocuSign账号ID DOCUSIGN_RSA_PRIVATE_KEY_PATH=storage/app/docusign_private_key.pem DOCUSIGN_OAUTH_BASE_URI=https://account-d.docusign.com # 测试环境用此域名,生产环境替换为account.docusign.com - 编写认证服务类封装token获取逻辑:
<?php namespace App\Services; use DocuSign\eSign\Client\ApiClient; use DocuSign\eSign\Configuration; class DocuSignAuthService { public function getAccessToken() { $config = new Configuration(); $config->setHost(env('DOCUSIGN_OAUTH_BASE_URI')); $apiClient = new ApiClient($config); $privateKey = file_get_contents(storage_path('app/docusign_private_key.pem')); $token = $apiClient->requestJWTUserToken( env('DOCUSIGN_INTEGRATOR_KEY'), env('DOCUSIGN_ACCOUNT_ID'), 'signature', $privateKey, 3600 // Token有效期,单位秒 ); return $token->getAccessToken(); } }
4. 封装API调用历史获取逻辑
创建DocuSignMonitorService类,封装Monitor API的调用逻辑:
<?php namespace App\Services; use DocuSign\eSign\Client\ApiClient; use DocuSign\eSign\Configuration; class DocuSignMonitorService { protected $authService; public function __construct(DocuSignAuthService $authService) { $this->authService = $authService; } public function getApiCallHistory($startDate, $endDate, $limit = 100) { $accessToken = $this->authService->getAccessToken(); $config = new Configuration(); $config->setHost('https://monitor.docusign.com'); // Monitor API专属域名 $apiClient = new ApiClient($config); $apiClient->getConfig()->addDefaultHeader('Authorization', "Bearer {$accessToken}"); // 调用Monitor API获取指定时间范围的日志 $response = $apiClient->callApi( '/api/v1/datasets/monitor/stream', 'GET', [], [ 'start_date' => $startDate->toIso8601String(), 'end_date' => $endDate->toIso8601String(), 'limit' => $limit ], [], [], [], [] ); return json_decode($response[0], true); } }
5. 控制器与视图展示
- 编写控制器方法,调用服务类获取数据并传递到视图:
<?php namespace App\Http\Controllers; use App\Services\DocuSignMonitorService; use Carbon\Carbon; class DocuSignApiHistoryController extends Controller { public function index(DocuSignMonitorService $monitorService) { // 获取最近7天的API调用历史 $startDate = Carbon::now()->subDays(7); $endDate = Carbon::now(); $apiHistory = $monitorService->getApiCallHistory($startDate, $endDate); return view('docusign.api-history', compact('apiHistory')); } } - 创建视图文件
resources/views/docusign/api-history.blade.php,用表格展示数据:<h1>DocuSign API调用历史</h1> <table class="table table-striped"> <thead> <tr> <th>调用时间</th> <th>API路径</th> <th>状态码</th> <th>操作人ID</th> <th>请求方法</th> </tr> </thead> <tbody> @foreach($apiHistory['records'] ?? [] as $record) <tr> <td>{{ Carbon::parse($record['createdDateTime'])->format('Y-m-d H:i:s') }}</td> <td>{{ $record['uri'] }}</td> <td>{{ $record['statusCode'] }}</td> <td>{{ $record['userId'] }}</td> <td>{{ $record['method'] }}</td> </tr> @endforeach </tbody> </table>
6. 关键注意事项
- 权限校验:若调用API返回403错误,需确认账号是否拥有Monitor API的访问权限。
- 分页处理:数据量大时,通过
offset参数或滚动ID实现分批获取,避免单次请求数据过载。 - 缓存优化:将获取的历史数据缓存到Laravel缓存系统(如Redis),减少重复调用DocuSign API的次数。
- 环境区分:测试与生产环境使用对应的DocuSign API域名,避免数据混淆。
内容的提问来源于stack exchange,提问作者Abdul Aleem
相关产品推荐
相关产品推荐

