You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:31:00