Płatności single-click

Płatności single-click pozwalają na zakup jednym kliknięciem – klient nie musi podawać żadnych informacji. Usługa wykorzystuje mechanizm resale (podobnie jak płatności cykliczne) pozwalający na pobranie środków z karty.

Możesz dokonywać takich transakcji wykorzystując informacje, które klient podał przy innej okazji, np.:

Single-click bazujące na wcześniejszych transakcjach

Po przeprowadzeniu pierwszej transakcji, możesz łatwo przeprowadzić kolejne wykorzystując informacje podane przy pierwszej płatności. Oznacza to, że nie musisz wymagać podania informacji o karcie i kliencie za każdym razem, co stanowi duże udogodnienie dla Ciebie oraz kupujących.

Jeśli powracający klient zainicjuje transakcję (np. klikając przycisk “Kup” na stronie produktu), możesz wykorzystać informacje z jego wcześniejszej płatności.

Pozyskaj numer ID poprzedniej transakcji. Jeśli przeprowadziłeś ją bezpośrednio przed ponownym pobraniem środków (resale), możesz otrzymać numer ID z informacji zwracanych przez metodę cardSale.

Sprawdzenie statusu transakcji, pobranie numeru ID czy sprawdzenie informacji o ewentualnym błędzie odbywa się w taki sam sposób, jak przy zwykłej płatności.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$resale_params = array(
    'id_sale'     => $id_first_sale,
    'amount'      => 99.99,
    'currency'    => 'EUR',
    'description' => 'Recurring billing product #1',
);  

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

// checking transaction status example (optional):
if ($client->isSuccess()) {
    echo "Success, second id_sale: {$status['id_sale']} \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
23
resale_params = {
    'id_sale'     => id_first_sale,
    'amount'      => 99.99,
    'currency'    => 'EUR',
    'description' => 'Recurring billing product #1'
}

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

# checking transaction status example (optional):
if client.success?
    puts "Success, id_second_sale: #{status["id_sale"]}"
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
20
resale_params = {
  'id_sale'     : id_first_sale,
  'amount'      : 99.99,
  'currency'    : 'EUR',
  'description' : 'Recurring billing product #1'
}

# perform the resale:
try:
    status = client.resale_by_sale(resale_params)
except Exception, e:
    # handle exceptions here

# checking transaction status example (optional):
if client.is_success():
    print 'Success, second id_sale: %s' % status['id_sale']
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
20
21
22
23
24
25
api.resaleSale(
    idFirstSale,
    99.99,
    "EUR",
    "Recurring billing product #1",
    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.
        }
    }
);

Single-click bazujące na autoryzacji

Nie musisz wymagać wcześniej zrealizowanej płatności, by udostępnić klientowi usługę single-click. Wystarczy, jesli klient poda informacje potrzebne do jej zrealizowania. Może zrobić to np. podczas zakładania konta w Twoim e-sklepie lub zapisując się do Twojej usługi.

Gdy pozyskasz takie informacje, musisz tylko autoryzować kartę i zapisać otrzymany numer ID.

1
$id_authorization = $status['id_authorization'];
1
id_authorization = status["id_authorization"]
1
id_authorization = status['id_authorization']
1
2
AuthorizationResult result =...;
long idAuthorization = result.getIdAuthorization();

Dzięki numerowi ID autoryzacji możesz dokonywać dalszych obciążeń karty. Najczęściej sprzedawcy zapisują taki numer w swojej bazie danych – dzięki temu są w stanie używać go w przyszłości do powtórnych obciążeń, a jednocześnie nie muszą operować wrażliwymi danymi.

Teraz przygotuj informacje potrzebne do obciążenia karty (wykonania resale’a). Potrzebujesz jedynie numeru ID autoryzacji oraz informacje opisujące transakcję.

Sprawdzenie statusu transakcji, pobranie numeru ID czy sprawdzenie informacji o ewentualnym błędzie odbywa się w taki sam sposób, jak przy zwykłej płatności.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$resale_params = array(
    'id_authorization' => $id_authorization,
    'amount'           => 99.99,
    'currency'         => 'EUR',
    'description'      => 'Recurring billing product #1',
);  

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

// checking transaction status example (optional):
if ($client->isSuccess()) {
    echo "Success, second id_sale: {$status['id_sale']} \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
23
resale_params = {
    'id_authorization' => id_authorization,
    'amount'           => 99.99,
    'currency'         => 'EUR',
    'description'      => 'Recurring billing product #1'
}

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

# checking transaction status example (optional):
if client.success?
    puts "Success, id_second_sale: #{status["id_sale"]}"
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
20
resale_params = {
  'id_authorization' : id_authorization,
  'amount'           : 99.99,
  'currency'         : 'EUR',
  'description'      : 'Recurring billing product #1'
}

# perform the resale:
try:
    status = client.resale_by_authorization(resale_params)
except Exception, e:
    # handle exceptions here

# checking transaction status example (optional):
if client.is_success():
    print 'Success, second id_sale: %s' % status['id_sale']
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.resaleAuthorization(idAuthorization, 99.99, "EUR", "Recurring billing product #1", 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.
    }
});