Autoryzacja

Możesz nie chcieć od razu pobrać pieniędzy z karty klienta, ale jedynie autoryzować jego kartę. To dość użyteczne w wielu przypadkach, takich jak:

  • pobieranie numeru karty podczas zakładania darmowego konta próbnego w Twojej usłudze (później można już automatycznie obciążać kartę),
  • sprawdzanie karty (np. czy są dostępne środki lub czy transakcje internetowe nie są zablokowane),
  • potwierdzenie numeru karty, gdy klient tworzy konto w Twoim e-sklepie (np. jeśli chcesz mu udostępnić płatności single-click).

Autoryzacja karty skutkuje zablokowaniem określonej kwoty na karcie klienta (na pewien czas). Możesz zablokować całą kwotę danej transakcji (i pobrać środki później) lub zablokować tylko 1 zł (lub $1, €1, £1…), aby jedynie zweryfikować kartę.

Przygotuj dane potrzebne do autoryzacji karty. Będą to identyczne informacje jak w przypadku “zwykłej” płatności kartą.

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
26
$card_params = array(
    'sale' => array(
        'amount'      => 1.00,
        'currency'    => 'EUR',
        'description' => 'Product #1'
    ),
    'customer' => array(
        'name'    => 'John Doe',
        'email'   => 'john@doe.com',
        'ip'      => '127.0.0.1',
        'address' => array (
             'street_house' => '1600 Pennsylvania Avenue Northwest',
            'city'          => 'Washington',
            'state'         => 'DC',
            'zip'           => '500',
            'country_code'  => 'US',
        ),
    ),
    'card' => array(
        'card_number'      => '4111111111111111',
        'expiration_month' => '03',
        'expiration_year'  => '2017',
        'name_on_card'     => 'John Doe',
        'card_code'        => '123',
     ),
);
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
26
card_params = {
    'sale' => {
        'amount'      => 19.99,
        'currency'    => 'EUR',
        'description' => 'Product #1',
    },
    'customer' => {
        'name'    => 'John Doe',
        'email'   => 'john@doe.com',
        'ip'      => '127.0.0.1',
        'address' => {
            'street_house' => '1600 Pennsylvania Avenue Northwest',
            'city'         => 'Washington',
            'state'        => 'DC',
            'zip'          => '500',
            'country_code' => 'US'
        }
    },
    'card' => {
        'card_number'      => '4111111111111111',
        'expiration_month' => '03',
        'expiration_year'  => '2017',
        'name_on_card'     => 'John Doe',
        'card_code'        => '123'
    }
}
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
26
card_params = {
  'sale' : {
    'amount'      : 19.99,
    'currency'    : 'EUR',
    'description' : 'Product #1'
  },
  'customer' : {
    'name'    : 'John Doe',
    'email'   : 'john@doe.com',
    'ip'      : '127.0.0.1',
    'address' : {
      'street_house' : '1600 Pennsylvania Avenue Northwest',
      'city'         : 'Washington',
      'state'        : 'DC',
      'zip'          : '500',
      'country_code' : 'US'
    }
  },
  'card' : {
    'card_number'      : '4111111111111111',
    'expiration_month' : '03',
    'expiration_year'  : '2017',
    'name_on_card'     : 'John Doe',
    'card_code'        : '123'
  }
}
1
2
3
4
Sale sale = new Sale(19.99, "EUR", "Product #1");
Address address = new Address("1600 Pennsylvania Avenue Northwest", "Washington", "DC", "500", "US");
Customer customer = new Customer("John Doe", "john@doe.com", "127.0.0.1", address);
Card card = new Card("4111111111111111", "03", "2017", "John Doe", "123");

Mając te dane, po prostu wywołaj metodę cardAuthorization (podobnie jak w przypadku płatności wywołasz cardSale).

Możesz łatwo sprawdzić, czy autoryzacja się powiodła oraz sprawdzić numer ID autoryzacji – możesz go potem użyć do ponownych obciążeń karty (resale), jeśli chcesz wykorzystać np. płatności cykliczne lub single-click.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
try {
    $status = $client->cardAuthorization($card_params);
} catch (Exception $e) {
    // handle exceptions here
}

// checking authorization status example (optional):
if ($client->isSuccess()) {
    echo "Success, id_authorization: {$status['id_authorization']} \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
begin
    status = client.card_authorization(card_params)
rescue PayLane::ClientError => e
    # handle exceptions here
end

# checking authorization status example (optional):
if client.success?
    puts "Success, id_authorization: #{status["id_authorization"]}"
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
try:
    status = client.card_authorization(card_params)
except Exception, e:
    # handle exceptions here

# checking authorization status example (optional):
if client.is_success():
    print 'Success, id_authorization: %s' % status['id_authorization']
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.cardAuthorization(sale, customer, card, new Callback<AuthorizationResult>() {

    @Override
    public void onFinish(AuthorizationResult 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.
    }
});