Refund

👍

HTTPS POST / Server-to-Server

Payment requests and responses are encrypted using JWE

  • JWE algorithm = RSA-OAEP + A256GCM
  • The signature uses JWS PS256

Merchants must know how to prepare requests and process responses using JWE + JWS with exchange key.

https://demo2.2c2p.com/2C2PFrontend/PaymentAction/2.0/action
https://t.2c2p.com/PaymentAction/2.0/action
https://pgwid.2c2p.com/PaymentAction/2.0/action

 

🚧

Reminder

Note that refunds can only be requested for settled transactions.

 

Refund Request


To prepare a refund request, refer to the guidelines below.

📘

Provided Sample Code

The following sample code demonstrates how to prepare request data, generate the JWT token with key, and send the API request.

For the JWT token, you may also refer to the sample code here.

  1. To prepare the data payload for the refund request, refer to the sample structure shown below. You may also check the API specifications here: Refund Request Parameters

2.To generate encrypted request data, refer to this guide: Generate JWT Request with Keys

<PaymentProcessRequest>
  <version>3.8</version>
  <merchantID>JT07</merchantID>
  <invoiceNo>260121085327</invoiceNo>
  <actionAmount>25.00</actionAmount>
  <processType>R</processType>
</PaymentProcessRequest>
eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.ZXlKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V5TlRaSFEwMGlmUS5nVUJteDdNSHd6MmZSVmRCV0lfdTlaN0dlMzZub2NpUkp6OTFYRXdvdWJPLThucU1tV3N1TXA1TzdNNENQMG4ydHFfcEZFbEluRzE2ZnNfdUxLT3JuLXhiWmw3M3M4RmJoOVZsSVY4ZGZlUXQzSU5CWDJrak1uZ0x3c21xSmwyX3lIc19YTDVKSW1iWXIyYmlTdGtVOEhsc21MQ1FQanM1c0xVem9kbW96R0ZUU01xX0dXSEs1TDROSjdERG9NOERxb29hTE9zVlZldW51akZ4SUVFb3lhc1lUXzlQT0dvSnllY29KRnhxMU9EeGJ5Ni0yVUlqZzFOLVUtNXRGQlprbE9WVTJTZmMzQTNVemtTblV4bnN1OTUybVlTbUwtc1JrMWhzVW9OQVp2V0VCeDU2cmMxX0pJWTkzVDNnZG5ZckszS0liNkw3eDhlVmNlLUxId2RWQVEuNkdxOWFfdVZjWEdLVHlVVy5kaG44OHY0MVZiY0JPSGJLekpqbkRyMGI5a1l3aUpvcEJEdS1sSVlCUW1PQUdpLTQ2UkVUVC1GcE1Wb0hkei11WW13bktGMG9VNXNWV3k4X0x4cmVvTkpSaW4zdXFMQVM3dXhXZVJpU0d6QnBRVUMtVTItOElWT05uQVFELUZyTWxLYVN2azNwaWYzMmN1a0p5MUQ4UmR1Z21WbGRzOVpiSDVYQnlmQVJhdUZTemhaLVpPNjJjc3pIR0VGVXR3OFc2WlBCalZNMEZvSEx3eGYzZ3JidUlfVW45Unh4cTdDeEhsUDU1MC02TGdlT2kyYm9YVGNxOFBidHBIbDktUFBpSDB3cC4zTUh1U2tXd1M1cktybjNXXzVrZkJ3.XPyfoC6Zh82JQ3RyIBEitxomLHTNGNkjB4pQCfhishxLK6OYa3T6gL__dHCVwITL3DY2NBOQax5KfdPLAUV9-sB57VKT_WFCPleHcVTgRARnnOc-LlJmhMgg6fX5qqP2wd3GmVyhgD1Eg--eIvT2uHOwatV2O-4zYRnnBjBOSJ1irAL-6277NUu956bmXAopKBa2WNZXJet8DJUyMG2WgvDboa07tVRwBodzmEYj665dW08R2no4Uu2PxYME_OQTaYdCwZQ5psixhOQ6UP5jW3BkmM7ANdGhMSstcwEZVpFSNL99vBTtLN4_h29-cclw5PttfzOQQ1ZdrlhCHtBa1KSYv_sJh-7SdZnajmBE58Ya3klQqL7wupHFfFYG-A0NZfLXIqeZEG6_6uklBspQ_0Fx49sXJVshtM8zvXAmqORE_4VNnd2u0d-RJL_aA-oLvV04IanupbugkWZL47sw3SkUf3ncEPZtJDua7wBf9XjArmXkfXAsF6x2FPs7wPBhPVZihJ_5PQeYb59Cp9JfzG_nTqDwtCPZeF2seLP9ukRoal6O8DbjW2SuVCuNkF4B9BAw1DNY1VLkq2jiYAyIDQ3m4ZHqxieFV7kd5TcnOIvJRDSNMkgduf9mOh2QuTjZerHOp4ttOXDMym9y4p4Glj4hmudh-YNku_JNeQNpEr4
  1. To send the encrypted request via API, refer to the sample request below.
