ECR Api Integration
Signatures
To ensure the security of communication, each request must be signed with a digital signature and the signature verified at the receiver.
- Signature Generation
- To further secure the communication, each request must be signed using a digital signature. The signature is generated by hashing the request parameters using a secret key provided to the client.
- The signature ensures the integrity and authenticity of the request, protecting it from tampering and unauthorized access.
- Signature Verification
- Upon receipt of the request, PayCloud verifies the signature to ensure that the request is from an authorized application and that the request has not been changed.
- If the signature verification fails, the request will be rejected with an appropriate error message.
1. Signature Generation Process
When the application sends a request to PayCloud, signature generation is required.
1.1 Constructing the String to be Signed
- Select Parameters for Signing All parameters, excluding those with NULL or empty values, need to be signed. For example, in the following parameter array, description is empty and does not need to be included in the signing process:
- Parameter Sorting Sort the parameters by their names in ASCII code order. Sort from 'a' to 'z'; if the first letters are the same, sort by the second letter, and so on. Different programming languages have corresponding sorting functions. For example, in Java, you can use Collections.sort(keys). The sorted array is as follows:
- Concatenate the Target String Based on the sorted parameters, concatenate the parameters and values using the “&” character:
- Handling Nested JSON Objects If parameters contain nested JSON objects, convert the JSON values to strings before signing. For example, the following JSON object:
- should be converted to the following format for signing:
String [] parameters={
"app_id=wzxxxxxxxxxx",
"method=pay.orderquery",
"format=JSON",
"charset=UTF-8",
"sign_type=RSA2",
"version=1.0",
"timestamp=1908901287917",
"merchant_no=M100001876",
"out_trade_no=TB20181030000875",
"description="
};
String[] parameters={
"app_id=wzxxxxxxxxxx",
"charset=UTF-8",
"format=JSON",
"merchant_no=M100001876",
"method=pay.orderquery",
"out_trade_no=TB20181030000875",
"sign_type=RSA2",
"timestamp=1908901287917",
"version=1.0"
};
app_id=wzxxxxxxxxxx&charset=UTF8&format=JSON&merchant_no=M100001876&method=pay.orderquery&out_trade_no=TB20181030000875&sign_type=RSA2×tamp=1908901287917&version=1.0
{
"key1":"value1",
"key2":"value2",
"key3":{
"subkey31":"subvalue31",
"subkey32":"subvalue32"
}
{
"key1":"value1",
"key2":"value2",
"key3":"{\"subkey31\":\"subvalue31\",\"subkey32\":\"subvalue32\"}"
}
1.2 Generating the Signature Using RSA2
For the constructed string from the previous step, use the application's API private key appRsaPrivateKey and generate the signature using the SHA256WithRSA algorithm and perform Base64 encoding.
- JAVA Sample Code
- Data Example
- My PKCS8 private key is:
- My PKCS1 private key is:
- The string to be signed is:
- The result of calculating the signature using SHA256WithRSA is:
- My public key is:
- Signature Verification Result:
sign=base64Encode(sha256withrsa(<Content_To_Be_Signed), <appRsaPrivateKey));
You can use the data from the following example to verify if the signature result is calculated correctly:
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
DAQAB
true
1.3 Adding the Signature to the HTTP Request
- Add the generated signature to the HTTP request's body parameter sign. The final request should look as follows:
- Signature Verification Process When the application receives a request response or a notification request sent by PayCloud, signature verification is required. Steps to verify the Signature
- Obtain the Gateway Public Key: Use the gateway's public key (gatewayRsaPublicKey) to verify the signature.
- Construct the Content to be Verified: This content (content_to_be_verified) is the same as the content constructed during the signature creation process.
- Extract the Signature: Extract the signature from the response body or asynchronous notification message body. The parameter keyword is sign.
- Verify the Signature: Use the SHA256WithRSA algorithm to verify the signature.
{
"app_id": "wzxxxxxxxxxx",
"charset": "UTF-8",
"format": "JSON",
"merchant_no": "M100001876",
"method": "pay.orderquery",
"out_trade_no": "TB20181030000875",
"sign_type": "RSA2",
"timestamp": "1908901287917",
"version": "1.0",
"sign":"F1kKldW4u0xdSzMqehHLtrX6ntK6gjlZ1Nu1IwcCYAvGe+K9/+9VZymbyNjw038ZcxGspnDqcz7+UnqqJ8gBPpMZ4yZb/NdS5TNqruuSooj2jgPk/PlM+uFH97NlMDuUdGVaflujhcaG9irkq48PHQ1+swaELq7mKov7NU155k7bRPWjNzIggxF5Sgh3qcOBpeWVxp/WghRsjfO4O0tRohiOK5pdcAPkj5VlunUgW0/Yv/uC9sV8dodLloUNWG6W0c/pEJnsG48pLLmhag5tzKm7nbHHUrRyLv37+qAuG9S5eZvKUaVbuFwxP2ekSLHRRIQVlBeJbuqfHRQXxzZaJw=="
}
sha256withrsa_verify(base64Decode(<sign), <Content_To_Be_Validated,<gatewayRsaPublicKey)};
PayCloud Open API for Sadad
ECR Create Order
- POST
Sandbox
https://open-uat.sadadpos.com/api/entry/ecrorder
Live
https://open.sadadpos.com/api/entry/ecrorder
The merchant backend calls this API and the PayCloud server sends a message to the "SADAD POS" application on the payment terminal. This activates the application, displays the order for confirmation by the cashier and guides the user through the payment process. For more information, see Cross-terminal Application Integration - Cloud Mode
- Java
private static final String APP_RSA_PRIVATE_KEY = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDKZdWnnYDi7hfKFgzzqvF9WD962M54PMRuyIVXIuLMzb/PTtAW1CUCSTIH2kJ+zyQLMA9Xgiz3B7Aht0HyBfVB6v3ouaULXkI3k60yWIlKbgHDkAUdTPMUOgKW/ptF0jzO+TFtihIFo4EwSkQl3rb82R/qObJ+48uPVnzi1OdR+m9sNvoDfANY3u9JxSJw4ond2YVw4Arn9REnEgY4JDjkVEfjmIFzakFZsohLxNFNjutfmvypqiZh4GcKQRTNra+z5X8fCIqdB1y99IJ0+xU5OjmA6XB12rhUJjnIXKE/woOm4iwfbTRW6gpYgnMf177DSrUi7+KckwHgRLXWx3CtAgMBAAECggEAbxR0rglDM0h4xfBUK2cmIiTMsh9LMbIoHKTwiWIcF0rUenJGwkCsDxUc4DJpTC9jGMDHqr9G7kzJ3bc1+h5K/GJ7973rVtHkhZwG8hqlPrQhQ7NHG02gGvm7ciNKFIfN18nr1rJwMagKvvYDcMVKqHqBiYsg64MZtRFCeTtfuR0+bDNBwl15soyQQizg9M+TiFrrzlsu05h97RDn2kHM7ySQUGELH+d6VN6KIR/zMWXCPP40KJFn0Icnd+8rg3+rwk82zlAwZyi/bEUYRNo4hIILi5xoAc38/IDv0iRJSMuQBs+VnTsJV/xeeWz4Gomttjqg5ci6QDq0SSfPxgBgAQKBgQD2FBA48LVxe5KW8G4dNA5B/CLr6PDreMcTr4ABdR+ajPuwR5pFOzSLOgNYusf6XguiiiIQOQhs4tUPqlXi7BpryqRZpnq0ViGcJfo9iJybg9Tpu7AK9X9Lvd6DDwXhkoNxcz60dnwPBDwDuOT4RPaU+rFr4k9zocyqbM+qE+j8UQKBgQDSjupMiPzN4OXVgs/wC0m+md3bvhc6bqwLF850DlZVHDtxbLlBrdQLVM18GG6S8LOoPrGDZTRIvgbX1jEXjl0tk6c7ICJYKRwjvx6tnwcI+jelT2quKz8w1vpqhFsb01yAwuaudVmj0i8BOt1a6lq6Ls2BgXgevrmrPQ0Cx8PDnQKBgF9qwC+UBocOZ3TnnYrtWGn1noTjOifUGT1k27m09KA08pMT8JnPrzwdLpcFNe268cAA19x6gO3Xts3wOoVXD5ekZ73rc8DhdP7bKwEZK8CRicln4YceUlHIObOP67Pf39/p0/KdztTzy2GWHBK4ivSRkKJIio5HutiKgKtuNPVBAoGADIYHlYnIT46C3RIswABL4JRSR9GknAsdHIPL+ccoh2NofbSTyD5IkGv41Nq3KPI8HVOtRz1rwK/cxFWvEdGb5SwVFEUzBb9cNxwU/QqqZnRLfv+cPsO/vG3s8wzwRlVp+Raeld3Q+Rd1SENyCwhJYS2Ld5p1xI5fiLnW3kV3dVkCgYASYlU26SpywOCue6qs4ztzRvqnQgWWrOl7R+PtaJvidOGlinNWutr0DQU/73MBnkJdKaXBBLHpxrAxwF6x3t2w707H4K3sWhoKAFMVLr6h3Xdz9MYlRk0pFXLatfn0thYeUZjPm8wacaC5N7gNCRqcO7eJaJpledkM8CRFQzY1aw==";
private static final String GATEWAY_RSA_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAplNGveqcnfEfoIX5Db2DDZ6aLOC5jkGFItwi0NcZBBxj6scwg91/wZbp6DzPk/GKO6o7Za2pbKFPqpE4EDXbNT6TvRApyQomDd9FMlnDkNvjv5Rlvp/uewaQfAAGkeFex0Fm03bWAuC1iDJxcJTT1vIc1g7EBMOqpvW3R5jiXyCLcYZm85YcbSN2ez3R5ckL+pHVXQR6iJHpceRZjxtBuKqRQ7CbrvkwkvQ53FIyQ6H0l7T0F6HZ6/Js+2vo2DWLRvGlgntRP87P6Bi18OhhKy7r5dC1E6ZYc2zem6ntzqj/zOXG10HVKBVJmhjxMYq2Ud6u/MH3JLDwGk+nr3kOGQIDAQAB";
private static final String APP_ID = "wzaf502bde7e10f150";
private static final String SANDBOX_GATEWAY_URL = "https://openuat.sadadpos.com/";
private static final String GATEWAY_URL = "https://open.sadadpos.com/";
// Instantiate a client
OpenApiClient openapiClient = new OpenApiClient(APP_ID, SANDBOX_GATEWAY_URL,
APP_RSA_PRIVATE_KEY, GATEWAY_RSA_PUBLIC_KEY);
// Build a request object, set parameters
WisehubCloudPayOrderRequest request = new WisehubCloudPayOrderRequest();
request.setMerchant_no("302400004438");
request.setStore_no("4024000040");
request.setTerminal_sn("WPYB002349002550");
request.setPrice_currency("QAR");
request.setMessage_receiving_application("SADAD POS");
request.setPay_scenario("SWIPE_CARD");
request.setOrder_amount(502.34);
request.setTrans_type(1);
request.setMerchant_order_no("TEST_" + System.currentTimeMillis());
request.setDescription("IPhone 12 5G White");
request.setAttach("{\"key\":\"value\"}");
request.setNotify_url("https://m.website.com/pay/notify");
request.setExpires(300);
request.setReject_trade_when_terminal_offline(false);
request.setRequired_terminal_authentication(false);
request.setApi_version("2.0");
// Build a response object
WisehubCloudPayOrderResponse response;
try {
// Execute the request
response = openapiClient.execute(request);
} catch (OpenApiException e) {
// Handle network exceptions ......
// @TODO
System.err.println("\nrequest api error:" + e.getErrCode() + "->>" +
e.getErrMsg());
return;
}
if (!response.isSuccess()) {
// Handle business exceptions ......
// @TODO
System.err.println("\napi execute error: " + JSON.toJSONString(response));
}
// Write your business code based on the API response ......
// @TODO
Parameters - No parameters
- Request-Example
{
"charset": "UTF-8",
"expires": 300,
"pay_scenario": "SWIPE_CARD",
"store_no": "4024000040",
"sign": "rNLQjxjGDU7USuQP7FaUjM7v7uNyQ6+eNj5r03OVnlaMJBWHNgVkX0WvajyI0KVTsCUb9Fcs5u/xxVzKhh5w+elai/PP/qpdNsqtp6toRc51lDDZCOgwBCyYi4NtgE4QGVRlE9rCp8gxAZGEx0Z6WTjcxs8c76d3LYcyvxvMx++53rXSoSjWxnzSW7off7nQkWj6QBw82ccMqEHR9OUexiVN+0zzzJprR9Mu2SBPGs278uQ/OyJHiMy+a4v2NCP42b83U6sBgv7I7M2wVHQ5nnN2jD0hw7KlHLIlbV6ZG3a1jDWoK81VljthpDP8EnXa6ZBNqhj+lXP9hk8GW7zp3Q==",
"description": "IPhone 12 5G White",
"merchant_order_no": "TEST_1731578873757",
"order_amount": 502.34,
"required_terminal_authentication": false,
"attach": "{\"key\":\"value\"}",
"app_id": "wzaf502bde7e10f150",
"sign_type": "RSA2",
"price_currency": "QAR",
"reject_trade_when_terminal_offline": false,
"terminal_sn": "WPYB002349002550",
"trans_type": 1,
"timestamp": "1731578873892",
"merchant_no": "302400004438",
"method": "wisehub.cloud.pay.order",
"format": "JSON",
"api_version": "2.0",
"notify_url": "https://m.website.com/pay/notify",
"version": "1.0",
"message_receiving_application": "SADAD POS"
}
Success Response
- Success-Response
{
"code": "0",
"data": "{\"trans_no\":\"50240000442411140000004\",\"message_id\":\"M0000000520241114100756\",\"terminal_online_status\":\"offline\",\"trans_amount\":\"502.34\"}",
"msg": "success",
"psn": "11141007538449910890",
"sign": "Xm2PYumio21yfXexzIfqhheWch4XxEbd8p6j/OEmobQ1CzIfFaQRa/vO4mq/MGS++B3uvoVYu/yGLciIXmljqh37aCTbj6eJfqD2ohU6b4WK8tAjEbiMeBSjiaDl2/9djoE8HJZbUQIh+owPb4/lFGA4tTHJ+JiDlTdlnaoIeejOoIUybEYosIkVBa18Q+YOlVrsqW7mIBfQAYsP8CtOJfbRrqWm5aA7hA/9uPmFiXG82+dTmyzE88AsL2U7KWbr/4tHzSTn8SiVpz7d4JtwDi30kD5d12vOrcgod1R/OyzNZxd6lKvDbvx+FLTi+1cSrLs9LB7YCAbTy2mhvrVbNA=="
}
Query Order
- POST
Sandbox
https://open-uat.sadadpos.com/api/entry/orderquery
Live
https://open.sadadpos.com/api/entry/orderquery
This interface provides query for all payment orders. Merchants can actively query the order status through this interface to complete the next step of business logic.
The scenarios for using this API include
- If there is any problem with your backend, it may lead to missed payment notification.
- If there is a system failure, or the transaction status remains unclear after payment.
- If the transaction status is unclear.
- Java
private static final String APP_RSA_PRIVATE_KEY = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDKZdWnnYDi7hfKFgzzqvF9WD962M54PMRuyIVXIuLMzb/PTtAW1CUCSTIH2kJ+zyQLMA9Xgiz3B7Aht0HyBfVB6v3ouaULXkI3k60yWIlKbgHDkAUdTPMUOgKW/ptF0jzO+TFtihIFo4EwSkQl3rb82R/qObJ+48uPVnzi1OdR+m9sNvoDfANY3u9JxSJw4ond2YVw4Arn9REnEgY4JDjkVEfjmIFzakFZsohLxNFNjutfmvypqiZh4GcKQRTNra+z5X8fCIqdB1y99IJ0+xU5OjmA6XB12rhUJjnIXKE/woOm4iwfbTRW6gpYgnMf177DSrUi7+KckwHgRLXWx3CtAgMBAAECggEAbxR0rglDM0h4xfBUK2cmIiTMsh9LMbIoHKTwiWIcF0rUenJGwkCsDxUc4DJpTC9jGMDHqr9G7kzJ3bc1+h5K/GJ7973rVtHkhZwG8hqlPrQhQ7NHG02gGvm7ciNKFIfN18nr1rJwMagKvvYDcMVKqHqBiYsg64MZtRFCeTtfuR0+bDNBwl15soyQQizg9M+TiFrrzlsu05h97RDn2kHM7ySQUGELH+d6VN6KIR/zMWXCPP40KJFn0Icnd+8rg3+rwk82zlAwZyi/bEUYRNo4hIILi5xoAc38/IDv0iRJSMuQBs+VnTsJV/xeeWz4Gomttjqg5ci6QDq0SSfPxgBgAQKBgQD2FBA48LVxe5KW8G4dNA5B/CLr6PDreMcTr4ABdR+ajPuwR5pFOzSLOgNYusf6XguiiiIQOQhs4tUPqlXi7BpryqRZpnq0ViGcJfo9iJybg9Tpu7AK9X9Lvd6DDwXhkoNxcz60dnwPBDwDuOT4RPaU+rFr4k9zocyqbM+qE+j8UQKBgQDSjupMiPzN4OXVgs/wC0m+md3bvhc6bqwLF850DlZVHDtxbLlBrdQLVM18GG6S8LOoPrGDZTRIvgbX1jEXjl0tk6c7ICJYKRwjvx6tnwcI+jelT2quKz8w1vpqhFsb01yAwuaudVmj0i8BOt1a6lq6Ls2BgXgevrmrPQ0Cx8PDnQKBgF9qwC+UBocOZ3TnnYrtWGn1noTjOifUGT1k27m09KA08pMT8JnPrzwdLpcFNe268cAA19x6gO3Xts3wOoVXD5ekZ73rc8DhdP7bKwEZK8CRicln4YceUlHIObOP67Pf39/p0/KdztTzy2GWHBK4ivSRkKJIio5HutiKgKtuNPVBAoGADIYHlYnIT46C3RIswABL4JRSR9GknAsdHIPL+ccoh2NofbSTyD5IkGv41Nq3KPI8HVOtRz1rwK/cxFWvEdGb5SwVFEUzBb9cNxwU/QqqZnRLfv+cPsO/vG3s8wzwRlVp+Raeld3Q+Rd1SENyCwhJYS2Ld5p1xI5fiLnW3kV3dVkCgYASYlU26SpywOCue6qs4ztzRvqnQgWWrOl7R+PtaJvidOGlinNWutr0DQU/73MBnkJdKaXBBLHpxrAxwF6x3t2w707H4K3sWhoKAFMVLr6h3Xdz9MYlRk0pFXLatfn0thYeUZjPm8wacaC5N7gNCRqcO7eJaJpledkM8CRFQzY1aw==";
private static final String GATEWAY_RSA_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAplNGveqcnfEfoIX5Db2DDZ6aLOC5jkGFItwi0NcZBBxj6scwg91/wZbp6DzPk/GKO6o7Za2pbKFPqpE4EDXbNT6TvRApyQomDd9FMlnDkNvjv5Rlvp/uewaQfAAGkeFex0Fm03bWAuC1iDJxcJTT1vIc1g7EBMOqpvW3R5jiXyCLcYZm85YcbSN2ez3R5ckL+pHVXQR6iJHpceRZjxtBuKqRQ7CbrvkwkvQ53FIyQ6H0l7T0F6HZ6/Js+2vo2DWLRvGlgntRP87P6Bi18OhhKy7r5dC1E6ZYc2zem6ntzqj/zOXG10HVKBVJmhjxMYq2Ud6u/MH3JLDwGk+nr3kOGQIDAQAB";
private static final String APP_ID = "wzaf502bde7e10f150";
private static final String SANDBOX_GATEWAY_URL = "https://openuat.sadadpos.com/";
private static final String GATEWAY_URL = "https://open.sadadpos.com/";
// Instantiate a client
OpenApiClient openapiClient = new OpenApiClient(APP_ID, SANDBOX_GATEWAY_URL,APP_RSA_PRIVATE_KEY, GATEWAY_RSA_PUBLIC_KEY);
// Build a request object, set parameters
OrderQueryRequest request = new OrderQueryRequest();
request.setMerchant_no("302400004438");
request.setMerchant_order_no("TEST_1731578873757");
OrderQueryResponse response;
try {
// Execute the request
response = openapiClient.execute(request);
} catch (OpenApiException e) {
// Handle network exceptions ......
// @TODO
System.err.println("\nrequest api error:" + e.getErrCode() + "->>" +
e.getErrMsg());
return;
}
if (!response.isSuccess()) {
// Handle business exceptions ......
// @TODO
System.err.println("\napi execute error: " + JSON.toJSONString(response));
}
// Write your business code based on the API response ......
// @TODO
Parameters - No parameters
- Request-Example
{
"merchant_no": "302400004438",
"charset": "UTF-8",
"method": "order.query",
"format": "JSON",
"sign": "ua/q8MUPzBkj353L53LU0vIvnKv8fUZYnuro9t2uboXEyR5n4tUPzuPMPxwNDhvaZsdO2ZpitB5isey6C4emqtwWtxo28QcDhu/dX2tWPpWtc9MqQOjDP1zAzNVJjA8u+3XbdK9leWRX8JQR8hxC+djFwayXBP5Pc+AciIdAde7/xY//Rzj7vXsrzTsYctO0GtSg6O8WxI1St7sec1WTBfJquV8wAA26v5FbqGWwGzpt3GKlUkZBX61d2iiadMVj6AcNafdx/CGB5gJQi3r1sRttfyNM1fAmbk/N0ijWNzNb+4FVdW2wGbo2mAmdPskW7NlHfUaGJDvhd2B2PKwWmQ==",
"app_id": "wzaf502bde7e10f150",
"sign_type": "RSA2",
"version": "1.0",
"merchant_order_no": "TEST_1731578873757",
"timestamp": "1731579281995"
}
Success Response
- Success-Response
{
"code": "0",
"data": "{\"trans_no\":\"50240000442411140000004\",\"cashback_amount\":\"0\",\"store_no\":\"4024000040\",\"pay_scenario\":\"SWIPE_CARD\",\"order_amount\":\"502.34\",\"attach\":\"{\\\"key\\\":\\\"value\\\"}\",\"trans_amount\":\"502.34\",\"trans_status\":9,\"merchant_order_no\":\"TEST_1731578873757\",\"price_currency\":\"QAR\",\"terminal_sn\":\"WPYB002349002550\",\"trans_type\":1}",
"msg": "success",
"psn": "11141014414300574620",
"sign": "INxr7i1BLBDzKfKUNVmp66y8kDCgEIcy9T2X5YWMqqrHigDh0IqlU2xW2GBFePb3h4kEF1oQegFOnJ9SGF/gDlb0sNdBXSCKuujDyws7tKQLhjIJ6o5+ICijCDSVzKeQha9p4S4uYRvGAShtYP22aV+nvVcG1s18SKgwXsvgfuSdS7BsKboMyUP+0F1S/KFUKhN81+ja6DnwztjS5UPuExDhkQODnxZDIN38hAcHFAlHPk+RGbO8jGbKSrNJ8elJ9K8MiQQ4vod4mHGNfNaenXws5cKXWCmZF1bt8pSMx08Upf4PqZUpA7vuNZ4r3mi9ZDINoSQdCq4n4DI6bTFKFw=="
}