Para descargar la muestra de código completa, consulte nuestro sitio Code Share.
En este tema se describe cómo firmar todas las firmas de una transacción mediante una sola llamada, en lugar de navegar de un documento a otro y aplicar una firma tras otra.
En este ejemplo:
-
En la transacción existen dos destinatarios: el remitente y un cliente.
-
La transacción tiene dos documentos.
-
Se utilizan delimitadores de texto para posicionar las firmas en los documentos. Para obtener más información, consulte Delimitadores de texto.
-
El PDF de muestra utilizado en esta guía puede descargarse aquí.
El siguiente código firmará todas las firmas de la transacción.
//Package PackageBuilder packageToBuild = PackageBuilder.newPackageNamed("Sign Documents Test"); //Sender SignerBuilder signer1 = SignerBuilder.newSignerWithEmail("[email protected]") .withFirstName("Haris") .withLastName("Haidary") .withCustomId("Sender"); //Client SignerBuilder signer2 = SignerBuilder.newSignerWithEmail("[email protected]") .withFirstName("John") .withLastName("Smith") .withCustomId("Signer"); //Sender signature on first document SignatureBuilder signature1 = SignatureBuilder.signatureFor("[email protected]") .withPositionAnchor(TextAnchorBuilder.newTextAnchor("Signature of the Contractor") .atPosition(TextAnchorPosition.TOPLEFT) .withSize(150, 40) .withOffset(0, -50) .withCharacter(0) .withOccurence(0)); //Client signature on first document SignatureBuilder signature2 = SignatureBuilder.signatureFor("[email protected]") .withPositionAnchor(TextAnchorBuilder.newTextAnchor("Signature of the Client") .atPosition(TextAnchorPosition.TOPLEFT) .withSize(150, 40) .withOffset(0, -50) .withCharacter(0) .withOccurence(0)); //First document DocumentBuilder document1 = DocumentBuilder.newDocumentWithName("Cleaning Contract") .fromFile("DOC_FILE_PATH") .withSignature(signature1) .withSignature(signature2); //Build package DocumentPackage packageToSend = packageToBuild.withSigner(signer1).withSigner(signer2).withDocument(document1).withDocument(document2).build(); //Create and send package PackageId packageId = client.createAndSendPackage(packageToSend); //sign all documents for sender client.signDocuments(packageId);
La última línea de este código de ejemplo firma automáticamente todos los documentos para el remitente.
Esta función no funcionará para las firmas de captura.
Resultados
Una vez que haya ejecutado su código, inicie sesión en OneSpan Sign. Verá una marca de verificación junto a su remitente. Le confirma que se aplicaron todas las firmas del remitente.
Para descargar la muestra de código completa, consulte nuestro sitio Code Share.
En este tema se describe cómo firmar todas las firmas de una transacción mediante una sola llamada, en lugar de navegar de un documento a otro y aplicar una firma tras otra.
En este ejemplo:
-
En la transacción existen dos destinatarios: el remitente y un cliente.
-
La transacción tiene dos documentos.
-
Se utilizan delimitadores de texto para posicionar las firmas en los documentos. Para obtener más información, consulte Delimitadores de texto.
-
El PDF de muestra utilizado en esta guía puede descargarse aquí.
El siguiente código firmará todas las firmas de la transacción.
//Package PackageBuilder packageToBuild = PackageBuilder.NewPackageNamed("Sign Documents Test"); //Sender SignerBuilder signer1 = SignerBuilder.NewSignerWithEmail("[email protected]") .WithFirstName("Haris") .WithLastName("Haidary") .WithCustomId("Sender"); //Client SignerBuilder signer2 = SignerBuilder.NewSignerWithEmail("[email protected]") .WithFirstName("John") .WithLastName("Smith") .WithCustomId("Signer"); //Sender signature on first document SignatureBuilder signature1 = SignatureBuilder.SignatureFor("[email protected]") .WithPositionAnchor(TextAnchorBuilder.NewTextAnchor("Signature of the Contractor") .AtPosition(TextAnchorPosition.TOPLEFT) .WithSize(150, 40) .WithOffset(0, -50) .WithCharacter(0) .WithOccurrence(0)); //Client signature on first document SignatureBuilder signature2 = SignatureBuilder.SignatureFor("[email protected]") .WithPositionAnchor(TextAnchorBuilder.NewTextAnchor("Signature of the Client") .AtPosition(TextAnchorPosition.TOPLEFT) .WithSize(150, 40) .WithOffset(0, -50) .WithCharacter(0) .WithOccurrence(0)); //First document DocumentBuilder document1 = DocumentBuilder.NewDocumentNamed("Cleaning Contract") .FromFile("DOC_FILE_PATH") .WithSignature(signature1) .WithSignature(signature2); //Build package DocumentPackage packageToSend = packageToBuild.WithSigner(signer1).WithSigner(signer2).WithDocument(document1).WithDocument(document2).Build(); //Create and send package PackageId packageId = client.CreateAndSendPackage(packageToSend); //Sign all documents for sender client.SignDocuments(packageId);
La última línea de este código de ejemplo firma automáticamente todos los documentos para el remitente.
Esta función no funcionará para las firmas de captura.
Resultados
Una vez que haya ejecutado su código, inicie sesión en OneSpan Sign. Verá una marca de verificación junto a su remitente. Le confirma que se aplicaron todas las firmas del remitente.
Para descargar la muestra de código completa, consulte nuestro sitio Code Share.
En este tema se describe cómo firmar todas las firmas de una transacción mediante una sola llamada, en lugar de navegar de un documento a otro y aplicar una firma tras otra.
En este ejemplo:
-
En la transacción existen dos destinatarios: el remitente y un cliente.
-
La transacción tiene dos documentos.
-
Se utilizan delimitadores de texto para posicionar las firmas en los documentos. Para obtener más información, consulte Delimitadores de texto.
-
El PDF de muestra utilizado en esta guía puede descargarse aquí.
Solicitud HTTP
POST /api/packages
Encabezados HTTP
Accept: application/json Content-Type: multipart/form-data Authorization: Basic api_key
Carga útil de solicitud
-- -- --WebKitFormBoundary1bNO60n7FqP5WO4t Content - Disposition: form - data; name = "file"; filename = "testDocumentExtraction.pdf" Content - Type: application / pdf % PDF - 1.5 % µµµµ 1 0 obj < >>> endobj....-- -- --WebKitFormBoundary1bNO60n7FqP5WO4t Content - Disposition: form - data; name = "payload" "roles": [{ "id": "Signer", "type": "SIGNER", "signers": [{ "firstName": "John", "lastName": "Smith", "email": "[email protected]" }], "name": "Signer" }, { "id": "Sender", "type": "SIGNER", "signers": [{ "firstName": "Haris", "lastName": "Haidary", "email": "[email protected]" }], "name": "Sender" }], "documents": [{ "approvals": [{ "fields": [{ "type": "SIGNATURE", "extract": false, "extractAnchor": { "text": "Signature of the Client", "index": 0, "width": 150, "height": 40, "anchorPoint": "TOPLEFT", "characterIndex": 0, "leftOffset": 0, "topOffset": -50 }, "left": 0, "subtype": "FULLNAME", "top": 0 }, { "value": null, "type": "INPUT", "binding": "{signer.name}", "extract": false, "extractAnchor": { "text": "(hereafter referred to as", "index": 0, "width": 150, "height": 20, "anchorPoint": "TOPRIGHT", "characterIndex": 0, "leftOffset": -175, "topOffset": -5 }, "left": 0, "subtype": "LABEL", "top": 0 }, { "value": null, "type": "INPUT", "binding": "{approval.signed}", "extract": false, "extractAnchor": { "text": "Date", "index": 0, "width": 75, "height": 40, "anchorPoint": "TOPRIGHT", "characterIndex": 4, "leftOffset": 10, "topOffset": -30 }, "left": 0, "subtype": "LABEL", "top": 0 }], "role": "Signer" }, { "fields": [{ "type": "SIGNATURE", "extract": false, "extractAnchor": { "text": "Signature of the Contractor", "index": 0, "width": 150, "height": 40, "anchorPoint": "TOPLEFT", "characterIndex": 0, "leftOffset": 0, "topOffset": -50 }, "subtype": "FULLNAME" }], "role": "Sender" }], "id": "contract", "name": "Sample Contract" }], "name": "Sign Documents Test", "type": "PACKAGE", "language": "en", "autoComplete": true, "status": "SENT" }-- -- --WebKitFormBoundary1bNO60n7FqP5WO4t--
Para obtener una descripción completa de cada campo, consulte la tabla Carga útil de solicitud siguiente.
Carga útil de respuesta
{ "id": "9sKhW-h-qS9m6Ho3zRv3n2a-rkI=" }
Una vez que haya enviado su transacción, realice una solicitud POST a:
Solicitud HTTP
POST /api/packages/{packageId}/documents/signed_documents
Encabezados HTTP
Accept: application/json Content-Type: application/json Authorization: Basic api_key{ "documents": [ { "id": "contract", "name": "Sample Contract" } ] }
La última línea de este código de ejemplo firma automáticamente todos los documentos para el remitente.
Esta función no funcionará para las firmas de captura.
Resultados
Una vez que haya ejecutado su código, inicie sesión en OneSpan Sign. Verá una marca de verificación junto a su remitente. Le confirma que se aplicaron todas las firmas del remitente.
Tabla de carga útil de solicitud
Propiedad | Tipo | Editable | Obligatorio | Predeterminado | Valores de ejemplo |
---|---|---|---|---|---|
status | string | Sí | No | BORRADOR | BORRADOR / ENVIADO / COMPLETADO / ARCHIVADO / RECHAZADO / ELEGIR NO HACERLO / CADUCÓ |
autoComplete | boolean | Sí | No | true | true / false |
type | string | Sí | No | PAQUETE | PAQUETE / FORMULARIO / FORMATO |
name | string | Sí | Sí | n/a | Ejemplo de extracción de delimitadores de texto de la API REST |
language | string | Sí | Sí | en | en / fr / de ... |
documents | |||||
name | string | Sí | No | n/a | Ejemplo de contrato |
approvals | |||||
role | string | Sí | No | n/a | client |
fields | |||||
type | string | Sí | Sí | n/a | FIRMA / ENTRADA |
extract | boolean | Sí | No | false | true / false |
subtype | string | Sí | Sí | n/a | NOMBRE COMPLETO / INICIALES / CAPTURA / CAPTURA_MÓVIL / ETIQUETA / CAMPO DE TEXTO / ÁREA DE TEXTO / CASILLA DE VERIFICACIÓN / FECHA / RADIO / LISTA |
binding | string | Sí | No | null | null / {approval.signed} / {signer.title} / {signer.name} / {signer.company} |
left | integer | Sí | No | 0 | 0 / 10 / 20 ... |
top | integer | Sí | No | 0 | 0 / 10 / 20 ... |
extractAnchor | |||||
text | string | Sí | Sí | n/a | Firma del Cliente |
anchorPoint | string | Sí | Sí | n/a | TOPLEFT / TOPRIGHT / BOTTOMLEFT / BOTTOMRIGHT |
index | integer | Sí | No | 0 | 0 / 1 / 2 ... |
width | integer | Sí | No | 200 | 150 |
characterIndex | integer | Sí | No | 0 | 0 |
height | integer | Sí | No | 50 | 40 |
leftOffset | integer | Sí | No | 0 | 40 |
rightOffset | integer | Sí | No | 0 | -10 |
roles | |||||
id | string | Sí | No | n/a | client |
index | integer | Sí | No | 0 | 1 / 2 / 3 ... |
name | string | Sí | No | n/a | client |
type | string | Sí | No | FIRMANTE | FIRMANTE / REMITENTE |
signers | |||||
string | Sí | Sí | n/a | [email protected] | |
firstName | string | Sí | Sí | n/a | Ernesto |
lastName | string | Sí | Sí | n/a | Puente |
id | string | Sí | No | n/a | client |
Para descargar la muestra de código completa, consulte nuestro sitio Code Share.
En este tema se describe cómo firmar todas las firmas de una transacción mediante una sola llamada, en lugar de navegar de un documento a otro y aplicar una firma tras otra.
En este ejemplo:
-
En la transacción existen dos destinatarios: el remitente y un cliente.
-
La transacción tiene dos documentos.
-
Se utilizan delimitadores de texto para posicionar las firmas en los documentos. Para obtener más información, consulte Delimitadores de texto.
-
El PDF de muestra utilizado en esta guía puede descargarse aquí.
Después de haber enviado su paquete para su firma, deberá recuperar su packageID. Luego, utilice el siguiente código para firmar todas las firmas de la transacción:
public void signDocuments(String packageId)
Resultados
Una vez que haya ejecutado su código, inicie sesión en OneSpan Sign. Verá una marca de verificación junto a su remitente. Le confirma que se aplicaron todas las firmas del remitente.