curl --location --request POST 'https://demo2.2c2p.com/2C2PFrontend/PaymentAction/2.0/action' \
--header 'Content-Type: text/plain' \
--data-raw 'eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.ZXlKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V5TlRaSFEwMGlmUS5nVUJteDdNSHd6MmZSVmRCV0lfdTlaN0dlMzZub2NpUkp6OTFYRXdvdWJPLThucU1tV3N1TXA1TzdNNENQMG4ydHFfcEZFbEluRzE2ZnNfdUxLT3JuLXhiWmw3M3M4RmJoOVZsSVY4ZGZlUXQzSU5CWDJrak1uZ0x3c21xSmwyX3lIc19YTDVKSW1iWXIyYmlTdGtVOEhsc21MQ1FQanM1c0xVem9kbW96R0ZUU01xX0dXSEs1TDROSjdERG9NOERxb29hTE9zVlZldW51akZ4SUVFb3lhc1lUXzlQT0dvSnllY29KRnhxMU9EeGJ5Ni0yVUlqZzFOLVUtNXRGQlprbE9WVTJTZmMzQTNVemtTblV4bnN1OTUybVlTbUwtc1JrMWhzVW9OQVp2V0VCeDU2cmMxX0pJWTkzVDNnZG5ZckszS0liNkw3eDhlVmNlLUxId2RWQVEuNkdxOWFfdVZjWEdLVHlVVy5kaG44OHY0MVZiY0JPSGJLekpqbkRyMGI5a1l3aUpvcEJEdS1sSVlCUW1PQUdpLTQ2UkVUVC1GcE1Wb0hkei11WW13bktGMG9VNXNWV3k4X0x4cmVvTkpSaW4zdXFMQVM3dXhXZVJpU0d6QnBRVUMtVTItOElWT05uQVFELUZyTWxLYVN2azNwaWYzMmN1a0p5MUQ4UmR1Z21WbGRzOVpiSDVYQnlmQVJhdUZTemhaLVpPNjJjc3pIR0VGVXR3OFc2WlBCalZNMEZvSEx3eGYzZ3JidUlfVW45Unh4cTdDeEhsUDU1MC02TGdlT2kyYm9YVGNxOFBidHBIbDktUFBpSDB3cC4zTUh1U2tXd1M1cktybjNXXzVrZkJ3.XPyfoC6Zh82JQ3RyIBEitxomLHTNGNkjB4pQCfhishxLK6OYa3T6gL__dHCVwITL3DY2NBOQax5KfdPLAUV9-sB57VKT_WFCPleHcVTgRARnnOc-LlJmhMgg6fX5qqP2wd3GmVyhgD1Eg--eIvT2uHOwatV2O-4zYRnnBjBOSJ1irAL-6277NUu956bmXAopKBa2WNZXJet8DJUyMG2WgvDboa07tVRwBodzmEYj665dW08R2no4Uu2PxYME_OQTaYdCwZQ5psixhOQ6UP5jW3BkmM7ANdGhMSstcwEZVpFSNL99vBTtLN4_h29-cclw5PttfzOQQ1ZdrlhCHtBa1KSYv_sJh-7SdZnajmBE58Ya3klQqL7wupHFfFYG-A0NZfLXIqeZEG6_6uklBspQ_0Fx49sXJVshtM8zvXAmqORE_4VNnd2u0d-RJL_aA-oLvV04IanupbugkWZL47sw3SkUf3ncEPZtJDua7wBf9XjArmXkfXAsF6x2FPs7wPBhPVZihJ_5PQeYb59Cp9JfzG_nTqDwtCPZeF2seLP9ukRoal6O8DbjW2SuVCuNkF4B9BAw1DNY1VLkq2jiYAyIDQ3m4ZHqxieFV7kd5TcnOIvJRDSNMkgduf9mOh2QuTjZerHOp4ttOXDMym9y4p4Glj4hmudh-YNku_JNeQNpEr4'

 

