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->paypalSale($paypal_params);
$id_sale = $status['id_sale'];
1
2
status = client.paypal_sale(paypal_params)
id_sale = status['id_sale']
1
2
status = client.paypal_sale(paypal_params)
id_sale = status['id_sale']
1
2
3
4
5
6
api.payPalSale(sale,"http://example-page.com",new Callback<RedirectSaleResult>() {
    @Override
    public void onFinish(RedirectSaleResult result) {
        long idSale=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 (wywołaj metodę refund). 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
$refund_params = array(
    'id_sale'  => $id_sale,
    'amount'   => 9.99,
    'reason'   => 'Partial refund',
);

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

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
refund_params = {
    'id_sale' => id_sale,
    'amount'  => 9.99,
    'reason'  => 'Partial refund.'
}

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

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
refund_params = {
  'id_sale'  : id_sale,
  'amount'   : 9.99,
  'reason'   : 'Partial refund'
}

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

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.
    }
});