Zwrot środków

Zdarza się, że chcesz zwrócić klientowi pieniądze (np. oddał lub reklamował towar) – całą kwotę lub tylko jej część. Do tego właśnie służy refund, czyli zwrot środków; pozwala na oddanie określonej kwoty w powiązaniu z konkretną transakcją.

Aby przeprowadzić refund, musisz znać numer ID transakcji, który jednoznacznie identyfikuje daną płatność w systemach PayLane. Możesz łatwo pozyskać ten numer podczas dokonywania transakcji na przykład:

1
2
$status = $client->cardSale($card_params);
$id_sale = $status['id_sale'];
1
2
status = client.card_sale(card_params)
id_sale = status['id_sale']
1
2
status = client.card_sale(card_params)
id_sale = status['id_sale']
1
2
3
4
5
6
api.cardSale(sale, customer, card, new Callback<CardSaleResult>() {
    @Override
    public void onFinish(CardSaleResult result) {
        long idFirstSale = result.getIdSale();
    }
});
Na stronie Pojedyncza transakcja znajdziesz więcej informacji na temat dokonywania pojedynczej płatności.

Zazwyczaj sprzedawcy zapisują takie numery ID transakcji w swoich bazach danych. Dzięki temu nie muszą sami przechowywać wrażliwych danych i wciąż są w stanie odnieść się do konkretnej płatności.

Przygotuj dane potrzebne do wykonania refunda. Zauważ, że możesz podać kwotę transakcji lub mniejszą; jeśli podasz kwotę większą niż kwota transakcji, system zwróci błąd. Możesz również określić walutę oraz powód zwrotu środków.

Podobnie jak w przypadku każdej innej transakcji, tak i tu możesz sprawdzić czy refund został wykonany prawidłowo wywołując metodę isSuccess. Pozyskanie numeru ID refundu (lub danych o błędzie, jeśli operacja się nie powiodła) jest również bardzo proste i może wyglądać jak na poniższym przykładzie.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$refund_params = array(
    'id_sale' => $id_sale,
    'amount'  => 9.99,
    'reason'  => 'Partial refund',
);

// perform the refund:
try {
    $status = $client->refund($refund_params);
} catch (Exception $e) {
    // handle exceptions here
}

// checking refund status example (optional):
if ($client->isSuccess()) {
    echo "Success, id_refund: {$status['id_refund']} \n";
} else {
    die("Error ID: {$status['error']['id_error']}, \n".
        "Error number: {$status['error']['error_number']}, \n".
        "Error description: {$status['error']['error_description']}");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
refund_params = {
    'id_sale' => id_sale,
    'amount'  => 9.99,
    'reason'  => 'Partial refund.'
}

# perform the refund:
begin
    status = client.refund(refund_params)
rescue PayLane::ClientError => e
    # handle exceptions here
end

# checking refund status example (optional):
if client.success?
    puts "Success, id_refund: #{status["id_refund"]}"
else
    puts "Error ID: #{status["error"]["id_error"]}, \n"\
         "Error number: #{status["error"]["error_number"]}, \n"\
         "Error description: #{status["error"]["error_description"]}"
    exit
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
refund_params = {
  'id_sale' : id_sale,
  'amount'  : 9.99,
  'reason'  : 'Partial refund'
}

# perform the refund:
try:
    status = client.refund(refund_params)
except Exception, e:
    # handle exceptions here

# checking refund status example (optional):
if client.is_success():
    print 'Success, id_refund: %s' % status['id_refund']
else:
    sys.exit('Error ID: ' + str(status["error"]["id_error"]) + '\n' \
             'Error number: ' + str(status["error"]["error_number"]) + '\n' \
             'Error description: ' + str(status["error"]["error_description"]))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
api.refund(idSale, 9.99, "EUR", "Partial refund", new Callback<FraudSaleResult>() {

    @Override
    public void onFinish(FraudSaleResult result) {
        // success
    }

    @HandleException
    public void onProtocolError(ProtocolException e) {
        // invoke if not success
        // e.getCode() - error code
        // e.getMessage() - error message
    }

    @Override
    public void onError(Exception e) {
        // connection error etc.
    }
});