Refund Response


To receive and process refund request responses, refer to the sample code below.

📘

Provided Sample Code

The following sample code demonstrates how to receive response data and decrypt the JWT token with key.

For decrypting the JWT token, you may also refer to the sample code here.

  1. Following a refund request, the API will return encrypted response data. Refer to the sample encrypted response below.

  2. To decrypt the response, refer to: Process JWT Request with Keys

  3. Refer to the sample response structure below. You may also check the API specifications here: Response Parameters

eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.ZXlKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V5TlRaSFEwMGlmUS5RTFNwa0duNFlqTGE4T2tSS29ZN3VLNFZZNUMtdVBNR0RKRlRIVXd5SGlTYWYxOFE0RjZLcjhrLUxyYTlMR0JZQ0ZuRkVObVNlNUtyWTNvREVjWGF1bjg2QXlUT0tvLXZtZWxBMkhOQWJJd2YybEdnMFJqaEdyNm02ZHhBam9HT25tdEFnNnVraXlVeW92R2lUeUNtNXdqd0FtT0lxT1hNdVZ6VFZnTUxBd004TzctMGxfV2Q3OV9CYkNoOGZnQjUyZ1QtYXFaTGU2XzIwMmhXUGVnczg4Q3Y0Zlc0dEhpZGpLcndSRXNoQkRnMXhTWElaY1cyZ3VSOTVOZmdBcVd6OEhZVDVYUFRyUVZFZmVoQnBrRUdBZnpId0h5bC1TNHhkZl9LRlBwcVY2MGxScGVreUlfWFp0SF9YZjdoMXJIdlVrc2hBdEJXQ1hidHZ0N2xZaEF5SzczS2N5M0o3aHJCVHl0MG1WaWN5aWpGRl9kcFBqZ18zRjM1WDdYdUhGWXpyMnRFa2d4ZVlFalM1Sm92ZEtNU2MzUTNlR2h0RGlLMmlIN3FQblBjVHBQZGtHY3VFOWNSNl9hd2xSVFJKdElEcEVzaHJjQjd3c0tDNGU0aGJOVHFFVmhpU0xiWlRwdWhOWjZNWHlGcGo0ajJEUmlYdEZJSDBHSndXMnBOWTJYeWtCS3NubktSU0VuaWRKUnFDUFFSSUhrOGJkTDJuWG94bDZMSDVHQ3lhYkdTY19SRndQQnlfYWRxZER2SjVYQnM2SkdvQlBaTFpMSVJVVXF1VVJxNkd0TEtHNXY4bWxsWnVKMnVrU0UwdkZWZE83WE43VUNMZ2hfQ2QwYWF6NkNGZEhHZ1VHbVhES3Ytc3pZWjdfdlg3Mk9aaWxUQjhfSmVJanBXMV9ObnhtQS5QQ3lEdl9IVW8zV1I0Wm5ZLkEzQTZLeWVCN2xSSXNJQjFqb3ltRXhQcmRPUzZGak44Q241VGo3OHpONGRaTXVYZzY4ekFENnFjVFUzODNMUFFMd1BSdjQ4WDRvaWV1Mng2dTBWeVpLUGtMSmZZNzVCVFBUQUhNT0JIdUNUWmdHeElnVDFSaUlOS2d0THBobTMxU1BDZFZ4MXZJQkp2LXgyTDEycDdJOENKM0hERERVSXBFWlVqa2w2c0l6ekFhcFg5ckNOQnV3U0tOejd2NlVwNjlnYmhDUzZ0cVk4bk50eHZaa3BGYTZjanU1VE56SHpCRHZHWS03VTB6TFBJYXdrR190aWswQmJOQkk1XzljVmpUQ0pDWVpHbFFmdzZ6UmVzenU0bzE5dG4zN3dZN3NWVlZuVGlqendxcU8wdWQ0TmlPTDQwRkVPcHA4U0F1VHVRM3FkbmxXSFMzeU9sdEVnU0oxSDlqUXFiMDZVR19nMXhncl9aczA1ZUNfSFRrU3VLNkx2WnlKUVBGcE03Nmp1TWRjcVBqR0lnUzl1T09rbFdYLU8wRHRNNzk0N1FUVlRJTkEzYWI1blJwOUxSNHgwVkFYYnlOd1NUTXVnR0hjZ2JWVTlwb09rTmF5ekN1MGVlUDZ6RmlBOG1za041Rm5tTmp3MWFDbFJ4bFp6QXhMMlFIbGFtY21uaW5UOGlqSzUzZGJLOFBHd2FxVU1MZnIxSDcyMXZtSlR4OW8ydl9WTFowNFc4eG4yRWxwdkRCRTlRRzl0UlprOF9zM1lrcjRjT1F1NXJxQVBENC1JeUY5bkFRXzVfVWZPNHEyNUxHZzk3S0E1NUxfU1dTU0M4VG1PdXdMdHdyeFhpQjlZdWJ6YVBSdk9mSi1WNmxmWldoLUNTOEpUYlZmR19xZXl4VHJpRHdyRHhRNzFYaUNHZDBZZ1lSTmRPb3YxUzdmNmxWUVlsRTNUUU04Qld6QU9MMUFISzVoZEswaklTYmZCemhBOUN3aTZ5UXotM0Vla2s5TUFKX1YzMktqSzBMd0hpMl9sRTZRTVhRVkZkR21RTnZfQm5peFVjajZ0Zk9WM2E4enRReXM3MlVNbUVjalNZNVc5SDFOZGdzSVFjSlZ1dzFkbU1tZmxSMERiY0FrMTFGYkN2Qm1KUDlrUnlvNU1PdWRqcE1mWU15NzVJOGhybXZJcjNWR1A4amZBNFhnQ0YxbGdYYWVUMGRCMlhrRmUxZmxnT1E2MzRFeFZkbGw2bDNzUzhLTmRnZWUzNjdJdG4zVklOOHZqeGViX3UuRDQzNTRyRmNqb1pQTDloQjZIYzBLdw.L1ZPZscfm34DocGdIp3ksJUIZqz0g7Nc2xcFe1MpwwfS3eh3atuyOyBP0KzTekJc_7iPKqlGfJ2VEU3ppIggAC6RG4Z0zj36e2fOailBr76zFf4Xig9AFUc5M6m3xKE_Tk5HlIcM4LfiByAOYuNM52JYW-mXt9KR6M3i6QFmvuiB-jKvaUYri-X5gnRowSOeOzGAiY9BLesvLu4dm1Xo_RLm9fUQ7oXRrsdGcYC48D6FCoTjPXdeySrtElHDeJrid0R4GxNlOknMqxppWFboSRHf42yU0wen9cqt7CXNBG1bKptOlNCOAgJr1aWa2z2fYpsPn0IrzUIZ2qZRmb6O_Q
<PaymentProcessResponse>
  <version>3.8</version>
  <timeStamp>250221155131</timeStamp>
  <respCode>00</respCode>
  <respDesc>Success</respDesc>
  <processType>R</processType>
  <invoiceNo>260121085327</invoiceNo>
  <amount>25.00</amount>
  <status>RF</status>
  <approvalCode>2508513089</approvalCode>
  <referenceNo>3528643</referenceNo>
  <refundReferenceNo>3598743</refundReferenceNo>
  <transactionDateTime>20210126085854</transactionDateTime>
  <maskedPan>411111XXXXXX1111</maskedPan>
  <eci>05</eci>
  <paymentScheme>VI</paymentScheme>
  <processBy>VI</processBy>
