Skip to main content

pyfva

Cliente para conectar instituciones con BCCR FVA.

Abstrae la comunicación entre los servicios SOAP del BCCR y python creando clientes de fácil uso, por ejemplo si se desea autenticar a una persona se realizaría como

from pyfva.clientes.autenticador import ClienteAutenticador

authclient = ClienteAutenticador(1,1) # negocio, entidad

if authclient.validar_servicio():
    data = authclient.solicitar_autenticacion('08-0888-0888')
else:
    # warnings.warn("Auth BCCR No disponible", RuntimeWarning)
    data = authclient.DEFAULT_ERROR

Enlaces de interés

Los siguientes enlaces son de proyectos de interés relacionados con el desarrollo de firma digital.

Instalación

Instale mediante pypi

pip install pyfva[soap]

o usando el repositorio

pip install git+https://github.com/solvo/pyfva.git

en caso de solo querer los servicios Rest

pip install pyfva

Documentación

Por supuesto la documentoación está aquí

Parámetros de ambiente

Los siguientes parámetros pueden ser modificados usando variables de entorno o variables en django settings.

Los valores por defecto son:

Ambos son direcciones del esquema, deben ser iguales al esquema del servicio WSDL.

  • STUB_SCHEME = ‘http’

  • STUB_HOST = “localhost:8001”

Dirección y protocolo donde se ubica el servicio FVA.

  • DEFAULT_BUSSINESS = 1

  • DEFAULT_ENTITY = 1

Números de identificación en el servicio FVA. (en el simulador no son usados).

  • RECEPTOR_CLIENT = ‘pyfva.receptor.client’

Cliente para recibir las respuestas del FVA.

Configurando entorno del BCCR externo

Las siguientes configuraciones son requeridas, los archivos deben estar en formato PEM

  • REQUESTS_CA_BUNDLE=/<ruta de archivo>/ca_nacional_de_CR.pem

  • REQUESTS_CA_PATH=/<ruta de archivo>/ca_nacional_de_CR.pem

  • REQUESTS_CERT_PATH=/<ruta de archivo>/bccr_agent.pem

  • REQUESTS_KEY_PATH=/<ruta de archivo>/bccr_agent_key.pem

  • STUB_SCHEME = ‘https’

  • STUB_HOST = “firmadorexterno.bccr.fi.cr”

Para realizar pruebas de conexión es importante configurar una comunicación por ssl, los siguientes comándos pueden ser de ayuda

  1. Unifica la cadena de certificados de confianza

Puede descargarse desde

Convierta los archivos a PEM

openssl x509 -in 'CA POLITICA PERSONA JURIDICA - COSTA RICA v2.cer' -out 'CA POLITICA PERSONA JURIDICA - COSTA RICA v2.pem' -inform DER
openssl x509 -in 'CA SINPE - PERSONA JURIDICA v2.cer' -out 'CA SINPE - PERSONA JURIDICA v2.pem' -inform DER
openssl x509 -in 'CA RAIZ NACIONAL - COSTA RICA v2.cer' -out 'CA RAIZ NACIONAL - COSTA RICA v2.pem' -inform DER
cp 'Certificado BANCO CENTRAL DE COSTA RICA (AGENTE ELECTRONICO).cer' 'Certificado BANCO CENTRAL DE COSTA RICA (AGENTE ELECTRONICO).pem'
cp 'CA SINPE - PERSONA JURIDICA v2(1).crt' 'CA SINPE - PERSONA JURIDICA v2(1).pem'
cat  'CA RAIZ NACIONAL - COSTA RICA v2.pem' 'CA POLITICA PERSONA JURIDICA - COSTA RICA v2.pem' 'CA SINPE - PERSONA JURIDICA v2.pem' 'CA SINPE - PERSONA JURIDICA v2(1).pem' > ca_nacional_de_CR.pem
  1. Verifique que su certificado está validado por la CA que acaba de crear

openssl verify -verbose -CAfile ca_nacional_de_CR.pem  bccr_agent.pem
  1. Verifica que puede realizar una conexión con el BCCR autenticándose con el certificado

curl --http1.1 --cert bccr_agent.pem --key bccr_agent_key.pem --cacert ca_nacional_de_CR.pem https://firmadorexterno.bccr.fi.cr:443/WebServices/Bccr.Fva.Entidades.AmbDePruebas.Sello.Ws.SI/SelladorElectronicoConControlDeLlave.asmx?wsdl
  1. Verifique que puede puede recibir notificaciones

openssl s_server -key bccr_agent_key.pem -cert bccr_agent.pem -CAfile ca_nacional_de_CR.pem -accept 8443 -www -tlsextdebug -debug -cipher ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES128-SHA:AES128-SHA256:AES256-SHA256 -tls1_2 -named_curve P-256

