Skip to content

Cancel QR

Invalidate or Cancel your QRIS even after it being generated to your customer if there some modified detail in your data / order by using this endpoint.

##JSON Attributes

NameData TypeRequiredDetails
transaction_idStringYesMCP Transaction ID
external_idString(64)YesUnique string from merchant, used in signature
order_idString(255)YesOnly allows '-' for special characters, not unique, may be duplicated
payment_methodStringYesFixed value: wallet
payment_channelStringYesFixed value: SHOPEEPAY, NOBU

##Information

Hostnamehttps://api-stage.ifortepay.id
Path/ewallet/v2/cancel-qr
HTTP MethodPOST

##Headers

KeyFormatRequiredValue
Content-Typeapplication/jsonM
AuthorizationStringM
x-req-signatureStringM
x-versionStringMv3

##Example

Body raw
json
{
    "transaction_id": "{{mcp_transaction_id}}",
    "external_id": "{{merchant_external_id}}",
    "order_id": "{{order_id}}",
    "payment_channel": "{{channel_name: SHOPEEPAY / NOBU}}",
    "payment_method": "wallet"
}
Example Request
shell
curl --location 'https://api-stage.ifortepay.id/ewallet/v2/cancel-qr' \
--header 'Authorization: {{Authorization}}' \
--header 'x-req-signature: {{x-req-signature}}' \
--header 'Content-Type: application/json' \
--header 'x-version: v3' \
--data '{
    "transaction_id": "{{mcp_transaction_id}}",
    "external_id": "{{merchant_external_id}}",
    "order_id": "{{order_id}}",
    "payment_channel": "{{channel_name: SHOPEEPAY/NOBU}}",
    "payment_method": "wallet"
}'
go
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://api-stage.ifortepay.id/ewallet/v2/cancel-qr"
  method := "POST"

  payload := strings.NewReader(`{
    "transaction_id": "{{mcp_transaction_id}}",
    "external_id": "{{merchant_external_id}}",
    "order_id": "{{order_id}}",
    "payment_channel": "{{channel_name: SHOPEEPAY/NOBU}}",
    "payment_method": "wallet"
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Authorization", "{{Authorization}}")
  req.Header.Add("x-req-signature", "{{x-req-signature}}")
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("x-version", "v3")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
js
var axios = require('axios');
var data = JSON.stringify({
  "transaction_id": "{{mcp_transaction_id}}",
  "external_id": "{{merchant_external_id}}",
  "order_id": "{{order_id}}",
  "payment_channel": "{{channel_name: SHOPEEPAY/NOBU}}",
  "payment_method": "wallet"
});

var config = {
  method: 'post',
maxBodyLength: Infinity,
  url: 'https://api-stage.ifortepay.id/ewallet/v2/cancel-qr',
  headers: { 
    'Authorization': '{{Authorization}}', 
    'x-req-signature': '{{x-req-signature}}', 
    'Content-Type': 'application/json', 
    'x-version': 'v3'
  },
  data : data
};

axios(config)
.then(function (response) {
  console.log(JSON.stringify(response.data));
})
.catch(function (error) {
  console.log(error);
});
php
use GuzzleHttp\Client;

$client = new Client();
$headers = [
  'Authorization' => '{{Authorization}}',
  'x-req-signature' => '{{x-req-signature}}',
  'Content-Type' => 'application/json',
  'x-version' => 'v3'
];
$body = '{
  "transaction_id": "{{mcp_transaction_id}}",
  "external_id": "{{merchant_external_id}}",
  "order_id": "{{order_id}}",
  "payment_channel": "{{channel_name: SHOPEEPAY/NOBU}}",
  "payment_method": "wallet"
}';

$request = new Request('POST', 'https://api-stage.ifortepay.id/ewallet/v2/cancel-qr', $headers, $body);
$res = $client->sendAsync($request)->wait();
echo $res->getBody();
Example Response
json
{
  "transaction_id": "123456",
  "external_id": "123456",
  "order_id": "123456",
  "response_code": "00",
  "payment_method": "wallet",
  "payment_channel": "SHOPEEPAY",
  "transaction_status": "CANCELED"
}

iFortepay API Documentation