</PaymentProcessResponse>

Refund Notification


For certain 123 payments and wallets, the refund process is asynchronous. In these cases, the initial response will be REFUND_PENDING. You will need to either repeatedly call the Refund Status Inquiry API or include a notifyURL in the refund request.

Once the refund is completed, 2C2P will send the final refund status in the HTTP POST body, encrypted with JWE + JWS.

notifyResponse=eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.ZXlKaGJHY2lPaUpTVTBFdFQwRkZVQ0lzSW1WdVl5STZJa0V5TlRaSFEwMGlmUS5RTFNwa0duNFlqTGE4T2tSS29ZN3VLNFZZNUMtdVBNR0RKRlRIVXd5SGlTYWYxOFE0RjZLcjhrLUxyYTlMR0JZQ0ZuRkVObVNlNUtyWTNvREVjWGF1bjg2QXlUT0tvLXZtZWxBMkhOQWJJd2YybEdnMFJqaEdyNm02ZHhBam9HT25tdEFnNnVraXlVeW92R2lUeUNtNXdqd0FtT0lxT1hNdVZ6VFZnTUxBd004TzctMGxfV2Q3OV9CYkNoOGZnQjUyZ1QtYXFaTGU2XzIwMmhXUGVnczg4Q3Y0Zlc0dEhpZGpLcndSRXNoQkRnMXhTWElaY1cyZ3VSOTVOZmdBcVd6OEhZVDVYUFRyUVZFZmVoQnBrRUdBZnpId0h5bC1TNHhkZl9LRlBwcVY2MGxScGVreUlfWFp0SF9YZjdoMXJIdlVrc2hBdEJXQ1hidHZ0N2xZaEF5SzczS2N5M0o3aHJCVHl0MG1WaWN5aWpGRl9kcFBqZ18zRjM1WDdYdUhGWXpyMnRFa2d4ZVlFalM1Sm92ZEtNU2MzUTNlR2h0RGlLMmlIN3FQblBjVHBQZGtHY3VFOWNSNl9hd2xSVFJKdElEcEVzaHJjQjd3c0tDNGU0aGJOVHFFVmhpU0xiWlRwdWhOWjZNWHlGcGo0ajJEUmlYdEZJSDBHSndXMnBOWTJYeWtCS3NubktSU0VuaWRKUnFDUFFSSUhrOGJkTDJuWG94bDZMSDVHQ3lhYkdTY19SRndQQnlfYWRxZER2SjVYQnM2SkdvQlBaTFpMSVJVVXF1VVJxNkd0TEtHNXY4bWxsWnVKMnVrU0UwdkZWZE83WE43VUNMZ2hfQ2QwYWF6NkNGZEhHZ1VHbVhES3Ytc3pZWjdfdlg3Mk9aaWxUQjhfSmVJanBXMV9ObnhtQS5QQ3lEdl9IVW8zV1I0Wm5ZLkEzQTZLeWVCN2xSSXNJQjFqb3ltRXhQcmRPUzZGak44Q241VGo3OHpONGRaTXVYZzY4ekFENnFjVFUzODNMUFFMd1BSdjQ4WDRvaWV1Mng2dTBWeVpLUGtMSmZZNzVCVFBUQUhNT0JIdUNUWmdHeElnVDFSaUlOS2d0THBobTMxU1BDZFZ4MXZJQkp2LXgyTDEycDdJOENKM0hERERVSXBFWlVqa2w2c0l6ekFhcFg5ckNOQnV3U0tOejd2NlVwNjlnYmhDUzZ0cVk4bk50eHZaa3BGYTZjanU1VE56SHpCRHZHWS03VTB6TFBJYXdrR190aWswQmJOQkk1XzljVmpUQ0pDWVpHbFFmdzZ6UmVzenU0bzE5dG4zN3dZN3NWVlZuVGlqendxcU8wdWQ0TmlPTDQwRkVPcHA4U0F1VHVRM3FkbmxXSFMzeU9sdEVnU0oxSDlqUXFiMDZVR19nMXhncl9aczA1ZUNfSFRrU3VLNkx2WnlKUVBGcE03Nmp1TWRjcVBqR0lnUzl1T09rbFdYLU8wRHRNNzk0N1FUVlRJTkEzYWI1blJwOUxSNHgwVkFYYnlOd1NUTXVnR0hjZ2JWVTlwb09rTmF5ekN1MGVlUDZ6RmlBOG1za041Rm5tTmp3MWFDbFJ4bFp6QXhMMlFIbGFtY21uaW5UOGlqSzUzZGJLOFBHd2FxVU1MZnIxSDcyMXZtSlR4OW8ydl9WTFowNFc4eG4yRWxwdkRCRTlRRzl0UlprOF9zM1lrcjRjT1F1NXJxQVBENC1JeUY5bkFRXzVfVWZPNHEyNUxHZzk3S0E1NUxfU1dTU0M4VG1PdXdMdHdyeFhpQjlZdWJ6YVBSdk9mSi1WNmxmWldoLUNTOEpUYlZmR19xZXl4VHJpRHdyRHhRNzFYaUNHZDBZZ1lSTmRPb3YxUzdmNmxWUVlsRTNUUU04Qld6QU9MMUFISzVoZEswaklTYmZCemhBOUN3aTZ5UXotM0Vla2s5TUFKX1YzMktqSzBMd0hpMl9sRTZRTVhRVkZkR21RTnZfQm5peFVjajZ0Zk9WM2E4enRReXM3MlVNbUVjalNZNVc5SDFOZGdzSVFjSlZ1dzFkbU1tZmxSMERiY0FrMTFGYkN2Qm1KUDlrUnlvNU1PdWRqcE1mWU15NzVJOGhybXZJcjNWR1A4amZBNFhnQ0YxbGdYYWVUMGRCMlhrRmUxZmxnT1E2MzRFeFZkbGw2bDNzUzhLTmRnZWUzNjdJdG4zVklOOHZqeGViX3UuRDQzNTRyRmNqb1pQTDloQjZIYzBLdw.L1ZPZscfm34DocGdIp3ksJUIZqz0g7Nc2xcFe1MpwwfS3eh3atuyOyBP0KzTekJc_7iPKqlGfJ2VEU3ppIggAC6RG4Z0zj36e2fOailBr76zFf4Xig9AFUc5M6m3xKE_Tk5HlIcM4LfiByAOYuNM52JYW-mXt9KR6M3i6QFmvuiB-jKvaUYri-X5gnRowSOeOzGAiY9BLesvLu4dm1Xo_RLm9fUQ7oXRrsdGcYC48D6FCoTjPXdeySrtElHDeJrid0R4GxNlOknMqxppWFboSRHf42yU0wen9cqt7CXNBG1bKptOlNCOAgJr1aWa2z2fYpsPn0IrzUIZ2qZRmb6O_Q
<PaymentProcessResponse>
  <version>3.8</version>
  <timeStamp>250221155131</timeStamp>
  <respCode>00</respCode>
  <respDesc>Success</respDesc>
  <processType>R</processType>
  <invoiceNo>260121085327</invoiceNo>
  <amount>25.00</amount>
  <status>RF</status>
  <approvalCode>2508513089</approvalCode>
  <referenceNo>3528643</referenceNo>
  <refundReferenceNo>3598743</refundReferenceNo>
  <transactionDateTime>20210126085854</transactionDateTime>
  <maskedPan>411111XXXXXX1111</maskedPan>
  <eci>05</eci>
  <paymentScheme>VI</paymentScheme>
  <processBy>VI</processBy>
</PaymentProcessResponse>