EFY-RemoteSigning là giải pháp ký số từ xa, chứng thư số của người ký được lưu trên hệ thống Cloud của nhà cung cấp;
Tốc độ ký số nhanh, đáp ứng số lượng lớn người dùng;
Xác thực bảo mật đa nhân tố, sinh trắc học;
Hỗ trợ chạy đa nền tảng (Windows, MAC, Smartphone);
Giải pháp được triển khai cho nhiều khách hàng, dịch vụ như: BHXH điện tử, Hóa đơn điện tử, Chính phủ điện tử, Bệnh viện…được khánh hàng đánh giá cao;
Hỗ trợ ký số nhiều định dạng File: Word, Excel, Pdf, XML…;
Dễ tích hợp, triển khai.
Example Header
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhNnZoQW8zRkc3dDEiLCJuYW1lIjoiSm9obiBEb2UiLCJpYXQiOjE0NzA1OTg5NzIsImV4cCI6MTQ3MDY4NTM3Mn0.ltA9zZmJKszBJuuV7pTWtY7LzLXrRUfebJDhy_jGMeM
/clients/login
Login
Content-Type: application/json
{
"username": "username",
"password": "password",
"rpCode": "TEST"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"username": {
"type": "string",
"description": "Tên đăng nhập của Relying party được cấp bởi Remote Signing"
},
"password": {
"type": "string",
"description": "Mật khẩu của Relying party được cấp bởi Remote Signing"
},
"rpCode": {
"type": "string",
"description": "Mã relying party"
}
},
"required": [
"username",
"password",
"rpCode"
]
}
200
Content-Type: application/json
{
"token": "SlNPTiB3ZWIgdG9rZW4="
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "JSON web token"
}
},
"required": [
"token"
]
}
401
Content-Type: application/json
{
"error": {
"statusCode": "401",
"name": "UnauthorizedError",
"message": "Invalid username or password"
}
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"error": {
"type": "object",
"properties": {
"statusCode": {
"type": "string",
"description": "Mã lỗi"
},
"name": {
"type": "string",
"description": "Tên lỗi"
},
"message": {
"type": "string",
"description": "Mô tả lỗi"
}
}
}
}
}
/certificates/register
Đăng ký chứng thư mới
Content-Type: application/json
{
"agreementDetails": {
"applicationForm": "UmVtb3RlIFNpZ25pbmcgU2VydmljZSBhcHBsaWNhdGlvbiBmb3Jt",
"authorizeLetter": "QXV0aG9yaXplIExldHRlciBieSBHb3Zlcm5tZW50L0NvcnBvcmF0ZQ==",
"budgetID": "1234567890",
"businessLicense": "QnVzaW5lc3NMaWNlbnNl",
"citizenID": "1234567890",
"country": "VN",
"email": "your@email.ext",
"location": "Cau giay, Ha Noi",
"organization": "EFY Viet Nam",
"organizationUnit": "'Development'",
"passportID": "'C1223456'",
"personalID": "'1234567890'",
"personalName": "Nguyen Van A",
"photoActivityDeclaration": "U2Nhbm5lZCBwaG90byBvZiDigJhJbml0aWFsIEFjdGl2aXR5L0FsdGVyYXRpb24gRGVjbGF0aW9u4oCZIHRoYXQgYXBwbGllZCBmb3IgY29ycG9yYXRlIGNlcnRpZmljYXRl",
"photoAuthorizeDelegate": "cGhvdG9BdXRob3JpemVE",
"photoIDCard": "U2Nhbm5lZCBwaG90byBvZiBJRCBDYXJkIHRoYXQgYXBwbGllZCBmb3IgcGVyc29uYWwgY2VydGlmaWNhdGU=",
"requestForm": "UmVtb3RlIFNpZ25pbmcgU2VydmljZSByZXF1ZXN0IGZvcm0gZm9yIHJlY292ZXJ5LCByZXZvY2F0aW9uIOKApg==",
"stateOrProvince": "Cau Giay, Ha Noi",
"taxID": "'0123456789'",
"telephoneNumber": "'0983456789'",
"title": "Director"
},
"email": "your@email.ext",
"mobileNo": "0123456789",
"sharedMode": 1,
"certificateProfile": "T2OSB21Y",
"ownerEmail": "owner@gmail....",
"ownerMobileNo": "12321312321",
"ownerUUID": "sdfdfsdfsd",
"acceptedApps": [
"IHD",
"EBHXH"
],
"passCodeNotificationMethod": "EMAIL"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementDetails": {
"type": "object",
"properties": {
"applicationForm": {
"type": "string",
"description": "Đơn đăng ký dịch vụ theo định dang Base64"
},
"authorizeLetter": {
"type": "string",
"description": "Giấy ủy quyền của Cơ quan/Doanh nghiệp theo định dạng Base64"
},
"budgetID": {
"type": "string",
"description": "**maxLength: 32** Mã ngân sách"
},
"businessLicense": {
"type": "string",
"description": "Giấy phép kinh doanh theo định dạng Base64"
},
"citizenID": {
"type": "string",
"description": "ID công dân"
},
"country": {
"type": "string",
"description": "**maxLength: 2** Mã quốc gia (Chỉ gồm 2 ký tự). Ví dụ: VN"
},
"email": {
"type": "string",
"description": "Địa chỉ email cá nhân"
},
"location": {
"type": "string",
"description": "Địa chỉ"
},
"organization": {
"type": "string",
"description": "Tên công ty"
},
"organizationUnit": {
"type": "string",
"description": "Tên phòng/ban"
},
"passportID": {
"type": "string",
"description": "**maxLength: 32** Số hộ chiếu cá nhân"
},
"personalID": {
"type": "string",
"description": "Số CMTND"
},
"personalName": {
"type": "string",
"description": "Tên khách hàng"
},
"photoActivityDeclaration": {
"type": "string",
"description": "Scanned photo of ‘Initial Activity/Alteration Declation’ that applied for corporate certificate as Base64 string"
},
"photoAuthorizeDelegate": {
"type": "string",
"description": "photoAuthorizeD as Base64 string"
},
"photoIDCard": {
"type": "string",
"description": "Ảnh quyets CMND hoặc hộ chiếu trong trường hợp cấp chứng thư số cá nhân theo định dạng Base64"
},
"requestForm": {
"type": "string",
"description": "Đơn yêu cầu khôi phục hoặc thu hồi chứng thứ số theo định dạng Base64"
},
"stateOrProvince": {
"type": "string",
"description": "Tỉnh/Thành Phố"
},
"taxID": {
"type": "string",
"description": "**maxLength: 32** Mã số thuế"
},
"telephoneNumber": {
"type": "string",
"description": "Số điện thoại khách hàng"
},
"title": {
"type": "string",
"description": "Chức vụ của khách hàng"
}
},
"description": "Thông tin khách hàng. Dược sử dụng để tạo chứng thư số"
},
"email": {
"type": "string",
"description": "**maxLength: 128** Email của khách hàng dùng để xác thực tài khoản"
},
"mobileNo": {
"type": "string",
"description": "**maxLength: 16** Số điện thoại của khách hàng dùng để xác thực tài khoản"
},
"sharedMode": {
"type": "number",
"enum": [
1,
2,
3
],
"default": 1,
"description": "Chế độ chia sẻ nào được áp dụng cho chứng thư số"
},
"certificateProfile": {
"type": "string",
"enum": [
"T2OSB21Y",
"T2OSB22Y",
"T2OSB23Y",
"T2PSB21Y",
"T2PSB22Y",
"T2PSB23Y",
"T2SFB21Y",
"T2SFB22Y",
"T2SFB23Y"
],
"description": "Mã gói dịch vụ chữ ký số"
},
"ownerEmail": {
"type": "string",
"description": "email của owner"
},
"ownerMobileNo": {
"type": "string",
"description": "số điện thoại của owner"
},
"ownerUUID": {
"type": "string",
"description": "uuid của owner (trường hợp đăng ký thêm chứng thư cho owner thì cần phải truyền uuid của owner)"
},
"acceptedApps": {
"type": "array",
"items": [
{
"type": "string"
},
{
"type": "string"
}
],
"description": "Các mã ứng dụng ký được chấp nhận"
},
"passCodeNotificationMethod": {
"type": "string",
"enum": [
"EMAIL",
"SMS"
],
"default": "1",
"description": "Phương thức nhận mã PIN"
}
},
"required": [
"agreementDetails",
"email",
"mobileNo",
"certificateProfile",
"ownerEmail",
"ownerMobileNo",
"ownerUUID"
]
}
200
Content-Type: application/json
{
"responseCode": 1007,
"responseMessage": "REQUEST ACCEPTED",
"billCode": "EFY_CA",
"timestamp": "2020-02-28T13:28:42+07:00",
"status": true,
"csr": "Q1NSIHdpbGwgYmUgcmVzcG9uZWQgaWYgdGhlIGNzclJlcXVpcmVkIHNldCBUUlVFIGluIHRoZSByZXF1ZXN0Lg==",
"ownerUUID": "sdfdfsdfsd",
"agreementUUID": "13ae13a443e2"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"responseCode": {
"type": "number",
"description": "Mã kết quả. Thông thường sẽ là 1007"
},
"responseMessage": {
"type": "string",
"description": "Mô tả chi tiết kết quả"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"timestamp": {
"type": "string",
"description": "Timestamp hiện tại"
},
"status": {
"type": "boolean",
"description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
},
"csr": {
"type": "string",
"description": "chuỗi CSR được trả về nếu giá trị csrRequired trong chuỗi yêu cầu có giá trị là `true`."
},
"ownerUUID": {
"type": "string",
"description": "uuid của owner (trường hợp đăng ký thêm chứng thư cho owner thì cần phải truyền uuid của owner)"
},
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
}
},
"required": [
"responseCode",
"ownerUUID",
"agreementUUID"
]
}
/certificates/change
Change certificate infomation
Content-Type: application/json
{
"agreementDetails": {
"applicationForm": "UmVtb3RlIFNpZ25pbmcgU2VydmljZSBhcHBsaWNhdGlvbiBmb3Jt",
"authorizeLetter": "QXV0aG9yaXplIExldHRlciBieSBHb3Zlcm5tZW50L0NvcnBvcmF0ZQ==",
"budgetID": "1234567890",
"businessLicense": "QnVzaW5lc3NMaWNlbnNl",
"citizenID": "1234567890",
"country": "VN",
"email": "your@email.ext",
"location": "Cau giay, Ha Noi",
"organization": "EFY Viet Nam",
"organizationUnit": "'Development'",
"passportID": "'C1223456'",
"personalID": "'1234567890'",
"personalName": "Nguyen Van A",
"photoActivityDeclaration": "U2Nhbm5lZCBwaG90byBvZiDigJhJbml0aWFsIEFjdGl2aXR5L0FsdGVyYXRpb24gRGVjbGF0aW9u4oCZIHRoYXQgYXBwbGllZCBmb3IgY29ycG9yYXRlIGNlcnRpZmljYXRl",
"photoAuthorizeDelegate": "cGhvdG9BdXRob3JpemVE",
"photoIDCard": "U2Nhbm5lZCBwaG90byBvZiBJRCBDYXJkIHRoYXQgYXBwbGllZCBmb3IgcGVyc29uYWwgY2VydGlmaWNhdGU=",
"requestForm": "UmVtb3RlIFNpZ25pbmcgU2VydmljZSByZXF1ZXN0IGZvcm0gZm9yIHJlY292ZXJ5LCByZXZvY2F0aW9uIOKApg==",
"stateOrProvince": "Cau Giay, Ha Noi",
"taxID": "'0123456789'",
"telephoneNumber": "'0983456789'",
"title": "Director"
},
"agreementUUID": "13ae13a443e2"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementDetails": {
"type": "object",
"properties": {
"applicationForm": {
"type": "string",
"description": "Đơn đăng ký dịch vụ theo định dang Base64"
},
"authorizeLetter": {
"type": "string",
"description": "Giấy ủy quyền của Cơ quan/Doanh nghiệp theo định dạng Base64"
},
"budgetID": {
"type": "string",
"description": "**maxLength: 32** Mã ngân sách"
},
"businessLicense": {
"type": "string",
"description": "Giấy phép kinh doanh theo định dạng Base64"
},
"citizenID": {
"type": "string",
"description": "ID công dân"
},
"country": {
"type": "string",
"description": "**maxLength: 2** Mã quốc gia (Chỉ gồm 2 ký tự). Ví dụ: VN"
},
"email": {
"type": "string",
"description": "Địa chỉ email cá nhân"
},
"location": {
"type": "string",
"description": "Địa chỉ"
},
"organization": {
"type": "string",
"description": "Tên công ty"
},
"organizationUnit": {
"type": "string",
"description": "Tên phòng/ban"
},
"passportID": {
"type": "string",
"description": "**maxLength: 32** Số hộ chiếu cá nhân"
},
"personalID": {
"type": "string",
"description": "Số CMTND"
},
"personalName": {
"type": "string",
"description": "Tên khách hàng"
},
"photoActivityDeclaration": {
"type": "string",
"description": "Scanned photo of ‘Initial Activity/Alteration Declation’ that applied for corporate certificate as Base64 string"
},
"photoAuthorizeDelegate": {
"type": "string",
"description": "photoAuthorizeD as Base64 string"
},
"photoIDCard": {
"type": "string",
"description": "Ảnh quyets CMND hoặc hộ chiếu trong trường hợp cấp chứng thư số cá nhân theo định dạng Base64"
},
"requestForm": {
"type": "string",
"description": "Đơn yêu cầu khôi phục hoặc thu hồi chứng thứ số theo định dạng Base64"
},
"stateOrProvince": {
"type": "string",
"description": "Tỉnh/Thành Phố"
},
"taxID": {
"type": "string",
"description": "**maxLength: 32** Mã số thuế"
},
"telephoneNumber": {
"type": "string",
"description": "Số điện thoại khách hàng"
},
"title": {
"type": "string",
"description": "Chức vụ của khách hàng"
}
},
"description": "Thông tin khách hàng. Dược sử dụng để tạo chứng thư số"
},
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
}
},
"required": [
"agreementDetails",
"agreementUUID"
]
}
200
Content-Type: application/json
{
"responseCode": 1007,
"responseMessage": "REQUEST ACCEPTED",
"billCode": "EFY_CA",
"timestamp": "2020-02-28T13:28:42+07:00",
"status": true,
"csr": "Q1NSIHdpbGwgYmUgcmVzcG9uZWQgaWYgdGhlIGNzclJlcXVpcmVkIHNldCBUUlVFIGluIHRoZSByZXF1ZXN0Lg==",
"ownerUUID": "sdfdfsdfsd",
"agreementUUID": "13ae13a443e2"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"responseCode": {
"type": "number",
"description": "Mã kết quả. Thông thường sẽ là 1007"
},
"responseMessage": {
"type": "string",
"description": "Mô tả chi tiết kết quả"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"timestamp": {
"type": "string",
"description": "Timestamp hiện tại"
},
"status": {
"type": "boolean",
"description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
},
"csr": {
"type": "string",
"description": "chuỗi CSR được trả về nếu giá trị csrRequired trong chuỗi yêu cầu có giá trị là `true`."
},
"ownerUUID": {
"type": "string",
"description": "uuid của owner (trường hợp đăng ký thêm chứng thư cho owner thì cần phải truyền uuid của owner)"
},
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
}
},
"required": [
"responseCode",
"ownerUUID",
"agreementUUID"
]
}
/certificates/change-pin
Cập nhật mã pin của tài khoản
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2",
"currentPasscode": "Hello, world!",
"newPasscode": "Hello, world!"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
},
"currentPasscode": {
"type": "string",
"description": "Mã PIN hiện tại"
},
"newPasscode": {
"type": "string",
"description": "Mã PIN mới"
}
},
"required": [
"agreementUUID",
"currentPasscode",
"newPasscode"
]
}
200
Content-Type: application/json
{
"responseCode": 1007,
"responseMessage": "REQUEST ACCEPTED",
"billCode": "EFY_CA",
"timestamp": "2020-02-28T13:28:42+07:00",
"status": true,
"remainingCounter": 1
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"responseCode": {
"type": "number",
"description": "Mã kết quả. Thông thường sẽ là 1007"
},
"responseMessage": {
"type": "string",
"description": "Mô tả chi tiết kết quả"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"timestamp": {
"type": "string",
"description": "Timestamp hiện tại"
},
"status": {
"type": "boolean",
"description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
},
"remainingCounter": {
"type": "number",
"description": "Sau khi thay đổi mã PIN thành công, tham số này sẽ là bộ đếm tối đa được cấu hình trên Remote Signin. Mỗi khi thay đổi mã PIN không thay công tham số này sẽ bị giảm đi 1. Nếu tham số này về 0 yêu cầu sẽ bị chặn. Sau một khoảng thời gian (được cấu hình trên Remote Signing) thì sẽ được bỏ chặn tự động."
}
},
"required": [
"responseCode"
]
}
/certificates/get-detail
Lây thông tin chứng thư
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
}
},
"required": [
"agreementUUID"
]
}
200
Content-Type: application/json
{
"responseCode": 1007,
"responseMessage": "REQUEST ACCEPTED",
"billCode": "EFY_CA",
"timestamp": "2020-02-28T13:28:42+07:00",
"status": true,
"certificateDN": "E.g: CN=Nguyen Van A, O=B Company,C=VN",
"certificateSerialNumber": "54010A5560E78C1DAC82237E280A775F",
"certificateThumbprint": "B72E67D9DE53332B632A7863F7BF5AA77AD0D08C",
"validFrom": "2020-02-26T16:03:05+07:00",
"validTo": "2021-02-25T16:03:05+07:00",
"issuerDN": "CN=Mobile-ID Trusted Network, O=MOBILE-ID,C=VN",
"certificate": "`MIIFCDCCA/CgAwIBAgIQVAEKVWDnjB2sgiN+KAp3XzANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJWTjEOMAwGA1UECAwFSGFub2kxLzAtBgNVBAoMJlZpZXRuYW0gRUZZIEluZm9ybWF0aWNzIFRlY2hub2xvZ3kgSlNDMQ8wDQYDVQQLDAZFRlktQ0ExDzANBgNVBAMMBkVGWS1DQTAeFw0yMDAyMjYwOTAzMDVaFw0yMTAyMjUwOTAzMDVaMIG9MQswCQYDVQQGEwJWTjESMBAGA1UECAwJSMOgIE7hu5lpMRIwEAYDVQQHDAlIw6AgTuG7mWkxITAfBgNVBAoMGFRy4buLbmggUXVhbmcgVMOibihURVNUKTEhMB8GA1UEAwwYVHLhu4tuaCBRdWFuZyBUw6JuKFRFU1QpMR4wHAYKCZImiZPyLGQBAQwOTVNUOjAxMDI1MTkwNDExIDAeBgkqhkiG9w0BCQEWEXRhbnRxMUBtc2IuY29tLnZuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsJR5TAL1k8bOe/XWqQOt+Tcb6bD+ewshla8Wtb0ra+HtsK95A53v+HpqaWq56JGCj2hf/JKPjY1AgKk0hhMWBJ5zEaY2T9NilTY9Xhg5JOVCKYhSCCWnBbCDvpX1v2AJhXsdGIGfODvN3IXWTHuibXbx83ySg/kuU85OYKtkkN+hetZ1VP5YhJ+pYTsDsN7AO1cAWFcwUJ6LVioBGFExYor9yIy4wAnVrtdLRcDB+k5I5M4F50tnV6WonRKJr2Kgr8donxrpacUOLSx/82hnjC0Ao06V/4gK5mTULTKaKVd6/81ojZaSC/LqomvMTiNh/VmGRRHC5XyH3h80wnNB+wIDAQABo4IBTjCCAUowDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBSVZcCLWVCoN6j/HF2jLqiErg+oHzBjBggrBgEFBQcBAQRXMFUwMQYIKwYBBQUHMAKGJWh0dHA6Ly92YS5lZnljYS52bi9jZXJ0cy9lZnljYTI1Ni5jcnQwIAYIKwYBBQUHMAGGFGh0dHA6Ly9vY3NwLmVmeWNhLnZuMBwGA1UdEQQVMBOBEXRhbnRxMUBtc2IuY29tLnZuMBgGA1UdIAQRMA8wDQYLKwYBBAGB7QMBCgEwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly92YS5lZnljYS52bi9wdWIvQ1JMMjU2MB0GA1UdDgQWBBRPPntMvfBNLV4vbgbKNtSELRAacDAOBgNVHQ8BAf8EBAMCBeAwDQYJKoZIhvcNAQELBQADggEBAKRAweGZff+FUKFujeFTQrm8oJ/SvekG+gBKPLpHfjJz4Pw5EDfjiRV3hh86iUYDziRlVOFuMShwDCssJK3ru+rfpvlQHEPsK4LQ8lj6SEbUEfoMRq7fU1CPx8JjHPcFDVV7zb0H8+5HAUM1Llr84Sqocve+AGHMZKf4GafDAT4GLxR7vENB1gWBnfI6ZFQKUWPNcomPvEEbV0Buxcvu3SRTQFsYt4HCf3XU6xMeLzb1g7MsgE0ZjtFBwv7AoJCo2BIk4NJVJ5i0QIqxFkYeXczo8cIDDRr7bMqiccQeNGsaQMEvz+n1gnk+BgwkmRjASEHgtIJhWeNhZo6QMZjtbjw=",
"sharedMode": 1,
"authModeSupported": [
""
]
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"responseCode": {
"type": "number",
"description": "Mã kết quả. Thông thường sẽ là 1007"
},
"responseMessage": {
"type": "string",
"description": "Mô tả chi tiết kết quả"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"timestamp": {
"type": "string",
"description": "Timestamp hiện tại"
},
"status": {
"type": "boolean",
"description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
},
"certificateDN": {
"type": "string",
"description": "`Thông tin của chủ sở hữu chứng thư số (DN). E.g: CN=Nguyen Van A, O=B Company,C=VN`"
},
"certificateSerialNumber": {
"type": "string",
"description": "`Serial number của chứng thư số E.g: 5405ABCDEF`"
},
"certificateThumbprint": {
"type": "string",
"description": "Thumbprint chứng thư số (certificate hash)"
},
"validFrom": {
"type": "string",
"description": "Thời điểm chứng thư số bắt đầu có hiệu lực"
},
"validTo": {
"type": "string",
"description": "Thời điểm chứng thư số hết hiệu lực"
},
"issuerDN": {
"type": "string",
"description": "`Thông tin nhà phát hành chứng thư số (DN) E.g: CN=Mobile-ID Trusted Network, O=MOBILE-ID,C=VN`"
},
"certificate": {
"type": "string",
"description": "` (string, optional) - Chứng thư số"
},
"sharedMode": {
"type": "number",
"enum": [
1,
2,
3
],
"default": 1,
"description": "Chế độ chia sẻ nào được áp dụng cho chứng thư số"
},
"authModeSupported": {
"type": "array",
"items": {
"type": "string",
"enum": [
"EXPLICIT/PIN",
"EXPLICIT/OTP-SMS",
"EXPLICIT/OTP-EMAIL"
]
},
"description": "Mảng các hình thức xác thực được hỗ trợ"
}
},
"required": [
"responseCode"
]
}
/certificates/forget-pin
Forget Pin Certificate
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2",
"notificationTemplate": "Mật khẩu mới của bạn là: {Passcode}. Mật khẩu này sẽ hết hạn sau 30 ngày",
"notificationSubject": "EFY - Mật khẩu Remote Signing"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
},
"notificationTemplate": {
"type": "string",
"description": "Định dạng thông điệp sẽ được gửi vào mail của khách hàng trong đó bao gồm mật khẩu mới được sinh ngẫu nhiên. Ví dụ: Mật khẩu mới của bạn là: {Passcode}. Mật khẩu này sẽ hết hạn sau 30 ngày"
},
"notificationSubject": {
"type": "string",
"description": "Định dang tiêu đề Email được Remote Signing gửi khi khách hàng gửi yêu cầu quên mật khẩu."
}
},
"required": [
"agreementUUID"
]
}
200
Content-Type: application/json
{
"responseCode": 1007,
"responseMessage": "REQUEST ACCEPTED",
"billCode": "EFY_CA",
"timestamp": "2020-02-28T13:28:42+07:00",
"status": true
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"responseCode": {
"type": "number",
"description": "Mã kết quả. Thông thường sẽ là 1007"
},
"responseMessage": {
"type": "string",
"description": "Mô tả chi tiết kết quả"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"timestamp": {
"type": "string",
"description": "Timestamp hiện tại"
},
"status": {
"type": "boolean",
"description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
}
},
"required": [
"responseCode"
]
}
/certificates/renew
Gia hạn chứng thư
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2",
"certificateProfile": "T2OSB21Y"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
},
"certificateProfile": {
"type": "string",
"enum": [
"T2OSB21Y",
"T2OSB22Y",
"T2OSB23Y",
"T2PSB21Y",
"T2PSB22Y",
"T2PSB23Y",
"T2SFB21Y",
"T2SFB22Y",
"T2SFB23Y"
],
"description": "Mã gói dịch vụ chữ ký số"
}
},
"required": [
"agreementUUID",
"certificateProfile"
]
}
200
Content-Type: application/json
{
"responseCode": 1007,
"responseMessage": "REQUEST ACCEPTED",
"billCode": "EFY_CA",
"timestamp": "2020-02-28T13:28:42+07:00",
"status": true
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"responseCode": {
"type": "number",
"description": "Mã kết quả. Thông thường sẽ là 1007"
},
"responseMessage": {
"type": "string",
"description": "Mô tả chi tiết kết quả"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"timestamp": {
"type": "string",
"description": "Timestamp hiện tại"
},
"status": {
"type": "boolean",
"description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
}
},
"required": [
"responseCode"
]
}
/certificates/revoke
Thu hồi chứng thư
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
}
},
"required": [
"agreementUUID"
]
}
200
Content-Type: application/json
{
"responseCode": 1007,
"responseMessage": "REQUEST ACCEPTED",
"billCode": "EFY_CA",
"timestamp": "2020-02-28T13:28:42+07:00",
"status": true
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"responseCode": {
"type": "number",
"description": "Mã kết quả. Thông thường sẽ là 1007"
},
"responseMessage": {
"type": "string",
"description": "Mô tả chi tiết kết quả"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"timestamp": {
"type": "string",
"description": "Timestamp hiện tại"
},
"status": {
"type": "boolean",
"description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
}
},
"required": [
"responseCode"
]
}
/certificates/disable
Tạm ngừng chứng thư
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
}
},
"required": [
"agreementUUID"
]
}
200
Content-Type: application/json
{
"responseCode": 1007,
"responseMessage": "REQUEST ACCEPTED",
"billCode": "EFY_CA",
"timestamp": "2020-02-28T13:28:42+07:00",
"status": true
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"responseCode": {
"type": "number",
"description": "Mã kết quả. Thông thường sẽ là 1007"
},
"responseMessage": {
"type": "string",
"description": "Mô tả chi tiết kết quả"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"timestamp": {
"type": "string",
"description": "Timestamp hiện tại"
},
"status": {
"type": "boolean",
"description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
}
},
"required": [
"responseCode"
]
}
/certificates/enable
Kích hoạt lại chứng thư số
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
}
},
"required": [
"agreementUUID"
]
}
200
Content-Type: application/json
{
"responseCode": 1007,
"responseMessage": "REQUEST ACCEPTED",
"billCode": "EFY_CA",
"timestamp": "2020-02-28T13:28:42+07:00",
"status": true
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"responseCode": {
"type": "number",
"description": "Mã kết quả. Thông thường sẽ là 1007"
},
"responseMessage": {
"type": "string",
"description": "Mô tả chi tiết kết quả"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"timestamp": {
"type": "string",
"description": "Timestamp hiện tại"
},
"status": {
"type": "boolean",
"description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
}
},
"required": [
"responseCode"
]
}
/signing/file
Ký file
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2",
"authMode": "Hello, world!",
"authorizeCode": "12345678",
"mimeType": "application/pdf",
"signingFileData": "RmlsZSB0aGF0IHdpbGwgYmUgc2lnbmVk",
"signCloudMetaData": {
"'singletonSigning'": {
"entry": [
{
"key": "Hello, world!",
"value": "Hello, world!"
}
]
},
"'counterSigning'": {
"entry": [
{
"key": "Hello, world!",
"value": "Hello, world!"
}
]
}
},
"notificationSubject": "EFY - Xác thực tài khoản",
"notificationTemplate": "EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút",
"signingApp": "IHD",
"docId": "RP_TEST-210422154526-39084-614900"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
},
"authMode": {
"type": "string",
"enum": [
"EXPLICIT/PIN",
"EXPLICIT/OTP-SMS",
"EXPLICIT/OTP-EMAIL",
"EXPLICIT/PIN"
],
"default": "EXPLICIT/PIN",
"description": "Hình thức xác thực"
},
"authorizeCode": {
"type": "string",
"description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
},
"mimeType": {
"type": "string",
"description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
},
"signingFileData": {
"type": "string",
"description": "Nội dung file cần ký theo định dạng Base64."
},
"signCloudMetaData": {
"type": "object",
"properties": {
"'singletonSigning'": {
"type": "object",
"properties": {
"entry": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "key"
},
"value": {
"type": "string",
"description": "value"
}
}
}
}
},
"description": "Thông tin ký dành cho khách hàng"
},
"'counterSigning'": {
"type": "object",
"properties": {
"entry": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "key"
},
"value": {
"type": "string",
"description": "value"
}
}
}
}
},
"description": "Thông tin ký dành cho tổ chức"
}
},
"description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
},
"notificationSubject": {
"type": "string",
"description": "Định dang tiêu đề Email được Remote Signing gửi mã xác thực OTP."
},
"notificationTemplate": {
"type": "string",
"description": "Định dạng thông điệp sẽ được gửi vào mail của khách hàng trong đó chứa mã xác thực (OTP) được sinh ngẫu nhiên. Ví dụ: EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút"
},
"signingApp": {
"type": "string",
"description": "Mã ứng dụng ký"
},
"docId": {
"type": "string",
"description": "ID tài liệu, sử dụng để định danh tài liệu trường hợp 1 file ký nhiều lần, client muốn định danh tài liệu để có thể lấy về file đã ký sau cùng của tài liệu. Khi thực hiện ký lần đầu hệ thống sẽ trả về docId, những lần ký sau client truyền thêm docId (truyền vào hàm signFile và hàm authorizeFile) lên để xác định lần ký này cho tài liệu nào. Client có thể tải file đã ký mới nhất qua hàm downloadDocument"
}
},
"required": [
"agreementUUID",
"authMode",
"mimeType",
"signingFileData"
]
}
TH1: Ký file PDF
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2",
"authMode": "EXPLICIT/PIN",
"authorizeCode": "12345678",
"mimeType": "application/pdf",
"signingFileData": "JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==",
"signCloudMetaData": {
"singletonSigning": {
"entry": [
{
"key": "VISIBLESIGNATURE",
"value": "true"
},
{
"key": "COORDINATE",
"value": "0,0,300,60"
},
{
"key": "TEXTDIRECTION",
"value": "RIGHTTOLEFT"
},
{
"key": "VISUALSTATUS",
"value": "false"
},
{
"key": "IMAGEANDTEXT",
"value": "true"
},
{
"key": "TEXTCOLOR",
"value": "blue"
},
{
"key": "PAGENO",
"value": "1"
},
{
"key": "SIGNATUREIMAGE",
"value": "iVBORw0KGgoAAAANSUhEUgAAAEIAAABBCAYAAABlwHJGAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7cGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDowRTJEMDRBRjk5M0VFNjExQTIwMkFCRjUwNERDMUIxQTwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6YmRlODA2OTctNzE0Yy0xMWU4LWI2NDctYzE5YWIzZTM1ZGMzPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjNkMTg3YTc0LTgxNDQtYzU0MS1hMzE5LTU4OWUzNmI3MTU4MzwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgPHN0UmVmOmluc3RhbmNlSUQ+eG1wLmlpZDpGMUVEQjU2Q0ZGNkFFODExOEI0Nzg0NDhGMDdFNEVBRDwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDowRTJEMDRBRjk5M0VFNjExQTIwMkFCRjUwNERDMUIxQTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjU2ODY5Nzg1LTYzMWEtOGU0ZC04ODBkLTM0YzM4ZTI2NmVhZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wNi0xNlQxNzowNToyMyswNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjNkMTg3YTc0LTgxNDQtYzU0MS1hMzE5LTU4OWUzNmI3MTU4Mzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wNi0xNlQxNzowNToyMyswNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOC0wNi0xMVQxMzoxMzoyMSswNzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE4LTA2LTE2VDE3OjA1OjIzKzA3OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wNi0xNlQxNzowNToyMyswNzowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjY1PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5V4kAUAAAAIGNIUk0AAHolAACAgwAA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"
}
]
}
},
"signingApp": "IHD",
"docId": "RP_TEST-210422154526-39084-614900"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
},
"authMode": {
"type": "string",
"description": "Hình thức xác thực"
},
"authorizeCode": {
"type": "string",
"description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
},
"mimeType": {
"type": "string",
"description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
},
"signingFileData": {
"type": "string",
"description": "Nội dung file cần ký theo định dạng Base64."
},
"signCloudMetaData": {
"type": "object",
"properties": {
"singletonSigning": {
"type": "object",
"properties": {
"entry": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
]
}
}
}
},
"description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
},
"signingApp": {
"type": "string",
"description": "Mã ứng dụng ký"
},
"docId": {
"type": "string",
"description": "ID tài liệu, sử dụng để định danh tài liệu trường hợp 1 file ký nhiều lần, client muốn định danh tài liệu để có thể lấy về file đã ký sau cùng của tài liệu. Khi thực hiện ký lần đầu hệ thống sẽ trả về docId, những lần ký sau client truyền thêm docId (truyền vào hàm signFile và hàm authorizeFile) lên để xác định lần ký này cho tài liệu nào. Client có thể tải file đã ký mới nhất qua hàm downloadDocument"
}
},
"required": [
"agreementUUID",
"authMode",
"mimeType",
"signingFileData"
]
}
TH2: Ký file XML
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2",
"authMode": "EXPLICIT/PIN",
"authorizeCode": "12345678",
"mimeType": "application/xml",
"signingFileData": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KPGludjppbnZvaWNlIHhtbG5zOmludj0iaHR0cDovL2xhcGhvYWRvbi5nZHQuZ292LnZuLzIwMTQvMDkvaW52b2ljZXhtbC92MSIgDQogIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj4NCiAgPGludjppbnZvaWNlRGF0YSBpZD0iZGF0YSI+DQogICAgPGludjppbnZvaWNlVHlwZT4wMkdUVFQ8L2ludjppbnZvaWNlVHlwZT4NCiAgICA8aW52OnRlbXBsYXRlQ29kZT4wMkdUVFQwLzAwMTwvaW52OnRlbXBsYXRlQ29kZT4NCiAgICA8aW52Omludm9pY2VTZXJpZXM+QUIvMjBFPC9pbnY6aW52b2ljZVNlcmllcz4NCiAgICA8aW52Omludm9pY2VOdW1iZXI+MDAwMDAwMTwvaW52Omludm9pY2VOdW1iZXI+DQogICAgPGludjppbnZvaWNlSXNzdWVkRGF0ZT4yMDIwLTAxLTA4VDAwOjAwOjAwPC9pbnY6aW52b2ljZUlzc3VlZERhdGU+DQogICAgPGludjpzaWduZWREYXRlPg0KICAgIDwvaW52OnNpZ25lZERhdGU+DQogICAgPGludjpjdXJyZW5jeUNvZGU+Vk5EPC9pbnY6Y3VycmVuY3lDb2RlPg0KICAgIDxpbnY6YWRqdXN0bWVudFR5cGU+MTwvaW52OmFkanVzdG1lbnRUeXBlPg0KICAgIDxpbnY6cGF5bWVudHM+DQogICAgICA8aW52OnBheW1lbnQ+DQogICAgICAgIDxpbnY6cGF5bWVudE1ldGhvZE5hbWU+VE0vQ0s8L2ludjpwYXltZW50TWV0aG9kTmFtZT4NCiAgICAgIDwvaW52OnBheW1lbnQ+DQogICAgPC9pbnY6cGF5bWVudHM+DQogICAgPGludjpkZWxpdmVyeSAvPg0KICAgIDxpbnY6c2VsbGVyTGVnYWxOYW1lPkPDtG5nIFR5IEPhu5UgUGjhuqduIEPDtG5nIE5naOG7hyBUaW4gSOG7jWMgRUZZIFZp4buHdCBOYW08L2ludjpzZWxsZXJMZWdhbE5hbWU+DQogICAgPGludjpzZWxsZXJUYXhDb2RlPjAxMDI1MTkwNDE8L2ludjpzZWxsZXJUYXhDb2RlPg0KICAgIDxpbnY6c2VsbGVyQWRkcmVzc0xpbmU+VMOyYSBOaMOgIFNhbk5hbSBGb29kLCA3OCBEdXkgVMOibiwgQ+G6p3UgR2nhuqV5LCBIw6AgTuG7mWk8L2ludjpzZWxsZXJBZGRyZXNzTGluZT4NCiAgICA8aW52OnNlbGxlckZheE51bWJlcj4NCiAgICA8L2ludjpzZWxsZXJGYXhOdW1iZXI+DQogICAgPGludjpzZWxsZXJFbWFpbD4NCiAgICA8L2ludjpzZWxsZXJFbWFpbD4NCiAgICA8aW52OmRlbGl2ZXJ5T3JkZXJOdW1iZXI+DQogICAgPC9pbnY6ZGVsaXZlcnlPcmRlck51bWJlcj4NCiAgICA8aW52OmRlbGl2ZXJ5T3JkZXJCeT4NCiAgICA8L2ludjpkZWxpdmVyeU9yZGVyQnk+DQogICAgPGludjpkZWxpdmVyeU9yZGVyRGF0ZT4NCiAgICA8L2ludjpkZWxpdmVyeU9yZGVyRGF0ZT4NCiAgICA8aW52OmRlbGl2ZXJ5Qnk+DQogICAgPC9pbnY6ZGVsaXZlcnlCeT4NCiAgICA8aW52OmZyb21XYXJlaG91c2VOYW1lPg0KICAgIDwvaW52OmZyb21XYXJlaG91c2VOYW1lPg0KICAgIDxpbnY6dHJhbnNwb3J0YXRpb25NZXRob2Q+DQogICAgPC9pbnY6dHJhbnNwb3J0YXRpb25NZXRob2Q+DQogICAgPGludjp0b1dhcmVob3VzZU5hbWU+DQogICAgPC9pbnY6dG9XYXJlaG91c2VOYW1lPg0KICAgIDxpbnY6Y29udGFpbmVyTnVtYmVyPg0KICAgIDwvaW52OmNvbnRhaW5lck51bWJlcj4NCiAgICA8aW52OmRlbGl2ZXJ5T3JkZXJDb250ZW50Pg0KICAgIDwvaW52OmRlbGl2ZXJ5T3JkZXJDb250ZW50Pg0KICAgIDxpbnY6ZXhjaGFuZ2VSYXRlPjEgPC9pbnY6ZXhjaGFuZ2VSYXRlPg0KICAgIDxpbnY6aXRlbXM+DQogICAgICA8aW52Oml0ZW0+DQogICAgICAgIDxpbnY6bGluZU51bWJlcj4xPC9pbnY6bGluZU51bWJlcj4NCiAgICAgICAgPGludjppdGVtTmFtZT5JbnZvaWNlPC9pbnY6aXRlbU5hbWU+DQogICAgICAgIDxpbnY6cXVhbnRpdHk+MCA8L2ludjpxdWFudGl0eT4NCiAgICAgICAgPGludjppdGVtVG90YWxBbW91bnRXaXRob3V0VmF0PjExMTExMTExIDwvaW52Oml0ZW1Ub3RhbEFtb3VudFdpdGhvdXRWYXQ+DQogICAgICAgIDxpbnY6dmF0UGVyY2VudGFnZT4tMTwvaW52OnZhdFBlcmNlbnRhZ2U+DQogICAgICAgIDxpbnY6dmF0QW1vdW50PjAgPC9pbnY6dmF0QW1vdW50Pg0KICAgICAgICA8aW52OnVuaXRQcmljZT4wIDwvaW52OnVuaXRQcmljZT4NCiAgICAgICAgPGludjpwcm9tb3Rpb24+MDwvaW52OnByb21vdGlvbj4NCiAgICAgIDwvaW52Oml0ZW0+DQogICAgPC9pbnY6aXRlbXM+DQogICAgPGludjppbnZvaWNlVGF4QnJlYWtkb3ducz4NCiAgICAgIDxpbnY6aW52b2ljZVRheEJyZWFrZG93bj4NCiAgICAgICAgPGludjp2YXRQZXJjZW50YWdlPi0xPC9pbnY6dmF0UGVyY2VudGFnZT4NCiAgICAgIDwvaW52Omludm9pY2VUYXhCcmVha2Rvd24+DQogICAgPC9pbnY6aW52b2ljZVRheEJyZWFrZG93bnM+DQogICAgPGludjp0b3RhbEFtb3VudFdpdGhvdXRWQVQ+MTExMTExMTEgPC9pbnY6dG90YWxBbW91bnRXaXRob3V0VkFUPg0KICAgIDxpbnY6dG90YWxWQVRBbW91bnQ+MCA8L2ludjp0b3RhbFZBVEFtb3VudD4NCiAgICA8aW52OnRvdGFsQW1vdW50V2l0aFZBVD4xMTExMTExMSA8L2ludjp0b3RhbEFtb3VudFdpdGhWQVQ+DQogICAgPGludjp0b3RhbEFtb3VudFdpdGhWQVRJbldvcmRzPk3GsOG7nWkgbeG7mXQgdHJp4buHdSBt4buZdCB0csSDbSBtxrDhu51pIG3hu5l0IG5naMOsbiBt4buZdCB0csSDbSBtxrDhu51pIG3hu5l0IMSR4buTbmcgY2jhurVuLjwvaW52OnRvdGFsQW1vdW50V2l0aFZBVEluV29yZHM+DQogICAgPGludjpkaXNjb3VudEFtb3VudD4wIDwvaW52OmRpc2NvdW50QW1vdW50Pg0KICAgIDxpbnY6dXNlckRlZmluZXM+PC9pbnY6dXNlckRlZmluZXM+DQogIDwvaW52Omludm9pY2VEYXRhPg0KICA8aW52OmNvbnRyb2xEYXRhPg0KICAgIDxpbnY6c3lzdGVtQ29kZT5JSEQtVjM8L2ludjpzeXN0ZW1Db2RlPg0KICA8L2ludjpjb250cm9sRGF0YT4NCiAgPEluZm9LeT4NCiAgICA8TkdBWUtZLz4NCiAgPC9JbmZvS3k+DQo8L2ludjppbnZvaWNlPg0K",
"signCloudMetaData": {
"singletonSigning": {
"entry": [
{
"key": "ALGORITHM",
"value": "SHA-1"
},
{
"key": "SIGNATUREFORMAT",
"value": "DSIG"
},
{
"key": "SIGNATUREID",
"value": "seller"
},
{
"key": "ATTRIBUTENAME",
"value": "id"
},
{
"key": "NODETOBESIGNED",
"value": "data"
},
{
"key": "SIGNATURELOCATION",
"value": "inv:invoice"
}
]
}
},
"signingApp": "IHD",
"docId": "RP_TEST-210422154526-39084-614900"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
},
"authMode": {
"type": "string",
"description": "Hình thức xác thực"
},
"authorizeCode": {
"type": "string",
"description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
},
"mimeType": {
"type": "string",
"description": "MimeType của file cần ký. Ví dụ đối với file XML là ‘application/xml"
},
"signingFileData": {
"type": "string",
"description": "Nội dung file cần ký theo định dạng Base64."
},
"signCloudMetaData": {
"type": "object",
"properties": {
"singletonSigning": {
"type": "object",
"properties": {
"entry": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
]
}
}
}
},
"description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
},
"signingApp": {
"type": "string",
"description": "Mã ứng dụng ký"
},
"docId": {
"type": "string",
"description": "ID tài liệu, sử dụng để định danh tài liệu trường hợp 1 file ký nhiều lần, client muốn định danh tài liệu để có thể lấy về file đã ký sau cùng của tài liệu. Khi thực hiện ký lần đầu hệ thống sẽ trả về docId, những lần ký sau client truyền thêm docId (truyền vào hàm signFile và hàm authorizeFile) lên để xác định lần ký này cho tài liệu nào. Client có thể tải file đã ký mới nhất qua hàm downloadDocument"
}
},
"required": [
"agreementUUID",
"authMode",
"mimeType",
"signingFileData"
]
}
TH3: Ký file PDF Xác Thực Qua OTP-EMAIL
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2",
"authMode": "EXPLICIT/OTP-EMAIL",
"mimeType": "application/pdf",
"signingFileData": "JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==",
"signCloudMetaData": {
"singletonSigning": {
"entry": [
{
"key": "VISIBLESIGNATURE",
"value": "true"
},
{
"key": "COORDINATE",
"value": "0,0,300,60"
},
{
"key": "TEXTDIRECTION",
"value": "RIGHTTOLEFT"
},
{
"key": "VISUALSTATUS",
"value": "false"
},
{
"key": "IMAGEANDTEXT",
"value": "true"
},
{
"key": "TEXTCOLOR",
"value": "blue"
},
{
"key": "PAGENO",
"value": "1"
},
{
"key": "SIGNATUREIMAGE",
"value": "iVBORw0KGgoAAAANSUhEUgAAAEIAAABBCAYAAABlwHJGAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7cGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDowRTJEMDRBRjk5M0VFNjExQTIwMkFCRjUwNERDMUIxQTwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6YmRlODA2OTctNzE0Yy0xMWU4LWI2NDctYzE5YWIzZTM1ZGMzPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjNkMTg3YTc0LTgxNDQtYzU0MS1hMzE5LTU4OWUzNmI3MTU4MzwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgPHN0UmVmOmluc3RhbmNlSUQ+eG1wLmlpZDpGMUVEQjU2Q0ZGNkFFODExOEI0Nzg0NDhGMDdFNEVBRDwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDowRTJEMDRBRjk5M0VFNjExQTIwMkFCRjUwNERDMUIxQTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjU2ODY5Nzg1LTYzMWEtOGU0ZC04ODBkLTM0YzM4ZTI2NmVhZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wNi0xNlQxNzowNToyMyswNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjNkMTg3YTc0LTgxNDQtYzU0MS1hMzE5LTU4OWUzNmI3MTU4Mzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wNi0xNlQxNzowNToyMyswNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOC0wNi0xMVQxMzoxMzoyMSswNzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE4LTA2LTE2VDE3OjA1OjIzKzA3OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wNi0xNlQxNzowNToyMyswNzowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjY1PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5V4kAUAAAAIGNIUk0AAHolAACAgwAA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"
}
]
}
},
"notificationSubject": "EFY - Xác thực tài khoản",
"notificationTemplate": "EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút",
"signingApp": "IHD"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
},
"authMode": {
"type": "string",
"description": "Hình thức xác thực"
},
"mimeType": {
"type": "string",
"description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
},
"signingFileData": {
"type": "string",
"description": "Nội dung file cần ký theo định dạng Base64."
},
"signCloudMetaData": {
"type": "object",
"properties": {
"singletonSigning": {
"type": "object",
"properties": {
"entry": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
]
}
}
}
},
"description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
},
"notificationSubject": {
"type": "string",
"description": "Định dang tiêu đề Email được Remote Signing gửi mã xác thực OTP."
},
"notificationTemplate": {
"type": "string",
"description": "Định dạng thông điệp sẽ được gửi vào mail của khách hàng trong đó chứa mã xác thực (OTP) được sinh ngẫu nhiên. Ví dụ: EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút"
},
"signingApp": {
"type": "string",
"description": "Mã ứng dụng ký"
}
},
"required": [
"agreementUUID",
"authMode",
"mimeType",
"signingFileData"
]
}
TH4: Ký file XML hoá đơn theo chuẩn TT78 của Thuế
{
"agreementUUID": "13ae13a443e2",
"authMode": "EXPLICIT/PIN",
"authorizeCode": "12345678",
"mimeType": "application/xml",
"signingFileData": "PEhEb24+PERMSERvbiBJZD0iSW52b2ljZURhdGEiPjxUVENodW5nPjxQQmFuPjIuMC4wPC9QQmFuPjxUSERvbj5Iw7NhIMSRxqFuIGdpw6EgdHLhu4sgZ2lhIHTEg25nPC9USERvbj48S0hNU0hEb24+MTwvS0hNU0hEb24+PEtISERvbj5DMjFUREc8L0tISERvbj48U0hEb24+MTwvU0hEb24+PE5MYXA+MjAyMS0xMS0xMTwvTkxhcD48RFZUVGU+Vk5EPC9EVlRUZT48SFRUVG9hbj5UTS9DSzwvSFRUVG9hbj48TVNUVENHUD4wMTAyNTE5MDQxPC9NU1RUQ0dQPjwvVFRDaHVuZz48TkRIRG9uPjxOQmFuPjxUZW4+Q8OUTkcgVFkgVE5ISCBUUlVZ4buATiBUSMOUTkcgVMOZTkcgVknhu4ZUPC9UZW4+PE1TVD4wMjAxMDYwNTIwPC9NU1Q+PERDaGk+VOG6p25nIDksIHTDsmEgbmjDoCBTYW5uYW08L0RDaGk+PFNEVGhvYWk+KDA0KSA3NDY4NzM2NTQ1PC9TRFRob2FpPjwvTkJhbj48Tk11YT48VGVuPkPDlE5HIFRZIFROSEggQ8agIEtIw40gQ0jDjU5IIFjDgUMgSDJUIEjDgCBO4buYSTwvVGVuPjxNU1Q+MDEwODQ1Njg3MDwvTVNUPjxEQ2hpPktodSBjaOG7oyBt4bubaSwgdOG7lSA1LCBuZ8O1IDE1OSwgxJHGsOG7nW5nIFTDonkgU8ahbiwgVGjhu4sgdHLhuqVuIFBow7luZywgSHV54buHbiDEkGFuIFBoxrDhu6NuZywgSMOgIE7hu5lpPC9EQ2hpPjxNS0hhbmc+Y3R0bmhoY2tjeGgydDwvTUtIYW5nPjxTRFRob2FpLz48SFZUTk1IYW5nPkPDlE5HIFRZIFROSEggQ8agIEtIw40gQ0jDjU5IIFjDgUMgSDJUIEjDgCBO4buYSTwvSFZUTk1IYW5nPjxUTkhhbmc+MTExMDAwMTc4Mzk5IC0gVOG6oWkgTmfDom4gaMOgbmcgVE1DUCBDw7RuZyB0aMawxqFuZyBWaeG7h3QgTmFtIOKAkyBjaGkgbmjDoW5oIELhuq9jIFPDoGkgR8OybjwvVE5IYW5nPjwvTk11YT48RFNISERWdT48SEhEVnU+PFRDaGF0PjE8L1RDaGF0PjxTVFQ+MTwvU1RUPjxNSEhEVnU+SEgwMDAyNTwvTUhIRFZ1PjxUSEhEVnU+RMSDbSBiw7RuZyB2dcO0bmcgLSBTcXVhcmUgaGFtPC9USEhEVnU+PFNMdW9uZz4xPC9TTHVvbmc+PERHaWE+MTI1MDAwPC9ER2lhPjxUaFRpZW4+MTI1MDAwPC9UaFRpZW4+PFRTdWF0PjEwJTwvVFN1YXQ+PC9ISERWdT48L0RTSEhEVnU+PFRUb2FuPjxUSFRUTFRTdWF0PjxMVFN1YXQ+PFRTdWF0PjEwJTwvVFN1YXQ+PFRoVGllbj4xMjUwMDA8L1RoVGllbj48VFRodWU+MTI1MDA8L1RUaHVlPjwvTFRTdWF0PjwvVEhUVExUU3VhdD48VGdUQ1RodWU+MTI1MDAwPC9UZ1RDVGh1ZT48VGdUVGh1ZT4xMjUwMDwvVGdUVGh1ZT48VGdUVFRCU28+MTM3NTAwPC9UZ1RUVEJTbz48VGdUVFRCQ2h1Pk3hu5l0IHRyxINtIGJhIG3GsMahaSBi4bqjeSBuZ2jDrG4gbsSDbSB0csSDbSDEkeG7k25nIGNo4bq1bi48L1RnVFRUQkNodT48L1RUb2FuPjwvTkRIRG9uPjwvRExIRG9uPjxEU0NLUz48TkJhbi8+PE5NdWEvPjwvRFNDS1M+PC9IRG9uPg",
"signCloudMetaData": {
"singletonSigning": {
"entry": [
{
"key": "SIGNATUREFORMAT",
"value": "TAX-211120"
},
{
"key": "SIGNINGTIMEXMLSN",
"value": "https://hoadondientu.gdt.gov.vn"
},
{
"key": "SIGNATURELOCATION",
"value": "DSCKS/NBan"
},
{
"key": "NODETOBESIGNED",
"value": "InvoiceData"
},
{
"key": "SIGNATUREID",
"value": "seller"
}
]
}
},
"signingApp": "IHD"
}
{
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
},
"authMode": {
"type": "string",
"description": "Hình thức xác thực"
},
"authorizeCode": {
"type": "string",
"description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
},
"mimeType": {
"type": "string",
"description": "MimeType của file cần ký. Ví dụ đối với file XML là ‘application/xml"
},
"signingFileData": {
"type": "string",
"description": "Nội dung file cần ký theo định dạng Base64."
},
"signCloudMetaData": {
"type": "object",
"properties": {
"singletonSigning": {
"type": "object",
"properties": {
"entry": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
}
}
}
},
"description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
},
"signingApp": {
"type": "string",
"description": "Mã ứng dụng ký"
}
},
"required": [
"agreementUUID",
"authMode",
"mimeType",
"signingFileData"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}
TH5: Ký file XML tờ khai đăng ký theo chuẩn TT78 của Thuế
{
"agreementUUID": "13ae13a443e2",
"authMode": "EXPLICIT/PIN",
"authorizeCode": "12345678",
"mimeType": "application/xml",
"signingFileData": "PFRLaGFpPjxETFRLaGFpIElkPSJEZWNsYXJhdGlvbkRhdGEiPjxUVENodW5nPjxQQmFuPjIuMC4wPC9QQmFuPjxNU28+MDEvxJBLVMSQLUjEkMSQVDwvTVNvPjxUZW4+VOG7nSBraGFpIMSRxINuZyBrw70vdGhheSDEkeG7lWkgdGjDtG5nIHRpbiBz4butIGThu6VuZyBow7NhIMSRxqFuIMSRaeG7h24gdOG7rTwvVGVuPjxMREtVTmhpZW0+MTwvTERLVU5oaWVtPjxUTk5UPkzhu4cgVGVzdCBUVDc4IDE8L1ROTlQ+PE1TVD45OTk5OTk5NzAyPC9NU1Q+PENRVFFMeT5D4bulYyBUaHXhur8gVHAuIEjhu5MgQ2jDrSBNaW5oPC9DUVRRTHk+PE1DUVRRTHk+NzAxMDA8L01DUVRRTHk+PE5MSGU+TWFpIE5n4buNYyBM4buHIDE8L05MSGU+PERDTEhlPlRo4bunIMSQ4bupYywgVHAuIEjhu5MgQ2jDrSBNaW5oIDE8L0RDTEhlPjxEQ1REVHU+bWFpbmdvY2xlLndvcmtAZ21haWwuY29tPC9EQ1REVHU+PERUTEhlPjA5NjgwNDc4MDM8L0RUTEhlPjxERGFuaD5I4buTIENow60gTWluaDwvRERhbmg+PE5MYXA+MjAyMS0xMS0xOTwvTkxhcD48L1RUQ2h1bmc+PE5EVEtoYWk+PEhUSERvbj48Q01hPjE8L0NNYT48S0NNYT4wPC9LQ01hPjwvSFRIRG9uPjxIVEdETEhERFQ+PE5OVERCS0toYW4+MDwvTk5UREJLS2hhbj48Tk5US1RETlVCTkQ+MDwvTk5US1RETlVCTkQ+PENETFRURENRVD4wPC9DRExUVERDUVQ+PENETFFUQ1ROPjA8L0NETFFUQ1ROPjwvSFRHRExIRERUPjxQVGh1Yz48Q0REdT4xPC9DRER1PjxDQlRIb3A+MDwvQ0JUSG9wPjwvUFRodWM+PExIRFNEdW5nPjxIREdUR1Q+MTwvSERHVEdUPjxIREJIYW5nPjE8L0hEQkhhbmc+PEhEQlRTQ29uZz4wPC9IREJUU0Nvbmc+PEhEQkhEVFFHaWE+MDwvSERCSERUUUdpYT48SERLaGFjPjE8L0hES2hhYz48Q1R1PjE8L0NUdT48L0xIRFNEdW5nPjxEU0NUU1NEdW5nPjxDVFM+PFNUVD4xPC9TVFQ+PFRUQ2h1Yz5DPVZOLCBPPUPDlE5HIFRZIEPhu5QgUEjhuqZOIEPDlE5HIE5HSOG7hiBUSU4gSOG7jEMgRUZZIFZJ4buGVCBOQU0sIENOPUVGWUNBX1RFU1Q8L1RUQ2h1Yz48U2VyaT41NDAxMEEwREJBMTQ5NzFFQTQ5ODFGODEyRTQwOERFNzwvU2VyaT48VE5nYXk+MjAyMS0xMC0yM1QwOToyMzowMDwvVE5nYXk+PEROZ2F5PjIwMjItMTAtMjNUMDk6MjM6MDA8L0ROZ2F5PjxIVGh1Yz4zPC9IVGh1Yz48L0NUUz48Q1RTPjxTVFQ+MjwvU1RUPjxUVENodWM+Qz1WTiwgTz1Dw5RORyBUWSBD4buUIFBI4bqmTiBDw5RORyBOR0jhu4YgVElOIEjhu4xDIEVGWSBWSeG7hlQgTkFNLCBDTj1FRllDQV9URVNUPC9UVENodWM+PFNlcmk+NTQwMTBBMEE5MzAxQ0FDQTUxQjgzMjM1NDhCNDY4OTk8L1Nlcmk+PFROZ2F5PjIwMjEtMTAtMjNUMDk6MjQ6MDA8L1ROZ2F5PjxETmdheT4yMDIyLTEwLTIzVDA5OjI0OjAwPC9ETmdheT48SFRodWM+MTwvSFRodWM+PC9DVFM+PC9EU0NUU1NEdW5nPjxEU0RLVU5oaWVtPjxTVFQ+MTwvU1RUPjxUTEhEb24+SMOzYSDEkcahbiBiw6FuIGjDoG5nPC9UTEhEb24+PEtITVNIRG9uPjI8L0tITVNIRG9uPjxLSEhEb24+SzIxVEFCPC9LSEhEb24+PE1TVD45OTk5OTk5NzcwPC9NU1Q+PFRUQ2h1Yz5Dw7RuZyB0eSBM4buHIHRlc3Q8L1RUQ2h1Yz48TURpY2g+TOG6rXAgaMOzYSDEkcahbjwvTURpY2g+PFROZ2F5PjIwMjEtMTEtMTJUMDA6MDA6MDA8L1ROZ2F5PjxETmdheT4yMDIxLTExLTMwVDAwOjAwOjAwPC9ETmdheT48UFRodWM+VE0vQ0s8L1BUaHVjPjwvRFNES1VOaGllbT48L05EVEtoYWk+PC9ETFRLaGFpPjxEU0NLUz48Tk5ULz48L0RTQ0tTPjwvVEtoYWk+",
"signCloudMetaData": {
"singletonSigning": {
"entry": [
{
"key": "SIGNATUREFORMAT",
"value": "TAX-211120"
},
{
"key": "SIGNINGTIMEXMLSN",
"value": "https://hoadondientu.gdt.gov.vn"
},
{
"key": "SIGNATURELOCATION",
"value": "DSCKS/NNT"
},
{
"key": "NODETOBESIGNED",
"value": "DeclarationData"
},
{
"key": "SIGNATUREID",
"value": "proid"
}
]
}
},
"signingApp": "IHD"
}
{
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
},
"authMode": {
"type": "string",
"description": "Hình thức xác thực"
},
"authorizeCode": {
"type": "string",
"description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
},
"mimeType": {
"type": "string",
"description": "MimeType của file cần ký. Ví dụ đối với file XML là ‘application/xml"
},
"signingFileData": {
"type": "string",
"description": "Nội dung file cần ký theo định dạng Base64."
},
"signCloudMetaData": {
"type": "object",
"properties": {
"singletonSigning": {
"type": "object",
"properties": {
"entry": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
}
}
}
},
"description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
},
"signingApp": {
"type": "string",
"description": "Mã ứng dụng ký"
}
},
"required": [
"agreementUUID",
"authMode",
"mimeType",
"signingFileData"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}
200
Content-Type: application/json
{
"responseCode": 1007,
"responseMessage": "REQUEST ACCEPTED",
"billCode": "EFY_CA",
"timestamp": "2020-02-28T13:28:42+07:00",
"status": true,
"notificationTemplate": "EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút",
"notificationSubject": "EFY - Xác thực tài khoản",
"signedFileData": "RmlsZSBiaW5hcnkgdGhhdCBiZSBzaWduZWQ=",
"mimeType": "application/pdf",
"multipleSignedFileData": [
{
"signedFileData": "RmlsZSBiaW5hcnkgdGhhdCBiZSBzaWduZWQ=",
"mimeType": "application/pdf",
"signedFileName": "invoice_123456.pdf",
"dmsMetaData": ""
}
],
"certificateDN": "E.g: CN=Nguyen Van A, O=B Company,C=VN",
"certificateSerialNumber": "54010A5560E78C1DAC82237E280A775F",
"certificateThumbprint": "B72E67D9DE53332B632A7863F7BF5AA77AD0D08C",
"validFrom": "2020-02-26T16:03:05+07:00",
"validTo": "2021-02-25T16:03:05+07:00",
"issuerDN": "CN=Mobile-ID Trusted Network, O=MOBILE-ID,C=VN",
"sharedMode": 1,
"docId": "RP_TEST-210422154526-39084-614900"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"responseCode": {
"type": "number",
"description": "Mã kết quả. Thông thường sẽ là 1007"
},
"responseMessage": {
"type": "string",
"description": "Mô tả chi tiết kết quả"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"timestamp": {
"type": "string",
"description": "Timestamp hiện tại"
},
"status": {
"type": "boolean",
"description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
},
"notificationTemplate": {
"type": "string",
"description": "Định dạng thông điệp sẽ được gửi vào mail của khách hàng trong đó chứa mã xác thực (OTP) được sinh ngẫu nhiên. Ví dụ: EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút"
},
"notificationSubject": {
"type": "string",
"description": "Định dang tiêu đề Email được Remote Signing gửi mã xác thực OTP."
},
"authorizeCredential": {
"type": "string",
"description": "In case of Authorize Code isn’t sent by Remote Signing, Email of client/customer also is responded back to Finance/Insurance company and they use that information to send Authorize Code to their end-user"
},
"signedFileData": {
"type": "string",
"description": "Nội dung file đã ký theo định dạng Base64"
},
"mimeType": {
"type": "string",
"description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
},
"signedFileUUID": {
"type": "string",
"description": "ID của file đã ký được tạo bởi Remote Signing"
},
"multipleSignedFileData": {
"type": "array",
"items": {
"type": "object",
"properties": {
"signedFileData": {
"type": "string",
"description": "Nội dung file đã ký theo định dạng Base64"
},
"mimeType": {
"type": "string",
"description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
},
"signedFileUUID": {
"type": "string",
"description": "ID của file đã ký được tạo bởi Remote Signing"
},
"signedFileName": {
"type": "string",
"description": "Tên file đã ký"
},
"dmsMetaData": {
"type": "string",
"description": "Thông tin DMS được sử dụng để tải xuống tài liệu đã ký"
}
},
"required": [
"mimeType"
]
},
"description": "Trong trường hợp ký nhiều file, danh sách file đã ký sẽ được trả về trong đối tượng này."
},
"xmlSignature": {
"type": "string",
"description": "Chữ ký XML (XMLDSig or XML-XadDES)"
},
"certificateDN": {
"type": "string",
"description": "`Thông tin của chủ sở hữu chứng thư số (DN). E.g: CN=Nguyen Van A, O=B Company,C=VN`"
},
"certificateSerialNumber": {
"type": "string",
"description": "`Serial number của chứng thư số E.g: 5405ABCDEF`"
},
"certificateThumbprint": {
"type": "string",
"description": "Thumbprint chứng thư số (certificate hash)"
},
"validFrom": {
"type": "string",
"description": "Thời điểm chứng thư số bắt đầu có hiệu lực"
},
"validTo": {
"type": "string",
"description": "Thời điểm chứng thư số hết hiệu lực"
},
"issuerDN": {
"type": "string",
"description": "`Thông tin nhà phát hành chứng thư số (DN) E.g: CN=Mobile-ID Trusted Network, O=MOBILE-ID,C=VN`"
},
"sharedMode": {
"type": "number",
"enum": [
1,
2,
3
],
"default": 1,
"description": "Chế độ chia sẻ nào được áp dụng cho chứng thư số"
},
"docId": {
"type": "string",
"description": "ID tài liệu, sử dụng để định danh tài liệu trường hợp 1 file ký nhiều lần, client muốn định danh tài liệu để có thể lấy về file đã ký sau cùng của tài liệu. Khi thực hiện ký lần đầu hệ thống sẽ trả về docId, những lần ký sau client truyền thêm docId (truyền vào hàm signFile và hàm authorizeFile) lên để xác định lần ký này cho tài liệu nào. Client có thể tải file đã ký mới nhất qua hàm downloadDocument"
}
},
"required": [
"responseCode",
"mimeType"
]
}
/signing/file/authorize
Xác thực ký file
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2",
"billCode": "EFY_CA",
"authorizeCode": "12345678",
"signCloudMetaData": {
"'singletonSigning'": {
"entry": [
{
"key": "Hello, world!",
"value": "Hello, world!"
}
]
},
"'counterSigning'": {
"entry": [
{
"key": "Hello, world!",
"value": "Hello, world!"
}
]
}
},
"docId": "RP_TEST-210422154526-39084-614900"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"authorizeCode": {
"type": "string",
"description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
},
"signCloudMetaData": {
"type": "object",
"properties": {
"'singletonSigning'": {
"type": "object",
"properties": {
"entry": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "key"
},
"value": {
"type": "string",
"description": "value"
}
}
}
}
},
"description": "Thông tin ký dành cho khách hàng"
},
"'counterSigning'": {
"type": "object",
"properties": {
"entry": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "key"
},
"value": {
"type": "string",
"description": "value"
}
}
}
}
},
"description": "Thông tin ký dành cho tổ chức"
}
},
"description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
},
"docId": {
"type": "string",
"description": "ID tài liệu, sử dụng để định danh tài liệu trường hợp 1 file ký nhiều lần, client muốn định danh tài liệu để có thể lấy về file đã ký sau cùng của tài liệu. Khi thực hiện ký lần đầu hệ thống sẽ trả về docId, những lần ký sau client truyền thêm docId (truyền vào hàm signFile và hàm authorizeFile) lên để xác định lần ký này cho tài liệu nào. Client có thể tải file đã ký mới nhất qua hàm downloadDocument"
}
},
"required": [
"agreementUUID"
]
}
200
Content-Type: application/json
{
"responseCode": 1007,
"responseMessage": "REQUEST ACCEPTED",
"billCode": "EFY_CA",
"timestamp": "2020-02-28T13:28:42+07:00",
"status": true,
"remainingCounter": 1,
"signedFileData": "RmlsZSBiaW5hcnkgdGhhdCBiZSBzaWduZWQ=",
"mimeType": "application/pdf",
"signedFileUUID": "Hello, world!",
"xmlSignature": "Hello, world!",
"docId": "RP_TEST-210422154526-39084-614900"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"responseCode": {
"type": "number",
"description": "Mã kết quả. Thông thường sẽ là 1007"
},
"responseMessage": {
"type": "string",
"description": "Mô tả chi tiết kết quả"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"timestamp": {
"type": "string",
"description": "Timestamp hiện tại"
},
"status": {
"type": "boolean",
"description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
},
"remainingCounter": {
"type": "number",
"description": "Sau khi thay đổi mã PIN thành công, tham số này sẽ là bộ đếm tối đa được cấu hình trên Remote Signin. Mỗi khi thay đổi mã PIN không thay công tham số này sẽ bị giảm đi 1. Nếu tham số này về 0 yêu cầu sẽ bị chặn. Sau một khoảng thời gian (được cấu hình trên Remote Signing) thì sẽ được bỏ chặn tự động."
},
"signedFileData": {
"type": "string",
"description": "Nội dung file đã ký theo định dạng Base64"
},
"mimeType": {
"type": "string",
"description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
},
"signedFileUUID": {
"type": "string",
"description": "ID của file đã ký được tạo bởi Remote Signing"
},
"xmlSignature": {
"type": "string",
"description": "Chữ ký XML (XMLDSig or XML-XadDES)"
},
"docId": {
"type": "string",
"description": "ID tài liệu, sử dụng để định danh tài liệu trường hợp 1 file ký nhiều lần, client muốn định danh tài liệu để có thể lấy về file đã ký sau cùng của tài liệu. Khi thực hiện ký lần đầu hệ thống sẽ trả về docId, những lần ký sau client truyền thêm docId (truyền vào hàm signFile và hàm authorizeFile) lên để xác định lần ký này cho tài liệu nào. Client có thể tải file đã ký mới nhất qua hàm downloadDocument"
}
},
"required": [
"responseCode",
"mimeType"
]
}
/signing/hash
Sign Hash
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2",
"authMode": "Hello, world!",
"authorizeCode": "12345678",
"encryption": "RSA",
"hash": "f3a8a2f048b6ae0d3a5b14a803d707ffeb190a91fc8719c3c8886c64a1732094",
"hashs": [
"f3a8a2f048b6ae0d3a5b14a803d707ffeb190a91fc8719c3c8886c64a1732094",
"f3a8a2f048b6ae0d3a5b14a803d707ffeb190a91fc8719c3c8886c64a1732094"
],
"hashAlgorithm": "SHA-256",
"mimeType": "application/sha256-binary",
"signingApp": "IHD"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
},
"authMode": {
"type": "string",
"enum": [
"EXPLICIT/PIN",
"EXPLICIT/OTP-SMS",
"EXPLICIT/OTP-EMAIL",
"EXPLICIT/PIN"
],
"default": "EXPLICIT/PIN",
"description": "Hình thức xác thực"
},
"authorizeCode": {
"type": "string",
"description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
},
"encryption": {
"type": "string",
"description": "Hệ mã hóa được sử dụng mặc định là RSA",
"default": "RSA"
},
"hash": {
"type": "string",
"description": "Giá trị Hash dùng để ký"
},
"hashs": {
"type": "array",
"description": "Mảng giá trị Hash dùng để ký"
},
"hashAlgorithm": {
"type": "string",
"enum": [
"SHA-256",
"SHA-384",
"SHA-512"
],
"description": "Thuật toán sử dụng để băm dữ liệu"
},
"mimeType": {
"type": "string",
"enum": [
"application/sha256-binary",
"application/sha384-binary",
"application/sha512-binary"
],
"description": "Mime type cho chuỗi hash"
},
"signingApp": {
"type": "string",
"description": "Mã ứng dụng ký"
}
},
"required": [
"agreementUUID",
"authMode",
"hash",
"hashAlgorithm",
"mimeType"
]
}
200
Content-Type: application/json
{
"responseCode": 1007,
"responseMessage": "REQUEST ACCEPTED",
"billCode": "EFY_CA",
"timestamp": "2020-02-28T13:28:42+07:00",
"status": true,
"notificationTemplate": "EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút",
"notificationSubject": "EFY - Xác thực tài khoản",
"authorizeCredential": "Hello, world!",
"signatureValue": "Hello, world!",
"signatureValues": [
"C6bENR+KLDfUSxLNl5QpdlDZKKK29n7k1tsNBhPeZ+FflGI0TmkKz8NDMz6a/m8mI9/cH2pkI65yzsbeSlBVkdNSARkzBGLsT7Bg3pnGe8/re/WTSB/EjVI2oH2JvVOtQbm0Yjzuvgnei5BuRTgw6hpF+k8UbT1OHCM2kY4efI/wos/vBFrxspIsw/wCvdQuhPrSrsFj2hSZ8ScUv5Z5Gt+Ay4nPrixA6x5aK2NanM2ind9Vu9yiCY+O9hisjn8eVEldbU4yD+IJnjQLFr3GRAfutZduExm2b9QzFUd8zQuIZYCpadFXPR6J5uQnLrcsoP5TmSfjuiKQcymPc5FV6A==",
"C6bENR+KLDfUSxLNl5QpdlDZKKK29n7k1tsNBhPeZ+FflGI0TmkKz8NDMz6a/m8mI9/cH2pkI65yzsbeSlBVkdNSARkzBGLsT7Bg3pnGe8/re/WTSB/EjVI2oH2JvVOtQbm0Yjzuvgnei5BuRTgw6hpF+k8UbT1OHCM2kY4efI/wos/vBFrxspIsw/wCvdQuhPrSrsFj2hSZ8ScUv5Z5Gt+Ay4nPrixA6x5aK2NanM2ind9Vu9yiCY+O9hisjn8eVEldbU4yD+IJnjQLFr3GRAfutZduExm2b9QzFUd8zQuIZYCpadFXPR6J5uQnLrcsoP5TmSfjuiKQcymPc5FV6A=="
]
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"responseCode": {
"type": "number",
"description": "Mã kết quả. Thông thường sẽ là 1007"
},
"responseMessage": {
"type": "string",
"description": "Mô tả chi tiết kết quả"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"timestamp": {
"type": "string",
"description": "Timestamp hiện tại"
},
"status": {
"type": "boolean",
"description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
},
"notificationTemplate": {
"type": "string",
"description": "Định dạng thông điệp sẽ được gửi vào mail của khách hàng trong đó chứa mã xác thực (OTP) được sinh ngẫu nhiên. Ví dụ: EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút"
},
"notificationSubject": {
"type": "string",
"description": "Định dang tiêu đề Email được Remote Signing gửi mã xác thực OTP."
},
"authorizeCredential": {
"type": "string",
"description": "In case of Authorize Code isn’t sent by Remote Signing, Email of client/customer also is responded back to Finance/Insurance company and they use that information to send Authorize Code to their end-user"
},
"signatureValue": {
"type": "string",
"description": "Chữ ký PKCS#1 theo định dang Base64"
},
"signatureValues": {
"type": "array",
"description": "Mảng chữ ký PKCS#1 theo định dang Base64"
}
},
"required": [
"responseCode"
]
}
/signing/hash/authorize
Xác thực ký Hash
Content-Type: application/json
{
"agreementUUID": "13ae13a443e2",
"billCode": "EFY_CA",
"authorizeCode": "12345678"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"agreementUUID": {
"type": "string",
"description": "ID hợp đồng"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"authorizeCode": {
"type": "string",
"description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
}
},
"required": [
"agreementUUID"
]
}
200
Content-Type: application/json
{
"responseCode": 1007,
"responseMessage": "REQUEST ACCEPTED",
"billCode": "EFY_CA",
"timestamp": "2020-02-28T13:28:42+07:00",
"status": true,
"remainingCounter": 1,
"signatureValue": "Hello, world!"
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"responseCode": {
"type": "number",
"description": "Mã kết quả. Thông thường sẽ là 1007"
},
"responseMessage": {
"type": "string",
"description": "Mô tả chi tiết kết quả"
},
"billCode": {
"type": "string",
"description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
},
"timestamp": {
"type": "string",
"description": "Timestamp hiện tại"
},
"status": {
"type": "boolean",
"description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
},
"remainingCounter": {
"type": "number",
"description": "Sau khi thay đổi mã PIN thành công, tham số này sẽ là bộ đếm tối đa được cấu hình trên Remote Signin. Mỗi khi thay đổi mã PIN không thay công tham số này sẽ bị giảm đi 1. Nếu tham số này về 0 yêu cầu sẽ bị chặn. Sau một khoảng thời gian (được cấu hình trên Remote Signing) thì sẽ được bỏ chặn tự động."
},
"signatureValue": {
"type": "string",
"description": "Chữ ký PKCS#1 theo định dang Base64"
}
},
"required": [
"responseCode"
]
}
/signing/download/file/{billCode}
string
(required) bill code
200
Content-Type: application/json
{
"signedFiles": [
{
"fileName": "signed.pdf",
"base64": "c2lnbmVkLnBkZg==",
"mimeType": "application/pdf"
}
]
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"signedFiles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fileName": {
"type": "string",
"description": "Tên file"
},
"base64": {
"type": "string",
"description": "Nội dung file đã ký theo định dạng Base64"
},
"mimeType": {
"type": "string",
"description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
}
},
"required": [
"fileName",
"base64",
"mimeType"
]
},
"description": "mảng file đã ký"
}
}
}
/signing/download/document/{docId}
string
(required) document id
200
Content-Type: application/json
{
"signedFiles": [
{
"fileName": "signed.pdf",
"base64": "c2lnbmVkLnBkZg==",
"mimeType": "application/pdf"
}
]
}
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"signedFiles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fileName": {
"type": "string",
"description": "Tên file"
},
"base64": {
"type": "string",
"description": "Nội dung file đã ký theo định dạng Base64"
},
"mimeType": {
"type": "string",
"description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
}
},
"required": [
"fileName",
"base64",
"mimeType"
]
},
"description": "mảng file đã ký"
}
}
}
Đây là chế độ chia sẻ chứng thư số trên Remote Signing
Value | Description |
---|---|
1 |
PRIVATE_MODE |
2 |
RP_SHARED_MODE |
3 |
AGREEMENT_SHARED_MODE |
Hình thức xác thực NSD
Value | Description |
---|---|
EXPLICIT/PIN |
Xác thực qua mã PIN |
EXPLICIT/OTP-SMS |
Xác thực qua hình thức OTP-SMS |
EXPLICIT/OTP-EMAIL |
Xác thực qua hình thức OTP-EMAIL |
Value | Description |
---|---|
0 |
SUCCESSFULLY |
1000 |
INVALID IP ADDRESS |
1001 |
INVALID CREDENTIAL DATA |
1002 |
INVALID PARAMS |
1003 |
UNEXPECTED EXCEPTION |
1004 |
INVALID AUTHORIZATION CODE |
1005 |
AUTHORIZATION BLOCKED |
1006 |
AUTHORIZATION CODE TIMEOUT |
1007 |
REQUEST ACCEPTED |
1008 |
AGREEEMENT NOT FOUND |
1009 |
CERTIFICATE IS NOT ENROLLED |
1010 |
AGREEMENT EXISTED |
1011 |
UNSUPPORTED OPERATION |
1012 |
ACCESS DENIED |
1013 |
AGREEMENT NOT READY |
1014 |
CERTIFICATE IS EXPIRED |
1015 |
BILLCODE TIMEOUT DUE TO UNEXPECTED EXCEPTION WHILE SIGNING |
1016 |
FILE IS BEING PROCESSED |
1017 |
AGREEMENT REVOKED |
1018 |
SUCCESSFULLY. YOUR PASSCODE NEED TO BE CHANGED |
1019 |
FUNCTION ACCESS DENIED |
1020 |
FAILED TO CHECK REVOCATION |
1021 |
CERTIFICATE REVOKED |
1022 |
CERTIFICATE UNKNOWN |
1023 |
SHARED AGREEMENT NOT FOUND |
1024 |
SHARED AGREEMENT INVALID SHARED MODE |
1025 |
FILE NOT FOUND |
1026 |
MULTIPLE CLIENT MACHINE YSING THE SAME AGREEMENT UUID |
1027 |
TRANSACTION NOT FINISHED |
1029 |
CREDENTIALS HAVE BEEN EXPIRED |
1028 |
EMAIL HAS BEEN REGISTERED |
Ngoài việc ký file thông thường bạn có thể gửi kèm các thông tin khác để mô tả chi tiết về yêu cầu ký như (hiển thị khung chữ ký, lý do ký, màu chữ,… trên file pdf). Để thực hiện việc này bạn cần truyền lên dữ liệu trong thẻ signCloudMetaData. Trong thẻ này bạn có thể tùy chỉnh thông tin chữ ký số của cá nhân và tổ chức bằng cách thêm các cặp gía trị {key: 'key name', value: 'value'}
vào trong 2 thẻ (singletonSigning: Dành cho chứ ký cá nhân, counterSigning: Dành cho chữ ký đơn vị). Bảng bên dưới mô tả chi tiết các giá trị trong cặp key, value.
Key | Mô tả | File | Gía trị mẫu |
---|---|---|---|
VISIBLESIGNATURE |
Hiển thị khung chữ ký (true, false) | pdf |
true |
IMAGEANDTEXT |
Hiển thị cả chữ và ảnh trên khung chữ ký | pdf |
true |
SIGNATUREIMAGE |
Hình ảnh vào khung chữ ký value là String base64. Định dạng support : png , jpg | pdf |
aW1hZ2UgdG8gYWRkIHRvIHRoZS BzaWduYXR1cmUgZnJhbWUgYXMgQm FzZTY0IHN0cmluZw== |
PAGENO |
Thiết lập trang đặt khung chữ ký: “1”,“First”,“Last” | pdf |
1 |
POSITIONIDENTIFIER |
Đoạn string để tìm kiếm nơi đặt chữ ký | pdf |
|
RECTANGLEOFFSET |
Khi tìm được chuỗi string, đây là độ dời (x,y) để đặt chữ ký cho đẹp hơn ![]() |
pdf |
'-30,5' |
RECTANGLESIZE |
Kích thước khung chữ nhận chữ ký (Width,Height) | pdf |
'170,90' |
COORDINATE |
Thiết lập vị trí tuyệt đối cho khung chữ ký, thứ tự “x1,y1,x2,y2”, lưu ý không có khoảng trắng giữa các giá trị. ![]() |
pdf |
'0,0,300,60' |
TEXTCOLOR |
Thiết lập màu chữ cho khung chữ ký | pdf |
red |
TEXTDIRECTION |
Vị trí hiển thị text trên khung chữ ký | pdf |
LEFTTORIGHT : Text bên trái, Image bên phảiRIGHTTOLEFT : Text bên phải và Image bên trái |
SHOWSIGNERINFO và SIGNERINFOPREFIX |
Hiển thị thông tin người ký trên khung chữ ký. Phần thông tin sau PREFIX sẽ được lấy từ trường CN chứng thư số | pdf |
{SHOWSIGNERINFO: true,SIGNERINFOPREFIX: 'Ký bởi'} Sẽ hiện thị dòng : “Ký bởi: {Certificate Commmon Name}” |
SHOWDATETIME và DATETIMEPREFIX |
Hiển thị thông tin ngày ký trên khung chữ ký. Dữ liệu ngày ký sẽ lấy theo giờ trên server | pdf |
{SHOWDATETIME: true,DATETIMEPREFIX: 'Ký ngày'} Sẽ hiện thị dòng : “Ký ngày: {DD/MM/YYYY}” |
SHOWREASON , SIGNREASONPREFIX và SIGNREASON |
Hiển thị thông tin REASON trên khung chữ ký | pdf |
{SHOWREASON: true, SIGNREASONPREFIX: 'Lý do',SIGNREASON:'Duyệt'} Sẽ hiện thị dòng : “Lý do: Duyệt” |
SHOWLOCATION , LOCATION và LOCATIONPREFIX |
Hiển thị thông tin LOCATION trên khung chữ ký | pdf |
{SHOWLOCATION: true, LOCATION: 'Hà Nội', LOCATIONPREFIX:'Nơi ký'} Sẽ hiện thị dòng : “Nơi ký: Hà Nội” |
LOCKAFTERSIGNING |
Lock tài liệu sau khi ký , Tài liệu đã lock sẽ không thểm add thêm chữ ký (true, false) | pdf |
true |
SHOWEMAIL và EMAILPREFIX |
Hiển thị email trên chữ ký | pdf |
{SHOWEMAIL: true, EMAILPREFIX: 'Email: '} Sẽ hiện thị dòng : “Email: [địa chỉ email]” |
ALGORITHM |
Thuật toán băm | xml |
SHA-1 |
SIGNATUREFORMAT |
định dạng chữ ký số (DSIG DSIG_SINGLE_NODE DSIG_MULTIPLE_NODES DSIG_XPATH XADES_EPES) | xml |
DSIG |
SIGNATUREID |
id của thẻ chưa dữ liệu cần ký | xml |
seller |
ATTRIBUTENAME |
Tên thuộc tính id | xml |
id |
CANONICALIZATIONMETHOD |
CANONICALIZATIONMETHOD (EXCLUSIVE, EXCLUSIVE_WITH_COMMENTS, INCLUSIVE, INCLUSIVE_WITH_COMMENTS) | xml |
INCLUSIVE |
NODETOBESIGNED |
NODETOBESIGNED | xml |
data |
SIGNATURELOCATION |
SIGNATURELOCATION | xml |
inv:invoice |
Generated by aglio on 15 Jul 2022