Get Invoice Details
After placing an invoice, you can know about the status of your invoice using invoice Status query API
In this page, you will learn how to make a request to inquire about the status of an order.
Get Invoice Details
To get your e-invoice details, you need to request using the POST method in our sandbox environment.
-Here is the request URL:
https://sandboxapi.opaycheckout.com/api/v1/international/invoice/getInvoiceDetails
-Once you have a fully tested payment flow and you are ready for production, use the following production API endpoint URL instead
https://api.opaycheckout.com/api/v1/international/invoice/getInvoiceDetails
-Request Parameters:
- Header: Authorization(API Calls Signature), MerchantId
- Json object containing the request information:
Authorization : Bearer {signature}
MerchantId : 256612345678901
{
"invoiceNo":"20459544",
}
HTTP POST Parameters
-Here is a detailed description for the parameters you need to complete the POST request:
-An example of invoice details request is as follows :
class GetInvoiceDetailsController
{
private $secretkey;
private $merchantId;
private $url;
public function __construct() {
$this->merchantId = '256612345678901';
$this->secretkey = 'OPAYPRV16357783346230.07653446106051542';
$this->url = 'https://sandboxapi.opaycheckout.com/api/v1/international/invoice/getInvoiceDetails';
}
public function test(){
$data = [
'invoiceNo' => '20839428'
]
;
$data2 = (string) json_encode($data,JSON_UNESCAPED_SLASHES);
$auth = $this->auth($data2);
$header = ['Content-Type:application/json', 'Authorization:Bearer '. $auth, 'MerchantId:'.$this->merchantId];
$response = $this->http_post($this->url, $header, json_encode($data));
$result = $response?$response:null;
return $result;
}
private function http_post ($url, $header, $data) {
if (!function_exists('curl_init')) {
throw new Exception('php not found curl', 500);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$response = curl_exec($ch);
$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error=curl_error($ch);
curl_close($ch);
if (200 != $httpStatusCode) {
print_r("invalid httpstatus:{$httpStatusCode} ,response:$response,detail_error:" . $error, $httpStatusCode);
}
return $response;
}
public function auth ( $data ) {
$secretKey = $this->secretkey;
$auth = hash_hmac('sha512', $data, $secretKey);
return $auth;
}
}
const request = require('request');
var sha512 = require('js-sha512');
const formData = {"invoiceNo":"20464538"};
var privateKey = "OPAYPRV16357783346230.07653446106051542"
var hash = sha512.hmac.create(privateKey);
hash.update(JSON.stringify(formData));
hmacsignature = hash.hex();
console.log(hmacsignature)
request({
url: 'https://sandboxapi.opaycheckout.com/api/v1/international/invoice/getInvoiceDetails',
method: 'POST',
headers: {
'MerchantId': '256612345678901',
'Authorization': 'Bearer '+hmacsignature
},
json: true,
body: formData
}, function (error, response, body) {
console.log('body: ')
console.log(body)
}
)
curl --location --request POST 'https://sandboxapi.opaycheckout.com/api/v1/international/invoice/getInvoiceDetails' \
--header 'MerchantId: 256612345678901' \
--header 'Authorization: Bearer 172b4102c8df516757eafd9d194d176e0b59dc6a8ae879d23493dbc27e9f48d755eb0880cc1b7ce665fc606fcccc227075d5d932f6053585b2381ed13eb62957' \
--header 'Content-Type: application/json' \
--data-raw '{
"invoiceNo": "20464188"
}'
import com.google.gson.Gson;
import org.apache.commons.codec.binary.Hex;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
public class GetInvoiceDetails {
/** */
private static final String privateKey = "OPAYPRV16357783346230.07653446106051542";
/** */
private static final String endpoint = "https://sandboxapi.opaycheckout.com";
/** */
private static final String merchantId = "256612345678901";
public static void main(String[] args) throws Exception {
String addr = endpoint + "/api/v1/international/invoice/getInvoiceDetails";
Gson gson = new Gson();
HashMap order = new HashMap<>();
order.put("invoiceNo","20839397");
String requestBody = gson.toJson(order);
System.out.println("--request:");
System.out.println(requestBody);
String oPaySignature = hmacSHA512(requestBody, privateKey);
System.out.println("--signature:");
System.out.println(oPaySignature);
URL url = new URL(addr);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json; utf-8");
con.setRequestProperty("Authorization", "Bearer "+oPaySignature);
con.setRequestProperty("MerchantId", merchantId);
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
byte[] input = requestBody.getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8));
StringBuilder response = new StringBuilder();
String responseLine = null;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
System.out.println("--response:");
System.out.println(response.toString());
//close your stream and connection
}
public static String hmacSHA512(final String data, final String secureKey) throws Exception{
byte[] bytesKey = secureKey.getBytes();
final SecretKeySpec secretKey = new SecretKeySpec(bytesKey, "HmacSHA512");
Mac mac = Mac.getInstance("HmacSHA512");
mac.init(secretKey);
final byte[] macData = mac.doFinal(data.getBytes());
byte[] hex = new Hex().encode(macData);
return new String(hex, StandardCharsets.UTF_8);
}
}
Order Status Query Response
-Response Parameters:
the parameters contained in the response received whenever you call the Order Status Query API as a JSON Object.
{
"code": "00000",
"message": "SUCCESSFUL",
"data": {
"invoiceNo": "20459544",
"status": "Unpaid",
"invoiceLink": "https://cashier.opaycheckout.com?vid=8d0abb66f8e34ed3bd8daa68bac16eef",
"invoiceName": "OPay Test Invoice",
"description": "test invoice description",
"dueDate": 1635300881,
"amount": {
"total": 20300,
"currency": "EGP"
},
"products": [
{
"productNo": "10001",
"merchantProductNo": "1000000570",
"name": "product1",
"image": "https://www.yourproduct.com/product1.png",
"description": "product1 description",
"price": {
"total": 6700,
"currency": "EGP"
},
"quantity": 1,
},
{
"productNo": "10002",
"merchantProductNo": "1000000571",
"name": "product2",
"image": "https://www.yourproduct.com/product2.png",
"description": "product2 description",
"price": {
"total": 6800,
"currency": "EGP"
},
"quantity": 2,
}
],
"customer": {
"name": "OPay Test Name",
"mobile": "+201066668888",
"email": "test@email.com",
},
"country": "EG",
"merchantId": "256612345678901",
"lang": "EN",
"notifyMethod": "SMS",
"paymentType": "opaylink",
"totalServiceFee": {
"total": 21,
"currency": "EGP"
}
}
}
-Here is a detailed description for the parameters received in the response:
Parameter | type | Description | example | ||
---|---|---|---|---|---|
code | String |
Transaction response code. | 00000 | ||
message | String |
Transaction response information. | SUCCESSFUL | ||
invoiceNo | String |
Invoice ID. | 20459544 | ||
status | String |
Invoice status. | unpaid | ||
invoiceLink | String |
Invoice payment link. | https://cashier.opaycheckout.com?vid=1d400b9adbdd42c7825847bc5ed8ff50 | ||
invoiceName | String |
Invoice Name. | OPay Test Invoice | ||
description | String |
Invoice description. | OPay Test Invoice description | ||
amount
|
|||||
total | Long |
Invoice Amount. | 10000 (cents) | ||
currency | String |
Currency type. | EGP | ||
products
|
|||||
productNo | String |
Product ID in OPay system. | 10001 | ||
merchantProductNo | String |
Merchant Product ID in merchant system. | 1000000570 | ||
name | String |
Product name. | Product X | ||
image | String |
Product image url. | https://www.yourproduct.com/product1.png | ||
description | String |
Product description. | Product X description | ||
price
|
|||||
total | Long |
Invoice Amount. | 10000 (cents) | ||
currency | String |
Currency type. | EGP | ||
quantity | Integer |
Product quantity. | 5 | ||
customer
|
|||||
name | String |
Customer name. | Test Name | ||
mobile | String |
Customer mobile. | +2010xxxxxxxx | ||
String |
Customer email. | email@domain.com | |||
country | String |
Merchant country code. | EG | ||
merchantId | String |
Merchant ID in OPay system. | 256612345678901 | ||
lang | String |
Language of Email and SMS notification.Value: EN or AR. Default language is EN. | EN or AR | ||
notifyMethod | String |
Invoice notification method. | BOTH,EMAIL or SMS .Default is BOTH. | ||
paymentType | String |
Invoice payment method. | opaylink | ||
totalServiceFee
|
|||||
total | Long |
The calculated total service fee. | 100 piastres = 1 EGP (cent unit). | ||
currency | String |
Currency type. | EGP |
Error Handling
After submitting an API call to OPay, you receive a response back to inform you that
your request was received and processed. A successful OPay API should return a status code 00
,
meanwhile, in a situation where any payment processing error occurred, you will receive an error code with a
message to describe the reason of the error. A sample error response can be found below.
{
"code": "20000",
"message": "Duplicate merchant order number",
"data": null
}
Depending on the HTTP status code of the response, you should build some logic to handle any errors that a request or the system may return. A list of possible potential error codes that you may receive can be found below. A full list of all possible error codes can be found in the Error Codes section.
Error Code | Error Message |
---|---|
02001 | |
Invalid characters in mobile number. | |
Mobile number format should be like this +201088889999 | |
Merchant Product ID does not exist, please create it in merchant dashboard first. | |
Please merge the same products. | |
Products is required. | |
Invoice amount can not be 0 |