nhonga-api


Namenhonga-api JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttps://github.com/mucamba/nhonga-api-python
SummaryBiblioteca Python para integração com a API Nhonga.net
upload_time2025-08-03 08:58:24
maintainerNone
docs_urlNone
authorNhonga API Library
requires_python>=3.7
licenseNone
keywords nhonga payment api mozambique mpesa emola
VCS
bugtrack_url
requirements requests typing-extensions
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Nhonga API - Python Library

Biblioteca Python para integração com a API de pagamentos da Nhonga.net.

## Instalação

```bash
pip install nhonga-api
```

## Configuração

```python
from nhonga_api import NhongaAPI

nhonga = NhongaAPI({
    "api_key": "SUA_CHAVE_API",
    "secret_key": "SUA_CHAVE_SECRETA",  # Opcional, necessária para webhooks
    "base_url": "https://nhonga.net/api/"  # Opcional, padrão já configurado
})
```

## Uso

### Criar Pagamento

```python
from nhonga_api import NhongaAPI, NhongaError, Currency, Environment

try:
    payment = nhonga.create_payment({
        "amount": 1500,
        "context": "Pagamento do curso de programação",
        "callbackUrl": "https://seusite.com/webhook",
        "returnUrl": "https://seusite.com/obrigado",
        "currency": Currency.MZN,
        "enviroment": Environment.PRODUCTION
    })

    if payment["success"]:
        print("URL de redirecionamento:", payment["redirectUrl"])
        print("ID da transação:", payment["id"])
    else:
        print("Erro:", payment["error"])
        
except NhongaError as e:
    print("Erro da API Nhonga:", e)
```

### Verificar Status do Pagamento

```python
try:
    status = nhonga.get_payment_status({
        "id": "txn_123456789"
    })

    print("Status:", status["status"])
    print("Valor:", status["amount"])
    print("Método:", status["method"])
    print("Taxa:", status["tax"])
    
except NhongaError as e:
    print("Erro ao verificar status:", e)
```

### Pagamento Direto Mobile

```python
from nhonga_api import PaymentMethod

try:
    mobile_payment = nhonga.create_mobile_payment({
        "method": PaymentMethod.MPESA,
        "amount": 2500,
        "context": "Recarga de saldo",
        "useremail": "cliente@exemplo.com",
        "userwhatsApp": "841234567",
        "phone": "841416077"
    })

    if mobile_payment["success"]:
        print("ID da transação:", mobile_payment["id"])
    else:
        print("Erro:", mobile_payment["error"])
        
except NhongaError as e:
    print("Erro no pagamento mobile:", e)
```

### Processamento de Webhooks

#### Com Flask

```python
from flask import Flask, request, jsonify
from nhonga_api import NhongaAPI, NhongaError

app = Flask(__name__)
nhonga = NhongaAPI({"api_key": "SUA_CHAVE_API", "secret_key": "SUA_CHAVE_SECRETA"})

@app.route('/webhook', methods=['POST'])
def webhook():
    try:
        secret_key = request.headers.get('secretkey')
        payload = request.get_json()

        def processar_pagamento(webhook_data):
            print("Pagamento confirmado:", webhook_data["id"])
            print("Valor pago:", webhook_data["paid"])
            print("Valor recebido:", webhook_data["received"])
            print("Taxa:", webhook_data["fee"])
            
            # Processar o pagamento confirmado
            # Atualizar banco de dados, enviar email, etc.

        nhonga.process_webhook(payload, secret_key, processar_pagamento)
        return jsonify({"status": "success"}), 200
        
    except NhongaError as e:
        print("Webhook inválido:", e)
        return jsonify({"error": "Invalid webhook"}), 400

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=3000)
```

#### Com FastAPI

```python
from fastapi import FastAPI, Request, HTTPException, Header
from nhonga_api import NhongaAPI, NhongaError
from typing import Optional

app = FastAPI()
nhonga = NhongaAPI({"api_key": "SUA_CHAVE_API", "secret_key": "SUA_CHAVE_SECRETA"})

@app.post("/webhook")
async def webhook(request: Request, secretkey: Optional[str] = Header(None)):
    try:
        if not secretkey:
            raise HTTPException(status_code=400, detail="Missing secret key")
        
        payload = await request.json()

        def processar_pagamento(webhook_data):
            print("Pagamento confirmado:", webhook_data["id"])
            # Processar pagamento...

        nhonga.process_webhook(payload, secretkey, processar_pagamento)
        return {"status": "success"}
        
    except NhongaError as e:
        raise HTTPException(status_code=400, detail="Invalid webhook")

# Para executar: uvicorn main:app --host 0.0.0.0 --port 3000
```

## Tipos e Enums

A biblioteca inclui tipos e enums para melhor experiência de desenvolvimento:

