GHS Collection Application
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://merchant.example.com/success",
"notifyUrl": "https://merchant.example.com/notify",
"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://merchant.example.com/success",
"notifyUrl": "https://merchant.example.com/notify",
"sign": "signature"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)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://merchant.example.com/success',
notifyUrl: 'https://merchant.example.com/notify',
sign: 'signature'
})
};
fetch('https://uat-interface.haipay.asia/ghs/collect/apply', options)
.then(res => res.json())
.then(res => console.log(res))
.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://merchant.example.com/success',
'notifyUrl' => 'https://merchant.example.com/notify',
'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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://uat-interface.haipay.asia/ghs/collect/apply"
payload := strings.NewReader("{\n \"appId\": 1054,\n \"orderId\": \"GHSCOLLECT001\",\n \"amount\": \"100.00\",\n \"payType\": \"EWALLET\",\n \"inBankCode\": \"operator-code\",\n \"phone\": \"233241234567\",\n \"callBackUrl\": \"https://merchant.example.com/success\",\n \"notifyUrl\": \"https://merchant.example.com/notify\",\n \"sign\": \"signature\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}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://merchant.example.com/success\",\n \"notifyUrl\": \"https://merchant.example.com/notify\",\n \"sign\": \"signature\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://uat-interface.haipay.asia/ghs/collect/apply")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"appId\": 1054,\n \"orderId\": \"GHSCOLLECT001\",\n \"amount\": \"100.00\",\n \"payType\": \"EWALLET\",\n \"inBankCode\": \"operator-code\",\n \"phone\": \"233241234567\",\n \"callBackUrl\": \"https://merchant.example.com/success\",\n \"notifyUrl\": \"https://merchant.example.com/notify\",\n \"sign\": \"signature\"\n}"
response = http.request(request)
puts response.read_body{
"status": "<string>",
"error": "<string>",
"msg": "<string>",
"data": {
"orderId": "<string>",
"orderNo": "<string>",
"amount": "<string>",
"exchangeRate": "<string>",
"orderAmount": "<string>",
"payUrl": "<string>",
"description": "<string>",
"expiryPeriod": 123,
"sign": "<string>"
}
}Ghana
GHS Collection Application
POST
/
ghs
/
collect
/
apply
GHS Collection Application
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://merchant.example.com/success",
"notifyUrl": "https://merchant.example.com/notify",
"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://merchant.example.com/success",
"notifyUrl": "https://merchant.example.com/notify",
"sign": "signature"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)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://merchant.example.com/success',
notifyUrl: 'https://merchant.example.com/notify',
sign: 'signature'
})
};
fetch('https://uat-interface.haipay.asia/ghs/collect/apply', options)
.then(res => res.json())
.then(res => console.log(res))
.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://merchant.example.com/success',
'notifyUrl' => 'https://merchant.example.com/notify',
'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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://uat-interface.haipay.asia/ghs/collect/apply"
payload := strings.NewReader("{\n \"appId\": 1054,\n \"orderId\": \"GHSCOLLECT001\",\n \"amount\": \"100.00\",\n \"payType\": \"EWALLET\",\n \"inBankCode\": \"operator-code\",\n \"phone\": \"233241234567\",\n \"callBackUrl\": \"https://merchant.example.com/success\",\n \"notifyUrl\": \"https://merchant.example.com/notify\",\n \"sign\": \"signature\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}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://merchant.example.com/success\",\n \"notifyUrl\": \"https://merchant.example.com/notify\",\n \"sign\": \"signature\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://uat-interface.haipay.asia/ghs/collect/apply")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"appId\": 1054,\n \"orderId\": \"GHSCOLLECT001\",\n \"amount\": \"100.00\",\n \"payType\": \"EWALLET\",\n \"inBankCode\": \"operator-code\",\n \"phone\": \"233241234567\",\n \"callBackUrl\": \"https://merchant.example.com/success\",\n \"notifyUrl\": \"https://merchant.example.com/notify\",\n \"sign\": \"signature\"\n}"
response = http.request(request)
puts response.read_body{
"status": "<string>",
"error": "<string>",
"msg": "<string>",
"data": {
"orderId": "<string>",
"orderNo": "<string>",
"amount": "<string>",
"exchangeRate": "<string>",
"orderAmount": "<string>",
"payUrl": "<string>",
"description": "<string>",
"expiryPeriod": 123,
"sign": "<string>"
}
}Secret Key & Private Key (Generate Signature)
Related Topics
Body
application/json
Business ID obtained from the backend; it must match the URL currency
Unique merchant order ID, up to 48 characters
Maximum string length:
48Transaction amount in GHS, up to 2 decimal places; subject to the merchant backend business configuration
Pattern:
^((([1-9]\d*)(\.\d{1,4})?)|(0\.(?!0+$)\d{1,4}))$Payment type; only EWALLET is supported
Available options:
EWALLET Payer phone number: 12 digits starting with 233, without a plus sign
Pattern:
^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
Maximum string length:
64Pattern:
^[a-zA-Z0-9\-~!@#$%&*()_]+$Last modified on September 14, 2026

