Installing the skill
This site is the reference. The skill is the thing that makes Claude use it —
install it once and Claude reaches for the right answer on its own, instead of
repeating Paynow’s documented advice about paid() and quietly losing you orders.
Installing takes about a minute. Everything below is optional after that.
Contents
What you are installing
One folder, paynow-integration, containing:
SKILL.md |
The decision tree and the five money-safety rules. Always loaded. |
references/ |
Six deep-dive files. Read only when the task needs them, which is what keeps the cost small. |
scripts/ |
paynow_hash.py and audit_integration.py — two tools Claude runs against your code. |
assets/ |
Copy-ready Laravel and Express starter code, with tests. |
No dependencies, no network calls, no telemetry. It is Markdown and two Python scripts that use only the standard library.
Claude Code
Clone the repository and copy the skill folder into place.
git clone https://github.com/67even/paynow-integration-skill.git
cd paynow-integration-skill
For one project — the skill loads only in that repository:
mkdir -p /path/to/your/project/.claude/skills
cp -r paynow-skills/paynow-integration /path/to/your/project/.claude/skills/
For every project on your machine:
mkdir -p ~/.claude/skills
cp -r paynow-skills/paynow-integration ~/.claude/skills/
Either way you should end up with a SKILL.md at
<skills-dir>/paynow-integration/SKILL.md. Start a new Claude Code session and it
is picked up automatically.
Don’t install it in both places. A personal skill in
~/.claude/skills/overrides a project one with the same name, so an old copy in your home directory will silently win over a freshly updated copy in the repo — and you will be debugging against documentation you already fixed.
Claude.ai, desktop and mobile
Claude on the web and in the desktop app takes a ZIP, uploaded once and available everywhere you are signed in.
cd paynow-skills
zip -r paynow-integration.zip paynow-integration -x '*/evals/*' -x '*/.DS_Store'
Then in Claude: Customize → Skills → + → Create skill → Upload a skill, and choose that file.
Zip the folder, not its contents. The archive must contain
paynow-integration/SKILL.md, and the folder name has to match thename:inSKILL.md. A zip of loose files at the top level is rejected, and the error does not say why.
Confirm Claude actually loaded it
This is the step people skip, and then conclude the skill does not work.
In Claude Code, run:
/skills
paynow-integration should be listed, with where it came from — personal,
project, plugin or synced from your account. If it is missing, the folder is in
the wrong place or SKILL.md is not directly inside it; check that
ls ~/.claude/skills/paynow-integration/SKILL.md finds a file.
On claude.ai, the skill appears under Customize → Skills with a toggle. It has to be switched on.
Use it
You do not invoke the skill by name. It has a description that tells Claude
when it is relevant, and Claude decides. Ask for what you want:
Add Paynow checkout to my Laravel app — customers mostly pay by EcoCash.
We need InnBucks payments in our Express API. The SDK doesn't seem to support it?
Customers are paying but a chunk of them never get their orders. Here's the controller.
Why is my Paynow hash always mismatching? I'm following the docs exactly.
It also fires when you mention EcoCash, OneMoney, InnBucks, O’mari or Zimswitch in a payments context, or ask for a payment gateway in a Zimbabwean app — even if you never type the word “Paynow”.
Reviewing an integration you already have? Point Claude at the code and ask.
It runs audit_integration.py first, which finds in seconds
what takes a careful read to spot.
Prove the code works before you trust it
The skill ships two hashing fixtures that Paynow publishes, and the helpers are checked against them:
cd paynow-skills/paynow-integration
python3 scripts/paynow_hash.py selftest # expect 4/4
cd assets/node-express && node --test # expect 6/6
If a port of the helper into your own language passes those two fixtures, the
single largest class of Paynow bugs is gone. See
hashing.md for the algorithm and both fixtures in full.
Updating
The skill is versioned with the repository, so updating is re-copying:
cd paynow-integration-skill && git pull
rm -rf ~/.claude/skills/paynow-integration
cp -r paynow-skills/paynow-integration ~/.claude/skills/
On claude.ai, re-zip and upload again — the new version replaces the old one.
To uninstall, delete the folder, or toggle the skill off in Customize → Skills.
You don’t actually need Claude
Nothing here is locked behind it. The
reference pages on this site are the complete Paynow interface,
the starter code in assets/ is ordinary PHP and JavaScript, and both scripts run
on their own:
# Reproduce a hash, or work out why one mismatches
python3 scripts/paynow_hash.py verify --key <integration-key> --body 'status=Paid&hash=...'
# Scan an existing integration for the mistakes that lose money
python3 scripts/audit_integration.py path/to/your/app
audit_integration.py exits 1 when it finds anything CRITICAL or HIGH,
and 0 otherwise — so it drops straight into CI without failing your build over a
MEDIUM. Both commands run from paynow-skills/paynow-integration.