ZA Payments DemoThe journey

The tracer

The raw application/x-www-form-urlencoded body PayFast POSTed to your notify_url. Paste it verbatim — the field order is part of what is signed.

Your merchant passphrase, or empty if the account has none. It never leaves this page — see the note below.

Load:

Valid. Signature valid. The digest over this body matches the one it carries.

The fields, in the order they arrived

  • m_payment_ide0b4f404686e4f78m_payment_id=e0b4f404686e4f78
  • pf_payment_id3302221pf_payment_id=3302221
  • payment_statusCOMPLETEpayment_status=COMPLETE
  • item_nameTest Itemitem_name=Test+Item
  • item_description(empty)item_description=
  • amount_gross150.00amount_gross=150.00
  • amount_fee-3.45amount_fee=-3.45
  • amount_net146.55amount_net=146.55
  • custom_str1(empty)custom_str1=
  • custom_str2(empty)custom_str2=
  • custom_str3(empty)custom_str3=
  • custom_str4(empty)custom_str4=
  • custom_str5(empty)custom_str5=
  • custom_int1(empty)custom_int1=
  • custom_int2(empty)custom_int2=
  • custom_int3(empty)custom_int3=
  • custom_int4(empty)custom_int4=
  • custom_int5(empty)custom_int5=
  • name_first(empty)name_first=
  • name_last(empty)name_last=
  • email_address(empty)email_address=
  • merchant_id10052477merchant_id=10052477
  • signature3a46c4b2889de13bbb5d24fa880f0775the walk stops here — `signature` and anything after it is not signed

The string that is hashed

m_payment_id=e0b4f404686e4f78&pf_payment_id=3302221&payment_status=COMPLETE&item_name=Test+Item&item_description=&amount_gross=150.00&amount_fee=-3.45&amount_net=146.55&custom_str1=&custom_str2=&custom_str3=&custom_str4=&custom_str5=&custom_int1=&custom_int2=&custom_int3=&custom_int4=&custom_int5=&name_first=&name_last=&email_address=&merchant_id=10052477&passphrase=za-payments-starters-fixture

The passphrase is in there in clear, because that is what gets hashed. It is yours, in your browser, and it goes nowhere.

Computed
3a46c4b2889de13bbb5d24fa880f0775
Supplied
3a46c4b2889de13bbb5d24fa880f0775