curl --request POST \
--url https://uat-interface.haipay.asia/ghs/collect/apply \
--header 'Content-Type: application/json' \
--data '
{
"appId": 1054,
"orderId": "GHSCOLLECT001",
"amount": "100.00",
"payType": "EWALLET",
"inBankCode": "operator-code",
"phone": "233241234567",
"callBackUrl": "https://shop.merchant.com/payment/success",
"notifyUrl": "https://api.merchant.com/webhooks/haipay",
"sign": "signature"
}
'import requests
url = "https://uat-interface.haipay.asia/ghs/collect/apply"
payload = {
"appId": 1054,
"orderId": "GHSCOLLECT001",
"amount": "100.00",
"payType": "EWALLET",
"inBankCode": "operator-code",
"phone": "233241234567",
"callBackUrl": "https://shop.merchant.com/payment/success",
"notifyUrl": "https://api.merchant.com/webhooks/haipay",
"sign": "signature"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const url = 'https://uat-interface.haipay.asia/ghs/collect/apply';
const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
appId: 1054,
orderId: 'GHSCOLLECT001',
amount: '100.00',
payType: 'EWALLET',
inBankCode: 'operator-code',
phone: '233241234567',
callBackUrl: 'https://shop.merchant.com/payment/success',
notifyUrl: 'https://api.merchant.com/webhooks/haipay',
sign: 'signature'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://uat-interface.haipay.asia/ghs/collect/apply",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'appId' => 1054,
'orderId' => 'GHSCOLLECT001',
'amount' => '100.00',
'payType' => 'EWALLET',
'inBankCode' => 'operator-code',
'phone' => '233241234567',
'callBackUrl' => 'https://shop.merchant.com/payment/success',
'notifyUrl' => 'https://api.merchant.com/webhooks/haipay',
'sign' => 'signature'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.post("https://uat-interface.haipay.asia/ghs/collect/apply")
.header("Content-Type", "application/json")
.body("{\n \"appId\": 1054,\n \"orderId\": \"GHSCOLLECT001\",\n \"amount\": \"100.00\",\n \"payType\": \"EWALLET\",\n \"inBankCode\": \"operator-code\",\n \"phone\": \"233241234567\",\n \"callBackUrl\": \"https://shop.merchant.com/payment/success\",\n \"notifyUrl\": \"https://api.merchant.com/webhooks/haipay\",\n \"sign\": \"signature\"\n}")
.asString();Ghana — GHS Collection Application
Ghana — GHS Collection Application endpoint (POST /ghs/collect/apply) with request parameters including orderId, amount, payType, phone, signature verification, and response status.
curl --request POST \
--url https://uat-interface.haipay.asia/ghs/collect/apply \
--header 'Content-Type: application/json' \
--data '
{
"appId": 1054,
"orderId": "GHSCOLLECT001",
"amount": "100.00",
"payType": "EWALLET",
"inBankCode": "operator-code",
"phone": "233241234567",
"callBackUrl": "https://shop.merchant.com/payment/success",
"notifyUrl": "https://api.merchant.com/webhooks/haipay",
"sign": "signature"
}
'import requests
url = "https://uat-interface.haipay.asia/ghs/collect/apply"
payload = {
"appId": 1054,
"orderId": "GHSCOLLECT001",
"amount": "100.00",
"payType": "EWALLET",
"inBankCode": "operator-code",
"phone": "233241234567",
"callBackUrl": "https://shop.merchant.com/payment/success",
"notifyUrl": "https://api.merchant.com/webhooks/haipay",
"sign": "signature"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const url = 'https://uat-interface.haipay.asia/ghs/collect/apply';
const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
appId: 1054,
orderId: 'GHSCOLLECT001',
amount: '100.00',
payType: 'EWALLET',
inBankCode: 'operator-code',
phone: '233241234567',
callBackUrl: 'https://shop.merchant.com/payment/success',
notifyUrl: 'https://api.merchant.com/webhooks/haipay',
sign: 'signature'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://uat-interface.haipay.asia/ghs/collect/apply",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'appId' => 1054,
'orderId' => 'GHSCOLLECT001',
'amount' => '100.00',
'payType' => 'EWALLET',
'inBankCode' => 'operator-code',
'phone' => '233241234567',
'callBackUrl' => 'https://shop.merchant.com/payment/success',
'notifyUrl' => 'https://api.merchant.com/webhooks/haipay',
'sign' => 'signature'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.post("https://uat-interface.haipay.asia/ghs/collect/apply")
.header("Content-Type", "application/json")
.body("{\n \"appId\": 1054,\n \"orderId\": \"GHSCOLLECT001\",\n \"amount\": \"100.00\",\n \"payType\": \"EWALLET\",\n \"inBankCode\": \"operator-code\",\n \"phone\": \"233241234567\",\n \"callBackUrl\": \"https://shop.merchant.com/payment/success\",\n \"notifyUrl\": \"https://api.merchant.com/webhooks/haipay\",\n \"sign\": \"signature\"\n}")
.asString();Secret Key & Private Key (Generate Signature)
Related Topics
- Ghana Payment API
- HaiPay API Reference Overview
- HaiPay Configuration and Signature Guide
- Ghana — GHS Collection Query (POST /ghs/collect/query)
- Handle Asynchronous Notifications and Verify Signatures
- Look Up Collection Payment Types and Codes (payType)
Body
Business ID obtained from the backend; it must match the URL currency
Unique merchant order ID, up to 48 characters
48Transaction amount in GHS, up to 2 decimal places; subject to the merchant backend business configuration
^((([1-9]\d*)(\.\d{1,4})?)|(0\.(?!0+$)\d{1,4}))$Payment type; only EWALLET is supported
EWALLET Payer phone number: 12 digits starting with 233, without a plus sign
^233\d{9}$Signature
Mobile Money operator payment code supported by the merchant backend payment-code configuration
Payer name
Payer email
Redirect URL after successful payment
Redirect URL after failed payment
Asynchronous notification URL
Transaction title, product name, or payment reason
Detailed remark
Unique user identifier
64^[a-zA-Z0-9\-~!@#$%&*()_]+$
