Skip to main content

Request proforma refund

Last updated: 31-Aug-2022
Rate this article:


Use the requestProformaRefund method to initiate a refund for a paid partner proforma.


Parameter Type/Description
Uuid Required (String)
  Partner unique identifier.
proformaNumber Required (String)
  The unique identifier of a partner proforma in the 2Checkout system.
comment Optional (String)
  Refund reason/additional comments. Can be NULL.


Parameter Type/Description
result Boolean
  True or false


class Configuration
    public const MERCHANT_CODE = 'BogdanB';
    public const MERCHANT_KEY = 'SECRET_KEY';
    public const URL = '';
    public const ACTION = 'requestProformaRefund';
    public const ADDITIONAL_OPTIONS = null;
    //array or JSON
    public const PAYLOAD = <<<JSON
            "Uuid": "96f2a739-ca6f-46bd-af03-f42e5048f653",
            "ProformaNumber": "6", 
            "Comment": "Comment"
class Client
    private const LOGIN_METHOD = 'login';
    private $calls = 1;
    private $sessionId;
    private function generateAuth(): array
        $merchantCode = Configuration::MERCHANT_CODE;
        $key = Configuration::MERCHANT_KEY;
        $date = gmdate('Y-m-d H:i:s');
        $string = strlen($merchantCode) . $merchantCode . strlen($date) . $date;
        $hash = hash_hmac('md5', $string, $key);
        return compact('merchantCode', 'date', 'hash');
    public function login(string $url)
        $payload = $this->generateAuth();
        $response = $this->call($url, array_values($payload), self::LOGIN_METHOD);
        $this->sessionId = $response['result'];
    public function call(
        string $url = Configuration::URL,
               $payload = Configuration::PAYLOAD,
        string $action = Configuration::ACTION
    ): ?array {
        if (empty($this->sessionId) && $action !== self::LOGIN_METHOD) {
        if(is_string($payload)) {
            $payload = json_decode($payload, true);
        if (!empty($this->sessionId)) {
            $payload = [$this->sessionId, Configuration::ADDITIONAL_OPTIONS, $payload];
        $payload = array_filter($payload);
        $request = json_encode([
            'jsonrpc' => '2.0',
            'method' => $action,
            'params' => $payload,
            'id' => $this->calls++,
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($curl, CURLOPT_SSLVERSION, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Accept: application/json', 'Cookie: XDEBUG_SESSION=PHPSTORM'));
        curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
        $response = curl_exec($curl);
        if(empty($response)) {
            die('Server unavailable');
        echo $response . '</br>';
        return json_decode($response, true);;
$client = new Client();
$result = $client->call();


Error Description


No partner is set.


Your partner invoice number is not valid.


A refund request was already placed for this partner invoice.


The partner invoice needs to be paid in order to send a refund request.

Rate this article:

Need help?

Do you have a question? If you didn’t find the answer you are looking for in our documentation, you can contact our Support teams for more information. If you have a technical issue or question, please contact us. We are happy to help.

Not yet a Verifone customer?

We’ll help you choose the right payment solution for your business, wherever you want to sell, in-person or online. Our team of experts will happily discuss your needs.

Verifone logo