67even

Paynow Integration Skill — Development skill for Claude Code

Development community

Claude skill for the Paynow Zimbabwe payment gateway: PHP/Laravel, Node.js/Express and raw HTTP, plus a corrected API reference, hash tooling and a codebase auditor.

How to install Paynow Integration Skill

This entry records only its repository, not the path inside it, so there is no exact command to give. Open 67even/paynow-integration-skill and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Paynow Integration Skill does

Claude skill for the Paynow Zimbabwe payment gateway: PHP/Laravel, Node.js/Express and raw HTTP, plus a corrected API reference, hash tooling and a codebase auditor. Verified against the real SDKs, not the documentation.

Alternatives in Development

  • PHP Lsp — PHP /plugin install php-lsp@claude-plugins-official 14k ★
  • Laravel Simplifier — Simplify Laravel application structure 523 ★
  • MCP Edit — tilth_write replaces the host Edit and Write tools 349 ★

README

Paynow Zimbabwe developer documentation

Paynow Integration Skill

A Claude skill for integrating the Paynow Zimbabwe payment gateway — without the bugs that cost merchants money.

Claude Skill License: MIT PHP 8.0+ Node 18+ Python 3.8+ tests


Why this exists

Paynow's official documentation tells you to gate order fulfilment on the SDK's `paid()` helper.

Follow that advice and you will lose orders. A Paynow transaction is **fully paid** in three states — `Paid`, `Awaiting Delivery` and `Delivered` — but the PHP SDK implements the helper as:

public function paid()
{
    return $this->status() === 'paid';
}

So `Awaiting Delivery` returns `false`. The money arrives, the callback returns `200`, Paynow never retries, the dashboard shows the transaction as paid — and your customer gets nothing. Silently, with no error and no log line.

The Node SDK is worse: it has **no `paid()` method at all**, yet the published quickstart still shows `if (status.paid())`. That throws `TypeError` at runtime.

This skill exists because in