This repository contains the standard definitions for the development of library or sdks for ethiopian PSPs.
# ESIIPayment
**A language-neutral contract for accepting payments from Ethiopian
payment service providers through one uniform interface.**
An integrator writes checkout code once, against six closed statuses,
nine possible next-user-actions, and a handful of operations
(`collect`, `sync`, `payout`, `cancel`, `refund`, `webhook`). Adding a new
provider (or a new programming language) never touches that code:
> **Integrator code never changes when a provider is added.**
This repository is the contract itself: the domain model, the YAML
manifest format that describes a provider's behaviour as data (no code,
in any language), the schemas that validate it, and the test
vectors/cassettes every language runtime must reproduce byte-for-byte.
Language SDKs (`esiipayment-dotnet`, `esiipayment-python`, `esiipayment-node`,
`esiipayment-go`, `esiipayment-php`) are separate repositories that pin this one
as a submodule.
## Three roles, and where each starts
This project only works if these stay separate: see
spec/00-overview.md for why.
| Role | Needs | Start here |
|---|---|---|
| **Adapter author**: describes one provider's behaviour | No programming language. YAML, a text editor, and Docker. | docs/tutorials/add-a-provider/ |
| **Runtime implementer**: builds a language SDK against this spec | One programming language, zero provider-specific knowledge. | docs/tutorials/build-a-runtime/ |
| **Spec contributor**: changes a schema, an enum, or the DSL itself | Familiarity with the existing `spec/` documents. | docs/tutorials/modify-the-spec/ |
Using an SDK to actually accept payments (not contributing here)? See
docs/use-a-provider.md.
New to both roles and want a worked example before diving into the
reference guides above? docs/tutorial.md walks
through building one small (fictional) adapter and one minimal SDK,
start to finish.
## Repository layout
```
spec/ The normative contract: domain model, invariants, manifest
DSL, expression language, webhooks, con …