PayNow — payment gateway integration profile
Also known as: Paynow Zimbabwe
Category: zim-aggregator
Regions: Zimbabwe
Countries: ZW
Currencies: USD
ZWL
Payment methods: ecocash
onemoney
innbucks
omari
zimswitch
card

Authentication:
model: integration-id-key-hashed
key_types: integrationId
integrationKey
sandbox_instant: yes
kyc_required_for_live: yes


Payment initiation:
flow: redirect
endpoint: POST https://www.paynow.co.zw/interface/initiatetransaction (web) | /interface/remotetransaction (express)
http_method: POST
required_params: id
reference
amount
additionalinfo
returnurl
resulturl
status
hash
returns: browserurl
pollurl
status
hash
amount_unit: decimal-2dp


Status handling:
mechanisms: poll
webhook
redirect-return
webhook_verification: SHA512 hash of concatenated field values + integration key, uppercase hex; verify on every callback/poll response
raw_status_values: Sent
Created
Paid
Awaiting Delivery
Delivered
Cancelled
Disputed
Refunded
status_map: Paid: paid
Awaiting Delivery: paid
Delivered: paid
Created: pending
Sent: pending
Cancelled: failed
Disputed: disputed
Refunded: refunded

Capabilities:
redirect: yes
poll: yes
webhook: yes
mobile_push: yes
refund: no
recurring: no

Credentials required:
key: integrationId
label: Integration ID
secret: no
note: PayNow > Receive Payments > your integration
key: integrationKey
label: Integration Key
secret: yes
note: same screen; used to compute/verify the SHA512 hash
key: merchantEmail
label: Merchant email
secret: no
note: email registered on the integration; used as authemail in TEST mode

Sandbox:
test_credentials: note: PayNow issues test integrations; ManishaPay also offers a shared simulated sandbox needing zero credentials
notes: Express/mobile-money test numbers (0771111111 etc.) simulate outcomes. TEST integrations reject any authemail that isn't the registered merchant email.

Known pain points and mitigations:
problem: System.FormatException on amount
cause: C# SDK sends '2.00' / locale-comma decimals PayNow rejects
mitigation: Normalize amount to a strict 0.00 invariant string before sending
severity: high
problem: Express checkout silently skips the OTP prompt
cause: Phone not in 263XXXXXXXXX MSISDN form
mitigation: Normalize phone to 263 form before forwarding
severity: high
problem: 'Hash mismatch' rejections
cause: Wrong field order / integration key when computing the SHA512 hash
mitigation: Compute hash over fields in the exact documented order; expose a hash-debug tool for expected-vs-actual diff
severity: high
problem: 'Merchant still in test' rejections on live
cause: Integration not switched to Go-Live
mitigation: Detect the message and tell the merchant to Go Live in PayNow, then add a live credential
severity: medium
problem: TEST mode rejects the customer email
cause: TEST integrations require authemail = the registered merchant email
mitigation: Store the merchant email per credential and swap it in automatically in test mode
severity: medium

SDKs:
node: paynow (official)
php: paynow/php-sdk (official)
rest_direct_ok: yes

Notes: Zimbabwe's dominant aggregator — one PayNow integration unlocks EcoCash, OneMoney, InnBucks, Omari, ZimSwitch and card. Money flows directly to the merchant's PayNow wallet; ManishaPay never holds funds.