Mom factura testing
Agent Skills for Mom Factura Payment API — Angolan payments (MCX, E-kwanza, Bank Reference) for LLM agents
npx -y skills add ithustle/momenu-skills --skill mom-factura-testingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Test and debug Mom Factura Payment API integrations using QA environment and payment simulation. Use when setting up test environments, simulating payment outcomes (success, failure, timeout), debugging API errors, or validating integration before production.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
5.0 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it
Mom Factura Testing & QA
Test payment integrations without processing real transactions.
Base URL: https://api.momenu.online
Enable QA Mode
Add header x-env-qa: true to use the test environment. Works from any origin.
For local development, also add x-dev-mode: true (localhost/127.0.0.1 only).
Content-Type: application/json
x-api-key: YOUR_API_KEY
x-env-qa: true
x-dev-mode: true
Simulate Payment Results
The simulateResult field in the MCX endpoint body triggers specific scenarios. Only active when x-env-qa: true.
| Value | Behavior |
|---|---|
success | Payment succeeds, returns transactionId and invoiceUrl |
insufficient_balance | Fails: client has no balance |
timeout | Fails: no response from provider |
rejected | Fails: payment explicitly rejected |
invalid_number | Fails: phone not registered |
Internal test phone mapping (automatic, no action needed):
- success → 244900000000
- insufficient_balance → 244900000001
- timeout → 244900000002
- rejected → 244900000003
- invalid_number → 244999999999
Test Examples
Successful MCX Payment
curl -X POST https://api.momenu.online/api/payment/mcx \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-H "x-env-qa: true" \
-d '{"paymentInfo":{"amount":1000,"phoneNumber":"244923456789"},"simulateResult":"success"}'
Insufficient Balance
curl -X POST https://api.momenu.online/api/payment/mcx \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-H "x-env-qa: true" \
-d '{"paymentInfo":{"amount":5000,"phoneNumber":"244923456789"},"simulateResult":"insufficient_balance"}'
Amount Validation Error
curl -X POST https://api.momenu.online/api/payment/mcx \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-H "x-env-qa: true" \
-d '{"paymentInfo":{"amount":2500,"phoneNumber":"244923456789"},"products":[{"id":"1","productName":"P","productPrice":3000,"productQuantity":1}],"simulateResult":"success"}'
Returns: { "success": false, "code": "AMOUNT_MISMATCH" }
Reference in QA
curl -X POST https://api.momenu.online/api/payment/reference \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-H "x-env-qa: true" \
-d '{"paymentInfo":{"amount":10000}}'
Test Helpers
JavaScript
const API = "https://api.momenu.online";
const headers = {
"Content-Type": "application/json",
"x-api-key": "YOUR_API_KEY",
"x-env-qa": "true"
};
async function testMCX(simulateResult = "success") {
const res = await fetch(`${API}/api/payment/mcx`, {
method: "POST", headers,
body: JSON.stringify({
paymentInfo: { amount: 1000, phoneNumber: "244923456789" },
simulateResult
})
});
return res.json();
}
// Run all scenarios
for (const s of ["success","insufficient_balance","timeout","rejected","invalid_number"]) {
testMCX(s).then(r => console.log(s, r.success ? "PASS" : "FAIL", r));
}
Python
import requests
API = "https://api.momenu.online"
headers = {"Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", "x-env-qa": "true"}
def test_mcx(simulate="success"):
r = requests.post(f"{API}/api/payment/mcx", json={
"paymentInfo": {"amount": 1000, "phoneNumber": "244923456789"},
"simulateResult": simulate
}, headers=headers)
return r.json()
for s in ["success", "insufficient_balance", "timeout", "rejected", "invalid_number"]:
result = test_mcx(s)
print(f"{s}: {'PASS' if result.get('success') else 'FAIL'} - {result}")
Common Issues
| Error | Cause | Fix |
|---|---|---|
| DOMAIN_NOT_ALLOWED | Origin not registered | Add x-dev-mode: true (localhost) or register domain |
| MISSING_API_KEY | Header missing | Check header is x-api-key (lowercase, hyphens) |
| AMOUNT_MISMATCH | amount != products total | Verify SUM(price*qty) == amount, or send only one |
| MISSING_PHONE | No phone for MCX | Add paymentInfo.phoneNumber (not needed for Reference) |
| simulateResult ignored | Not in QA mode | Add header x-env-qa: true |
| simulateResult ignored | Wrong endpoint | Only works on MCX, not Reference |
Pre-Production Checklist
- Remove
x-env-qa: trueheader - Remove
x-dev-mode: trueheader - Remove
simulateResultfrom request bodies - Register production domain in merchant panel
- Store API key in environment variables (never hardcode)
- Implement error handling for all error codes
- Implement webhook endpoint to receive payment confirmations
- Implement status endpoint fallback for Reference
- Verify amount validation with products
- Test with real phone numbers