```python
from nhonga_api import (
    PaymentStatus,
    PaymentMethod, 
    Currency,
    Environment,
    CreatePaymentRequest,
    PaymentStatusResponse,
    MobilePaymentRequest,
    WebhookPayload
)

# Enums disponíveis
PaymentStatus.PENDING     # "pending"
PaymentStatus.COMPLETED   # "completed"
PaymentStatus.CANCELLED   # "cancelled"

PaymentMethod.MPESA       # "mpesa"
PaymentMethod.EMOLA       # "emola"

Currency.MZN              # "MZN"
Currency.USD              # "USD"

Environment.PRODUCTION    # "prod"
Environment.DEVELOPMENT   # "dev"
```

## Context Manager

Use context manager para gerenciamento automático de recursos:

```python
with NhongaAPI({"api_key": "SUA_CHAVE_API"}) as nhonga:
    payment = nhonga.create_payment({
        "amount": 1000,
        "context": "Teste de pagamento",
        "enviroment": Environment.DEVELOPMENT
    })
    print("Pagamento criado:", payment["id"])
```

## Tratamento de Erros

A biblioteca usa a classe `NhongaError` para erros específicos da API:

```python
from nhonga_api import NhongaError

try:
    payment = nhonga.create_payment(payment_data)
except NhongaError as e:
    print("Erro da API Nhonga:", e.message)
    print("Código de status:", e.status_code)
except Exception as e:
    print("Erro inesperado:", e)
```

## Ambiente de Desenvolvimento

Para testes, use `Environment.DEVELOPMENT` nas requisições de pagamento:

```python
from nhonga_api import Environment

payment = nhonga.create_payment({
    "amount": 1000,
    "context": "Teste de pagamento",
    "enviroment": Environment.DEVELOPMENT  # Não gera cobrança real
})
```

## Exemplos Completos

Veja o arquivo `examples.py` para exemplos completos de uso com Flask, FastAPI e outras funcionalidades.

## Requisitos

- Python 3.7+
- requests >= 2.25.0
- typing-extensions >= 4.0.0

## Desenvolvimento

Para contribuir com o desenvolvimento:

```bash
# Clonar repositório
git clone https://github.com/nhonga/nhonga-python
cd nhonga-python

# Instalar dependências de desenvolvimento
pip install -e ".[dev]"

# Executar testes
pytest

# Verificar tipos
mypy nhonga_api

# Formatar código
black nhonga_api
```

## Suporte

Para suporte técnico, entre em contato:
- Email: support@nhonga.net
- Documentação: https://nhonga.net/api-docs

## Licença