Las siguientes funciones pueden ser de ayuda para deteminar los cálculos

def get_digest(digest_name):
    if 'sha256' == digest_name:
        return hashlib.sha256()
    elif 'sha384' == digest_name:
        return hashlib.sha384()
    elif 'sha512' == digest_name:
        return hashlib.sha512()
def get_hash_sum(data, algorithm, b64=False):
    if type(data) == str:
        data = data.encode()
    digest = get_digest(algorithm)
    digest.update(data)
    if b64:
        return base64.b64encode(digest.digest()).decode()
    hashsum = digest.hexdigest()
    return hashsum

Para leer un archivo se puede utilizar algo como esto

with open('/<ruta al archivo>/test.docx', 'rb') as arch:
    FI = arch.read()
    ARCH = base64.b64encode(FI).decode()
    HASH = get_hash_sum(FI, 'sha512', b64=True)
    data = stampclient.firme(ARCH, 'msoffice', hash_doc=HASH)

Generar documentación

Instale Sphinx mediante pypi

pip install -U Sphinx sphinx_rtd_theme

Cambiese de directorio y ejecute la creación de códigos

cd docs
bash build_doc.sh

Para regenerar la documentación, si no se tienen cambios en los códigos de error

make html

Correr las pruebas

Cree una carpeta llamada certs en la base del proyecto y ponga ahí los certificados y llaves privadas

  • ca_nacional_de_CR.pem

  • bccr_agent.pem

  • bccr_agent_key.pem

Se necesita correr la aplicación que recibirá las peticiones desde el BCCR

cd demo
./run_receptor.sh

En caso de correrse de forma local no olvidar

python manage.py createcachetable

Luego sobre pyfva se ejecuta

python -m unittest pyfva.tests

Crear y correr con Docker las pruebas

note:: El archivo run_test.sh debe modificar el negocio y la entidad antes de generar la imagen

El receptor escucha el puerto 0.0.0.0:8443/notifica, esto debería estar registrado en central directo con el nombre de dominio adecuado.

Para construir la imagen.

docker build -t pyfva .

Para correr una instancia de pruebas.

docker run --name pyfvatest -v  `pwd`/certs:/app/certs -p 8443:8443 pyfva

Para correr las pruebas.

docker exec -ti  pyfvatest bash
cd /app
bash run_test.sh

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyfva-0.0.46.tar.gz (55.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyfva-0.0.46-py3-none-any.whl (72.5 kB view details)

Uploaded Python 3

File details

Details for the file pyfva-0.0.46.tar.gz.

File metadata

  • Download URL: pyfva-0.0.46.tar.gz
  • Upload date:
  • Size: 55.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for pyfva-0.0.46.tar.gz
Algorithm Hash digest
SHA256 2f086802254b51a5201cf25a16f1a5405945a751f1e636d90aef29e83832566b
MD5 13ee0d3af3fe41367b0a17cd88b951b0
BLAKE2b-256 fff67f51da77d28a7ed6f691c683b488efa67536e56a5d8ba0398a1ff1d02f8f

See more details on using hashes here.

File details

Details for the file pyfva-0.0.46-py3-none-any.whl.

File metadata

  • Download URL: pyfva-0.0.46-py3-none-any.whl
  • Upload date:
  • Size: 72.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for pyfva-0.0.46-py3-none-any.whl
Algorithm Hash digest
SHA256 4cf89e86b207bbb60c9dd58cceeb458bcf3b61fdea2e1c71e99a7382575c5802
MD5 fd561dbc5423a9572613b4f8a739e8dd
BLAKE2b-256 19ede71ea6fa6a2b976835afdb26b90aa6368d8674eb5746e87b0cabb3701dc1

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.0.46 This release

2 files

0.0.45

2 files

0.0.43

1 file

0.0.42

1 file

0.0.41

1 file

0.0.40

1 file

0.0.38

1 file

0.0.37

1 file

0.0.35

3 files

0.0.34

1 file

0.0.33

1 file

0.0.32

1 file

0.0.31

1 file

0.0.30

1 file

0.0.29

1 file

0.0.28

1 file

0.0.27

1 file

0.0.26

1 file

0.0.25

1 file

0.0.24

1 file

0.0.23

1 file

0.0.22

1 file

0.0.21

1 file

0.0.20

1 file

0.0.19

1 file

0.0.18

1 file

0.0.17

1 file

0.0.16

1 file

0.0.15

1 file

0.0.14

1 file

0.0.13

1 file

0.0.12

1 file

0.0.11

1 file

0.0.10

1 file

0.0.9

1 file

0.0.8

1 file

0.0.7

1 file

0.0.6

1 file

0.0.5

1 file

0.0.4

1 file

0.0.3

1 file

0.0.2

1 file

0.0.1

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page