client = new RestPkiClient(env('PKI_ENDPOINT_URL'), env('PKI_ACCESS_TOKEN')); } public function start(Request $request) { $visualRepresentation = [ 'text' => [ 'text' => 'Assinado eletronicamente por {{signerName}} ({{signerNationalId}})', 'fontSize' => 8.0, 'includeSigningTime' => true, ], 'position' => [ 'pageNumber' => -1, 'auto' => [ 'container' => [ 'left' => 5.5, 'right' => 1.5, 'bottom' => 5.5, 'height' => 15.94, ], 'signatureRectangleSize' => [ 'height' => 15.94, 'width' => 600.0, ], 'rowSpacing' => 0.0, ], ], ]; $signatureStarter = new PadesSignatureStarter($this->client); $signatureStarter->signaturePolicy = StandardSignaturePolicies::PADES_BASIC_WITHOUT_LTV; $signatureStarter->securityContext = StandardSecurityContexts::PKI_BRAZIL; $signatureStarter->measurementUnits = PadesMeasurementUnits::PDFPOINTS; $signatureStarter->visualRepresentation = $visualRepresentation; $signatureStarter->setPdfToSignFromContentBase64($request->base64); $token = $signatureStarter->startWithWebPki(); return response()->json(['token' => $token], Response::HTTP_OK); } public function finish(Request $request) { try { $signatureFinisher = new PadesSignatureFinisher2($this->client); $signatureFinisher->token = $request->token; $signatureResult = $signatureFinisher->finish(); return response()->json($signatureResult->getContentBase64(), Response::HTTP_OK); } catch (\Throwable $e) { throw new CertificadoInvalidException; } } }