MIT


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/mucamba/nhonga-api-python",
    "name": "nhonga-api",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "nhonga payment api mozambique mpesa emola",
    "author": "Nhonga API Library",
    "author_email": "support@nhonga.net",
    "download_url": "https://files.pythonhosted.org/packages/3d/c2/18e41e2ddb160420f5bedbf2f6675d1129431d33a5770b0e877a0c667625/nhonga_api-1.0.0.tar.gz",
    "platform": null,
    "description": "# Nhonga API - Python Library\n\nBiblioteca Python para integra\u00e7\u00e3o com a API de pagamentos da Nhonga.net.\n\n## Instala\u00e7\u00e3o\n\n```bash\npip install nhonga-api\n```\n\n## Configura\u00e7\u00e3o\n\n```python\nfrom nhonga_api import NhongaAPI\n\nnhonga = NhongaAPI({\n    \"api_key\": \"SUA_CHAVE_API\",\n    \"secret_key\": \"SUA_CHAVE_SECRETA\",  # Opcional, necess\u00e1ria para webhooks\n    \"base_url\": \"https://nhonga.net/api/\"  # Opcional, padr\u00e3o j\u00e1 configurado\n})\n```\n\n## Uso\n\n### Criar Pagamento\n\n```python\nfrom nhonga_api import NhongaAPI, NhongaError, Currency, Environment\n\ntry:\n    payment = nhonga.create_payment({\n        \"amount\": 1500,\n        \"context\": \"Pagamento do curso de programa\u00e7\u00e3o\",\n        \"callbackUrl\": \"https://seusite.com/webhook\",\n        \"returnUrl\": \"https://seusite.com/obrigado\",\n        \"currency\": Currency.MZN,\n        \"enviroment\": Environment.PRODUCTION\n    })\n\n    if payment[\"success\"]:\n        print(\"URL de redirecionamento:\", payment[\"redirectUrl\"])\n        print(\"ID da transa\u00e7\u00e3o:\", payment[\"id\"])\n    else:\n        print(\"Erro:\", payment[\"error\"])\n        \nexcept NhongaError as e:\n    print(\"Erro da API Nhonga:\", e)\n```\n\n### Verificar Status do Pagamento\n\n```python\ntry:\n    status = nhonga.get_payment_status({\n        \"id\": \"txn_123456789\"\n    })\n\n    print(\"Status:\", status[\"status\"])\n    print(\"Valor:\", status[\"amount\"])\n    print(\"M\u00e9todo:\", status[\"method\"])\n    print(\"Taxa:\", status[\"tax\"])\n    \nexcept NhongaError as e:\n    print(\"Erro ao verificar status:\", e)\n```\n\n### Pagamento Direto Mobile\n\n```python\nfrom nhonga_api import PaymentMethod\n\ntry:\n    mobile_payment = nhonga.create_mobile_payment({\n        \"method\": PaymentMethod.MPESA,\n        \"amount\": 2500,\n        \"context\": \"Recarga de saldo\",\n        \"useremail\": \"cliente@exemplo.com\",\n        \"userwhatsApp\": \"841234567\",\n        \"phone\": \"841416077\"\n    })\n\n    if mobile_payment[\"success\"]:\n        print(\"ID da transa\u00e7\u00e3o:\", mobile_payment[\"id\"])\n    else:\n        print(\"Erro:\", mobile_payment[\"error\"])\n        \nexcept NhongaError as e:\n    print(\"Erro no pagamento mobile:\", e)\n```\n\n### Processamento de Webhooks\n\n#### Com Flask\n\n```python\nfrom flask import Flask, request, jsonify\nfrom nhonga_api import NhongaAPI, NhongaError\n\napp = Flask(__name__)\nnhonga = NhongaAPI({\"api_key\": \"SUA_CHAVE_API\", \"secret_key\": \"SUA_CHAVE_SECRETA\"})\n\n@app.route('/webhook', methods=['POST'])\ndef webhook():\n    try:\n        secret_key = request.headers.get('secretkey')\n        payload = request.get_json()\n\n        def processar_pagamento(webhook_data):\n            print(\"Pagamento confirmado:\", webhook_data[\"id\"])\n            print(\"Valor pago:\", webhook_data[\"paid\"])\n            print(\"Valor recebido:\", webhook_data[\"received\"])\n            print(\"Taxa:\", webhook_data[\"fee\"])\n            \n            # Processar o pagamento confirmado\n            # Atualizar banco de dados, enviar email, etc.\n\n        nhonga.process_webhook(payload, secret_key, processar_pagamento)\n        return jsonify({\"status\": \"success\"}), 200\n        \n    except NhongaError as e:\n        print(\"Webhook inv\u00e1lido:\", e)\n        return jsonify({\"error\": \"Invalid webhook\"}), 400\n\nif __name__ == '__main__':\n    app.run(host='0.0.0.0', port=3000)\n```\n\n#### Com FastAPI\n\n```python\nfrom fastapi import FastAPI, Request, HTTPException, Header\nfrom nhonga_api import NhongaAPI, NhongaError\nfrom typing import Optional\n\napp = FastAPI()\nnhonga = NhongaAPI({\"api_key\": \"SUA_CHAVE_API\", \"secret_key\": \"SUA_CHAVE_SECRETA\"})\n\n@app.post(\"/webhook\")\nasync def webhook(request: Request, secretkey: Optional[str] = Header(None)):\n    try:\n        if not secretkey:\n            raise HTTPException(status_code=400, detail=\"Missing secret key\")\n        \n        payload = await request.json()\n\n        def processar_pagamento(webhook_data):\n            print(\"Pagamento confirmado:\", webhook_data[\"id\"])\n            # Processar pagamento...\n\n        nhonga.process_webhook(payload, secretkey, processar_pagamento)\n        return {\"status\": \"success\"}\n        \n    except NhongaError as e:\n        raise HTTPException(status_code=400, detail=\"Invalid webhook\")\n\n# Para executar: uvicorn main:app --host 0.0.0.0 --port 3000\n```\n\n## Tipos e Enums\n\nA biblioteca inclui tipos e enums para melhor experi\u00eancia de desenvolvimento:\n\n```python\nfrom nhonga_api import (\n    PaymentStatus,\n    PaymentMethod, \n    Currency,\n    Environment,\n    CreatePaymentRequest,\n    PaymentStatusResponse,\n    MobilePaymentRequest,\n    WebhookPayload\n)\n\n# Enums dispon\u00edveis\nPaymentStatus.PENDING     # \"pending\"\nPaymentStatus.COMPLETED   # \"completed\"\nPaymentStatus.CANCELLED   # \"cancelled\"\n\nPaymentMethod.MPESA       # \"mpesa\"\nPaymentMethod.EMOLA       # \"emola\"\n\nCurrency.MZN              # \"MZN\"\nCurrency.USD              # \"USD\"\n\nEnvironment.PRODUCTION    # \"prod\"\nEnvironment.DEVELOPMENT   # \"dev\"\n```\n\n## Context Manager\n\nUse context manager para gerenciamento autom\u00e1tico de recursos:\n\n```python\nwith NhongaAPI({\"api_key\": \"SUA_CHAVE_API\"}) as nhonga:\n    payment = nhonga.create_payment({\n        \"amount\": 1000,\n        \"context\": \"Teste de pagamento\",\n        \"enviroment\": Environment.DEVELOPMENT\n    })\n    print(\"Pagamento criado:\", payment[\"id\"])\n```\n\n## Tratamento de Erros\n\nA biblioteca usa a classe `NhongaError` para erros espec\u00edficos da API:\n\n```python\nfrom nhonga_api import NhongaError\n\ntry:\n    payment = nhonga.create_payment(payment_data)\nexcept NhongaError as e:\n    print(\"Erro da API Nhonga:\", e.message)\n    print(\"C\u00f3digo de status:\", e.status_code)\nexcept Exception as e:\n    print(\"Erro inesperado:\", e)\n```\n\n## Ambiente de Desenvolvimento\n\nPara testes, use `Environment.DEVELOPMENT` nas requisi\u00e7\u00f5es de pagamento:\n\n```python\nfrom nhonga_api import Environment\n\npayment = nhonga.create_payment({\n    \"amount\": 1000,\n    \"context\": \"Teste de pagamento\",\n    \"enviroment\": Environment.DEVELOPMENT  # N\u00e3o gera cobran\u00e7a real\n})\n```\n\n## Exemplos Completos\n\nVeja o arquivo `examples.py` para exemplos completos de uso com Flask, FastAPI e outras funcionalidades.\n\n## Requisitos\n\n- Python 3.7+\n- requests >= 2.25.0\n- typing-extensions >= 4.0.0\n\n## Desenvolvimento\n\nPara contribuir com o desenvolvimento:\n\n```bash\n# Clonar reposit\u00f3rio\ngit clone https://github.com/nhonga/nhonga-python\ncd nhonga-python\n\n# Instalar depend\u00eancias de desenvolvimento\npip install -e \".[dev]\"\n\n# Executar testes\npytest\n\n# Verificar tipos\nmypy nhonga_api\n\n# Formatar c\u00f3digo\nblack nhonga_api\n```\n\n## Suporte\n\nPara suporte t\u00e9cnico, entre em contato:\n- Email: support@nhonga.net\n- Documenta\u00e7\u00e3o: https://nhonga.net/api-docs\n\n## Licen\u00e7a\n\nMIT\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Biblioteca Python para integra\u00e7\u00e3o com a API Nhonga.net",
    "version": "1.0.0",
    "project_urls": {
        "Homepage": "https://github.com/mucamba/nhonga-api-python"
    },
    "split_keywords": [
        "nhonga",
        "payment",
        "api",
        "mozambique",
        "mpesa",
        "emola"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4bf40b4d23c248b36be76dc309f6d11370e13127570cf6f85ad1be20185291c7",
                "md5": "1e26b461cf3262fa7ca18ecac77708f6",
                "sha256": "0a69dde7c34349c65549f57b3bf7b2f32afb8f906abe67766088e9feb33853cf"
            },
            "downloads": -1,
            "filename": "nhonga_api-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1e26b461cf3262fa7ca18ecac77708f6",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 9390,
            "upload_time": "2025-08-03T08:58:23",
            "upload_time_iso_8601": "2025-08-03T08:58:23.207425Z",
            "url": "https://files.pythonhosted.org/packages/4b/f4/0b4d23c248b36be76dc309f6d11370e13127570cf6f85ad1be20185291c7/nhonga_api-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3dc218e41e2ddb160420f5bedbf2f6675d1129431d33a5770b0e877a0c667625",
                "md5": "d296b16ffb0c6d5c644e2051bffd52d5",
                "sha256": "9d9067b4fcba9bc064cfcf09ab7cb7a5f56e0162459eccf9ee41a79f32cc021b"
            },
            "downloads": -1,
            "filename": "nhonga_api-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "d296b16ffb0c6d5c644e2051bffd52d5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 9363,
            "upload_time": "2025-08-03T08:58:24",
            "upload_time_iso_8601": "2025-08-03T08:58:24.661401Z",
            "url": "https://files.pythonhosted.org/packages/3d/c2/18e41e2ddb160420f5bedbf2f6675d1129431d33a5770b0e877a0c667625/nhonga_api-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-03 08:58:24",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "mucamba",
    "github_project": "nhonga-api-python",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.25.0"
                ]
            ]
        },
        {
            "name": "typing-extensions",
            "specs": [
                [
                    ">=",
                    "4.0.0"
                ]
            ]
        }
    ],
    "lcname": "nhonga-api"
}
        
Elapsed time: 0.95971s