Laravel을 사용하여 HelloSign 문서 다운로드

SDK 없이 Laravel을 사용하여 모든 HelloSign 문서를 다운로드해야 했던 적이 있습니까? HelloSign에서 생성한 API 키를 사용하여 기본 HTTP 요청으로 수행할 수 있습니다.

사용한 것


  • Laravel의 내장 HTTP 클라이언트(Guzzle)
  • HelloSign API 속도 제한을 피하기 위한 작업
  • 기능이 제어기 대신 경로 파일에 배치됨(프로토타입을 더 빠르게 만들기 위해)

  • 단계


  • HelloSign에서 API 키 가져오기
  • .env 파일에 API 추가

    HELLO_SIGN_API_KEY=
    


  • config 폴더에 생성hellosign.php
    <?php
    
    return [
      'api_key' => env('HELLO_SIGN_API_KEY')
    ];
    


  • HelloSign 문서 ID에 대한 마이그레이션create_signature_requests_table을 생성하고 다음 열을 추가합니다.

    $table->string('signature_request_id');
    $table->boolean('downloaded');
    


  • 모델SignatureRequest을 생성하고 다음을 추가합니다.

    $table->string('signature_request_id');
    $table->boolean('downloaded');
    

  • routes/web.php로 이동하여 다음을 추가하십시오.

    use App\Jobs\DownloadJob;
    
    Route::get('/', function () {
      $api_key = config('hellosign.api_key');
    
      $page = 1;
      $total_pages = 99; // just a temporary high number
    
      while($page <= $total_pages) {
          // max out the per page and documents from all accounts
          $response = Http::get("https://{$api_key}:@api.hellosign.com/v3/signature_request/list?account_id=all&page_size=100&page={$page}");
    
          $object = $response->object();
    
          // set the number of total pages of documents
          if($page == 1) {
              $total_pages = $object->list_info->num_pages;
          }
    
          // loop through each result and get the signature_request_id if it exists
          foreach($object->signature_requests as $sig) {
              if(!isset($sig->signature_request_id)){
                  SignatureRequest::create(['signature_request_id' => $sig->signature_request_id]);
              }
          }
    
          // increase the page
          $page++;
      }
    });
    
    Route::get('download', function() {
      // get all signature ids that are not downloaded yet
      $sigs = SignatureRequest::where('downloaded', false)->get();
    
      // chunk it into 20, HelloSign API limits 25 requests per minute
      $chunks = $sigs->chunk(20);
      $chunks->all();
    
      // wait in minutes
      $wait = 0;
      foreach($chunks->all() as $chunk) {
          foreach($chunk as $sig) {
              // dispatch the download job and delay it by now + minutes
              dispatch(new DownloadJob($sig))->delay(now()->addMinutes($wait));
          }
          // increase wait time
          $wait++;
      }
    });
    


  • 작업DownloadJob을 생성하고 다음과 같이 업데이트합니다.

    namespace App\Jobs;
    ...
    use Illuminate\Support\Facades\Http;
    use Illuminate\Support\Facades\Storage;
    use App\Models\SignatureRequest;
    
    ...
    public $sig;
    
      public function __construct(SignatureRequest $sig)
      {
          $this->sig = $sig;
      }
    
      public function handle()
      {
          $api_key = config('hellosign.api_key');
    
          // request the document
          $response = Http::get("https://{$api_key}:@api.hellosign.com/v3/signature_request/files/{$this->sig->signature_request_id}");
    
          // only download if response code is 200
          if($response->status() == 200) {
            // save the document into a `documents` folder in storage with the document id as it's file name
            Storage::put("documents/{$this->sig->signature_request_id}.pdf", $response->body() );
    
            // update db to downloaded
            $this->sig->downloaded = true;
            $this->sig->save();
          }
      }
    

  • php artisan migrate로 마이그레이션 실행
  • 대기열 시작 php artisan queue:work
  • 모든 문서 ID
  • 가져오기를 시작하려면 브라우저에서 localhost로 이동하십시오.
  • #10이 완료되면 브라우저에서 localhost/download로 이동하여 다운로드를 대기열에 넣습니다
  • .
  • 대기열이 정리될 때까지 기다렸다가 11번으로 돌아가서 완료되었는지 확인합니다(필요한 만큼 반복)
  • 좋은 웹페이지 즐겨찾기