Autoryzacja

Możesz nie chcieć od razu pobrać środków klienta, a jedynie dokonać autoryzacji. Może to być użyteczne w różnych przypadkach biznesowych, np. gdy chcesz sprawdzić, czy płatność jest możliwa lub zablokować środki, by pobrać je (lub ich część) później.

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

1
2
3
4
5
6
7
8
$paypal_params = array(
    'sale'     => array(
        'amount'      => 19.99,
        'currency'    => 'EUR',
        'description' => 'Product #1'
    ),
    'back_url'  => 'http://example-page.com',
);
1
2
3
4
5
6
7
8
paypal_params = {
    'sale' => {
        'amount'      => 19.99,
        'currency'    => 'EUR',
        'description' => 'Product #1'
    },
    'back_url' => 'http://example-page.com'
}
1
2
3
4
5
6
7
8
paypal_params = {
  'sale' : {
    'amount'      : 19.99,
    'currency'    : 'EUR',
    'description' : 'Product #1'
  },
  'back_url' : 'http://example.com'
}
1
Sale sale = new Sale(19.99, "EUR", "Product #1");

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

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

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

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
begin
    status = client.paypal_authorization(paypal_params)
rescue PayLane::ClientError => e
    # handle exceptions here
end

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
try:
    status = client.paypal_authorization(paypal_params)
except Exception, e:
    # handle exceptions here

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
api.payPalAuthorization(sale, "http://example-page.com", new Callback<PayPalAuthorizationResult>() {
    @Override
    public void onFinish(PayPalAuthorizationResult 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.
    }
});