# Result & IPN Callback

* Result URL: Use for Merchant to show result for Customer. Support http method POST or GET
* IPN URL: Use for Merchant to receive payment result and process business workflow.

Note:

Response Signature is create by applying hash algorithm **SHA256** the response **data** with **Salt**.&#x20;

**signature = SHA256(data + salt)**

#### Body

<table><thead><tr><th width="90">Level</th><th width="188">Field Name</th><th width="165">Data Type</th><th>Description</th></tr></thead><tbody><tr><td>1</td><td>data</td><td>Alphanumeric<br><em><mark style="color:blue;">mandatory</mark></em></td><td>Base-64 string</td></tr><tr><td>1</td><td>signature</td><td>Alphanumeric<br><em><mark style="color:blue;">mandatory</mark></em></td><td>Response Signature<br><strong>signature = SHA256(data + Salt)</strong></td></tr></tbody></table>

#### Data (Decode Base-64 String)

<table><thead><tr><th width="84">Level</th><th width="213">Field Name</th><th width="180">Data Type</th><th>Description</th></tr></thead><tbody><tr><td>1</td><td>requestID</td><td>Alphanumeric(50)<br><em><mark style="color:blue;">mandatory</mark></em></td><td>Original Request ID</td></tr><tr><td>1</td><td>responseDateTime</td><td>Numeric(14)<br><em><mark style="color:blue;">mandatory</mark></em></td><td><strong>yyyyMMddHHmmss</strong></td></tr><tr><td>1</td><td>responseCode</td><td>Numeric(3)<br><em><mark style="color:blue;">mandatory</mark></em></td><td>See <a href="../../appendix/response-codes">Response Codes</a> for more detail</td></tr><tr><td>1</td><td>responseMessage</td><td>Alphanumeric(250)<br><em><mark style="color:blue;">mandatory</mark></em></td><td>Response message</td></tr><tr><td>1</td><td>responseData</td><td>JSON Object<br><em><mark style="color:blue;">mandatory</mark></em></td><td>Response data</td></tr><tr><td>2</td><td>transactionID</td><td>Alphanumeric(38)<br><em><mark style="color:blue;">mandatory</mark></em></td><td>GALAXY PAY transaction ID</td></tr><tr><td>2</td><td>transactionStatus</td><td>Numeric(14)<br><em><mark style="color:blue;">optional</mark></em></td><td><strong>Only available in apiVersion 2</strong><br><br>See <a href="../../appendix/response-codes">Response Codes</a> for more detail</td></tr><tr><td>2</td><td>transactionDescription</td><td>Alphanumeric(20)<br><em><mark style="color:blue;">optiona</mark></em></td><td><strong>Only available in apiVersion 2</strong></td></tr><tr><td>2</td><td>paymentMethod</td><td>Alpha(20)<br><em><mark style="color:blue;">optional</mark></em></td><td><strong>Only available in apiVersion 2</strong><br><br>See <a href="../../../appendix#payment-methods">Payment Method</a> for more detail</td></tr><tr><td>2</td><td>sourceType</td><td>Alphanumeric(20)<br><em><mark style="color:blue;">optional</mark></em></td><td><strong>Only available in apiVersion 2</strong><br><br>See <a href="../../../appendix#payment-methods">Payment Method</a> for more detail</td></tr><tr><td>2</td><td>orderID</td><td>Alphanumeric(50)<br><em><mark style="color:blue;">mandatory</mark></em></td><td>Transaction ID at Merchant</td></tr><tr><td>2</td><td>orderNumber</td><td>Alphanumeric(20)<br><em><mark style="color:blue;">optional</mark></em></td><td>Order Number or Bill Number</td></tr><tr><td>2</td><td>orderAmount</td><td>Numeric(16)<br><em><mark style="color:blue;">mandatory</mark></em></td><td>Order Amount</td></tr><tr><td>2</td><td>orderCurrency</td><td>Alpha(3)<br><em><mark style="color:blue;">mandatory</mark></em></td><td>Order Currency</td></tr><tr><td>2</td><td>orderDateTime</td><td>Numeric(14)<br><em><mark style="color:blue;">mandatory</mark></em></td><td><p>Order Date Time</p><p></p><p><strong>yyyyMMddHHmmss</strong></p></td></tr><tr><td>2</td><td>orderDescription</td><td>Alphanumeric(250)<br><em><mark style="color:blue;">mandatory</mark></em></td><td>Order Description</td></tr><tr><td>2</td><td>language</td><td>Alpha(2)<br><em><mark style="color:blue;">mandatory</mark></em></td><td><p>vi or en</p><p></p><p>vi: Vietnamese</p><p>en: English</p></td></tr><tr><td>2</td><td>tokenization</td><td>JSON Object<br><em><mark style="color:blue;">optional</mark></em></td><td><p><strong>Only Return on IPN callback</strong> when</p><p><strong>·  Transaction is successful (ResponseCode = 200)</strong></p><p><strong>·  APIOperation = PAY_WITH_CREATE_TOKEN</strong></p></td></tr><tr><td>3</td><td>accountBrand</td><td>Alphanumeric(50)<br><em><mark style="color:blue;">optional</mark></em></td><td>Card Brand info</td></tr><tr><td>3</td><td>accountSource</td><td>Alphanumeric(50)<br><em><mark style="color:blue;">optional</mark></em></td><td>Card Issuer info</td></tr><tr><td>3</td><td>accountNumber</td><td>Alphanumeric(50)<br><em><mark style="color:blue;">optional</mark></em></td><td>Card Masked Number</td></tr><tr><td>3</td><td>accountName</td><td>Alphanumeric(50)<br><em><mark style="color:blue;">optional</mark></em></td><td>Cardholder name</td></tr><tr><td>3</td><td>token</td><td>Alphanumeric(50)<br><em><mark style="color:blue;">optional</mark></em></td><td>Card Token</td></tr><tr><td>3</td><td>status</td><td>Alphanumeric(3)<br><em><mark style="color:blue;">mandatory</mark></em></td><td>Token Creation Result</td></tr><tr><td>3</td><td>message</td><td>Alphanumeric(250)<br><em><mark style="color:blue;">mandatory</mark></em></td><td>Token Creation Message</td></tr></tbody></table>

