diff --git a/zinipay.php/zinipay.php b/zinipay.php/zinipay.php new file mode 100644 index 0000000..3a8757e --- /dev/null +++ b/zinipay.php/zinipay.php @@ -0,0 +1,85 @@ + ["Type"=>"System","Value"=>"ZiniPay"], + "debug" => ["FriendlyName"=>"Enable Debug Logging","Type"=>"yesno","Value"=>"0"] + ]; +} + +function zinipay_validate_config($params = []) { + // No API key field since it is hardcoded + return []; +} + +function zinipay_link($params) { + $debug = ($params['debug'] ?? '') == 'on'; + + $invoiceid = $params['invoiceid']; + $amount = number_format($params['amount'], 2, '.', ''); + $description = "Invoice #$invoiceid"; + + $systemurl = rtrim($params['systemurl'], '/'); + $return_url = $systemurl . "/system/paymentgateway/callback/zinipay_return.php?invoiceid=" . urlencode($invoiceid); + $notify_url = $systemurl . "/system/paymentgateway/callback/zinipay.php"; + + // Live-only endpoint + $endpoint = "https://secure.zinipay.com/payment/"; + + // Hardcoded API key + $apiKey = "40369d7a7cf89e1dbbd97e1ae47b9ea15af0a49264fcdbcf"; + + $payload = [ + 'redirect_url' => $return_url, + 'cancel_url' => $return_url . '&status=cancel', + 'webhook_url' => $notify_url, + 'metadata' => ['invoiceId' => $invoiceid], + 'amount' => $amount, + 'description' => $description + ]; + + if ($debug) zinipay_log("Create Payment Request", ['endpoint'=>$endpoint,'payload'=>$payload]); + + $ch = curl_init($endpoint); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload)); + curl_setopt($ch, CURLOPT_HTTPHEADER, [ + 'Content-Type: application/json', + 'zini-api-key: ' . $apiKey + ]); + + $response = curl_exec($ch); + $error = curl_error($ch); + curl_close($ch); + + if ($error) { + zinipay_log("cURL Error", ['error'=>$error]); + return "Error initiating payment. Check logs."; + } + + $data = json_decode($response, true); + + if ($debug) zinipay_log("Create Payment Response", ['response'=>$data]); + + if (isset($data['url'])) { + return ""; + } else { + $msg = $data['message'] ?? 'Failed to create payment request'; + zinipay_log("Payment Creation Failed", ['response'=>$data]); + return "Payment failed: {$msg}"; + } +} + +function zinipay_log($title, $data = []) { + $logDir = realpath(__DIR__ . '/../../storage/logs') ?: (__DIR__ . '/../../storage/logs'); + if (!is_dir($logDir)) @mkdir($logDir, 0777, true); + $logFile = $logDir . '/gateway_zinipay.log'; + $time = date("Y-m-d H:i:s"); + $entry = "[$time] $title\n" . print_r($data,true) . "\n-------------------\n"; + @file_put_contents($logFile, $entry, FILE_APPEND | LOCK_EX); +}