<?php
$passphrase = 'reservit4321';
$data = [
'merchant_id' => '10050937',
'merchant_key' => '978nbtuc7bnjc',
'return_url' => 'http://127.0.0.1:8000/api/payment/return',
'cancel_url' => 'http://127.0.0.1:8000/api/payment/cancel',
'notify_url' => 'http://127.0.0.1:8000/api/payment/notify',
'name_first' => 'Sthembiso',
'name_last' => 'Mathebula',
'email_address' => 'smathebula.sb11@gmail.com',
'cell_number' => '0721496687',
'm_payment_id' => '27',
'amount' => '100.00',
'item_name' => 'Booking for Yoga Class',
'item_description' => 'Service booking - Date: 2026-07-06',
//'reference' => 'BOOKING-41-PAYMENT-27', // Leave commented for now
'custom_int1' => '27',
'custom_str1' => 'booking_payment',
];
//
// Generate Signature
//
$paramString = '';
foreach ($data as $key => $value) {
if ($value === '') {
continue;
}
}
$paramString = rtrim($paramString, '&');
if ($passphrase !== '') {
$paramString .= '&passphrase=' . urlencode($passphrase); }
$signature = md5($paramString);
$data['signature'] = $signature;
echo "==============================\n";
echo "PARAM STRING\n";
echo "==============================\n";
echo $paramString . "\n\n";
echo "==============================\n";
echo "SIGNATURE\n";
echo "==============================\n";
echo $signature . "\n\n";
//
// Send to PayFast
//
$ch = curl_init('https://s...content-available-to-author-only...o.za/eng/process');
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/x-www-form-urlencoded'
],
]);
if ($response === false) {
}
$headers = substr($response, 0, $headerSize); $body = substr($response, $headerSize);
echo "==============================\n";
echo "HTTP STATUS\n";
echo "==============================\n";
echo $httpCode . "\n\n";
echo "==============================\n";
echo "HEADERS\n";
echo "==============================\n";
echo $headers . "\n";
echo "==============================\n";
echo "BODY\n";
echo "==============================\n";
echo $body;
PD9waHAKCiRwYXNzcGhyYXNlID0gJ3Jlc2Vydml0NDMyMSc7CgokZGF0YSA9IFsKICAgICdtZXJjaGFudF9pZCcgICAgICA9PiAnMTAwNTA5MzcnLAogICAgJ21lcmNoYW50X2tleScgICAgID0+ICc5NzhuYnR1YzdibmpjJywKICAgICdyZXR1cm5fdXJsJyAgICAgICA9PiAnaHR0cDovLzEyNy4wLjAuMTo4MDAwL2FwaS9wYXltZW50L3JldHVybicsCiAgICAnY2FuY2VsX3VybCcgICAgICAgPT4gJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9hcGkvcGF5bWVudC9jYW5jZWwnLAogICAgJ25vdGlmeV91cmwnICAgICAgID0+ICdodHRwOi8vMTI3LjAuMC4xOjgwMDAvYXBpL3BheW1lbnQvbm90aWZ5JywKICAgICduYW1lX2ZpcnN0JyAgICAgICA9PiAnU3RoZW1iaXNvJywKICAgICduYW1lX2xhc3QnICAgICAgICA9PiAnTWF0aGVidWxhJywKICAgICdlbWFpbF9hZGRyZXNzJyAgICA9PiAnc21hdGhlYnVsYS5zYjExQGdtYWlsLmNvbScsCiAgICAnY2VsbF9udW1iZXInICAgICAgPT4gJzA3MjE0OTY2ODcnLAogICAgJ21fcGF5bWVudF9pZCcgICAgID0+ICcyNycsCiAgICAnYW1vdW50JyAgICAgICAgICAgPT4gJzEwMC4wMCcsCiAgICAnaXRlbV9uYW1lJyAgICAgICAgPT4gJ0Jvb2tpbmcgZm9yIFlvZ2EgQ2xhc3MnLAogICAgJ2l0ZW1fZGVzY3JpcHRpb24nID0+ICdTZXJ2aWNlIGJvb2tpbmcgLSBEYXRlOiAyMDI2LTA3LTA2JywKICAgIC8vJ3JlZmVyZW5jZScgICAgICA9PiAnQk9PS0lORy00MS1QQVlNRU5ULTI3JywgLy8gTGVhdmUgY29tbWVudGVkIGZvciBub3cKICAgICdjdXN0b21faW50MScgICAgICA9PiAnMjcnLAogICAgJ2N1c3RvbV9zdHIxJyAgICAgID0+ICdib29raW5nX3BheW1lbnQnLApdOwoKLy8KLy8gR2VuZXJhdGUgU2lnbmF0dXJlCi8vCiRwYXJhbVN0cmluZyA9ICcnOwoKZm9yZWFjaCAoJGRhdGEgYXMgJGtleSA9PiAkdmFsdWUpIHsKCiAgICBpZiAoJHZhbHVlID09PSAnJykgewogICAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgICRwYXJhbVN0cmluZyAuPSAka2V5IC4gJz0nIC4gdXJsZW5jb2RlKHRyaW0oJHZhbHVlKSkgLiAnJic7Cn0KCiRwYXJhbVN0cmluZyA9IHJ0cmltKCRwYXJhbVN0cmluZywgJyYnKTsKCmlmICgkcGFzc3BocmFzZSAhPT0gJycpIHsKICAgICRwYXJhbVN0cmluZyAuPSAnJnBhc3NwaHJhc2U9JyAuIHVybGVuY29kZSgkcGFzc3BocmFzZSk7Cn0KCiRzaWduYXR1cmUgPSBtZDUoJHBhcmFtU3RyaW5nKTsKCiRkYXRhWydzaWduYXR1cmUnXSA9ICRzaWduYXR1cmU7CgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiI7CmVjaG8gIlBBUkFNIFNUUklOR1xuIjsKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iOwplY2hvICRwYXJhbVN0cmluZyAuICJcblxuIjsKCmVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIjsKZWNobyAiU0lHTkFUVVJFXG4iOwplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiI7CmVjaG8gJHNpZ25hdHVyZSAuICJcblxuIjsKCi8vCi8vIFNlbmQgdG8gUGF5RmFzdAovLwoKJGNoID0gY3VybF9pbml0KCdodHRwczovL3MuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLm8uemEvZW5nL3Byb2Nlc3MnKTsKCmN1cmxfc2V0b3B0X2FycmF5KCRjaCwgWwogICAgQ1VSTE9QVF9QT1NUID0+IHRydWUsCiAgICBDVVJMT1BUX1BPU1RGSUVMRFMgPT4gaHR0cF9idWlsZF9xdWVyeSgkZGF0YSksCiAgICBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSID0+IHRydWUsCiAgICBDVVJMT1BUX0hFQURFUiA9PiB0cnVlLAogICAgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiA9PiBmYWxzZSwKICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gdHJ1ZSwKICAgIENVUkxPUFRfSFRUUEhFQURFUiA9PiBbCiAgICAgICAgJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJwogICAgXSwKXSk7CgokcmVzcG9uc2UgPSBjdXJsX2V4ZWMoJGNoKTsKCmlmICgkcmVzcG9uc2UgPT09IGZhbHNlKSB7CiAgICBkaWUoY3VybF9lcnJvcigkY2gpKTsKfQoKJGh0dHBDb2RlID0gY3VybF9nZXRpbmZvKCRjaCwgQ1VSTElORk9fSFRUUF9DT0RFKTsKJGhlYWRlclNpemUgPSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19IRUFERVJfU0laRSk7CgokaGVhZGVycyA9IHN1YnN0cigkcmVzcG9uc2UsIDAsICRoZWFkZXJTaXplKTsKJGJvZHkgPSBzdWJzdHIoJHJlc3BvbnNlLCAkaGVhZGVyU2l6ZSk7CgpjdXJsX2Nsb3NlKCRjaCk7CgplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiI7CmVjaG8gIkhUVFAgU1RBVFVTXG4iOwplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiI7CmVjaG8gJGh0dHBDb2RlIC4gIlxuXG4iOwoKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iOwplY2hvICJIRUFERVJTXG4iOwplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiI7CmVjaG8gJGhlYWRlcnMgLiAiXG4iOwoKZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iOwplY2hvICJCT0RZXG4iOwplY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiI7CmVjaG8gJGJvZHk7Cg==