```
RESPONSE DATA

{
  "data": "eyJyZXF1ZXN0SUQiOiIxNDY1M2ZhMS0yZjY5LTRmNGYtOWQ0Yi0yNDBlMWJlYmJkZjMiLCJyZXNwb25zZURhdGVUaW1lIjoiMjAyMjA1MDYxMTM1MTciLCJyZXNwb25zZUNvZGUiOiIyMDAiLCJyZXNwb25zZU1lc3NhZ2UiOiJUcmFuc2FjdGlvbiBpcyBzdWNjZXNzZnVsLiIsInJlc3BvbnNlRGF0YSI6eyJ0cmFuc2FjdGlvbklEIjoiMjIwNTA2OTllNjVkOWE3MWQ1NDhlNmI2NzMyM2FlZjFhNDk0YWMiLCJ0cmFuc2FjdGlvbkRhdGVUaW1lIjoiMjAyMjA0MDUyMDIwMDAiLCJvcmRlcklEIjoiODg4Mjg5Iiwib3JkZXJOdW1iZXIiOiI4MjI2Mjg4OSIsIm9yZGVyQW1vdW50IjoiMTA5MDAwIiwib3JkZXJEZXNjcmlwdGlvbiI6IlNlY3VyZSBQYWdlIERlbW8iLCJvcmRlckN1cnJlbmN5IjoiVk5EIiwib3JkZXJEYXRlVGltZSI6IjIwMjIwNDA1MjAyMDAwIiwibGFuZ3VhZ2UiOiJ2aSJ9fQ==",
  "signature": "724c1f76663cc0b119080e0b53eaae06615dd8586e34c15b3e96e61d6d729dcc"
}


VERIFY SIGNATURE

const data = "eyJyZXF1ZXN0SUQiOiIxNDY1M2ZhMS0yZjY5LTRmNGYtOWQ0Yi0yNDBlMWJlYmJkZjMiLCJyZXNwb25zZURhdGVUaW1lIjoiMjAyMjA1MDYxMTM1MTciLCJyZXNwb25zZUNvZGUiOiIyMDAiLCJyZXNwb25zZU1lc3NhZ2UiOiJUcmFuc2FjdGlvbiBpcyBzdWNjZXNzZnVsLiIsInJlc3BvbnNlRGF0YSI6eyJ0cmFuc2FjdGlvbklEIjoiMjIwNTA2OTllNjVkOWE3MWQ1NDhlNmI2NzMyM2FlZjFhNDk0YWMiLCJ0cmFuc2FjdGlvbkRhdGVUaW1lIjoiMjAyMjA0MDUyMDIwMDAiLCJvcmRlcklEIjoiODg4Mjg5Iiwib3JkZXJOdW1iZXIiOiI4MjI2Mjg4OSIsIm9yZGVyQW1vdW50IjoiMTA5MDAwIiwib3JkZXJEZXNjcmlwdGlvbiI6IlNlY3VyZSBQYWdlIERlbW8iLCJvcmRlckN1cnJlbmN5IjoiVk5EIiwib3JkZXJEYXRlVGltZSI6IjIwMjIwNDA1MjAyMDAwIiwibGFuZ3VhZ2UiOiJ2aSJ9fQ==";
const salt = "GO@2021";
const signature = SHA256(data + salt);


DECODE BASE-64 STRING FOR DATA

{
  "requestID": "14653fa1-2f69-4f4f-9d4b-240e1bebbdf3",
  "responseDateTime": "20220506113517",
  "responseCode": "200",
  "responseMessage": "Transaction is successful.",
  "responseData": {
    "transactionID": "22050699e65d9a71d548e6b67323aef1a494ac",
    "transactionDateTime": "20220405202000",
    "orderID": "888289",
    "orderNumber": "82262889",
    "orderAmount": "109000",
    "orderDescription": "Secure Page Demo",
    "orderCurrency": "VND",
    "orderDateTime": "20220405202000",
    "language": "vi"
  }
}
```

#### Response Message (FOR IPN ONLY)

<table data-header-hidden><thead><tr><th width="98">Level</th><th width="151">Field Name</th><th width="178">Data Type</th><th>Description</th></tr></thead><tbody><tr><td>1</td><td>ipnStatus</td><td>Alphanumeric(50)<br><em><mark style="color:blue;">mandatory</mark></em></td><td><p>Response Code for IPN Request.</p><p></p><p>Accepted value:</p><p><strong>200</strong>: Transaction Success</p><p>404: Transaction Not Found</p><p>409: Transaction Completed</p></td></tr><tr><td>1</td><td>ipnDescription</td><td>Alphanumeric(250)<br><em><mark style="color:blue;">optional</mark></em></td><td>Response Description</td></tr></tbody></table>
