PHP Класс Omnipay\PayPal\Message\RestAuthorizeRequest

To collect payment at a later time, first authorize a payment using the /payment resource. You can then capture the payment to complete the sale and collect payment. This looks exactly like a RestPurchaseRequest object except that the intent is set to "authorize" (to authorize a payment to be captured later) rather than "sale" (which is used to capture a payment immediately). ### Example #### Initialize Gateway Create a gateway for the PayPal RestGateway (routes to GatewayFactory::create) $gateway = Omnipay::create('PayPal_Rest'); Initialise the gateway $gateway->initialize(array( 'clientId' => 'MyPayPalClientId', 'secret' => 'MyPayPalSecret', 'testMode' => true, // Or false when you are ready for live transactions )); #### Direct Credit Card Authorize This is for the use case where a customer has presented their credit card details and you intend to use the PayPal REST gateway for processing a transaction using that credit card data. This does not require the customer to have a PayPal account. Create a credit card object DO NOT USE THESE CARD VALUES -- substitute your own see the documentation in the class header. $card = new CreditCard(array( 'firstName' => 'Example', 'lastName' => 'User', 'number' => '4111111111111111', 'expiryMonth' => '01', 'expiryYear' => '2020', 'cvv' => '123', 'billingAddress1' => '1 Scrubby Creek Road', 'billingCountry' => 'AU', 'billingCity' => 'Scrubby Creek', 'billingPostcode' => '4999', 'billingState' => 'QLD', )); Do an authorisation transaction on the gateway $transaction = $gateway->authorize(array( 'amount' => '10.00', 'currency' => 'AUD', 'description' => 'This is a test authorize transaction.', 'card' => $card, )); $response = $transaction->send(); if ($response->isSuccessful()) { echo "Authorize transaction was successful!\n"; Find the authorization ID $auth_id = $response->getTransactionReference(); } Direct credit card payment and related features are restricted in some countries. As of January 2015 these transactions are only supported in the UK and in the USA. #### PayPal Account Authorization This is for the use case where the customer intends to pay using their PayPal account. Note that no credit card details are provided, instead both a return URL and a cancel URL are required. The optimal solution here is to provide a unique return URL and cancel URL per transaction. That way your code will know what transaction is being returned or cancelled by PayPal. So step 1 is to store some transaction data somewhere on your system so that you have an ID when your transaction returns. How you do this of course depends on what framework, database layer, etc, you are using but for this step let's assume that you have a class set up that can save a transaction and return the object, and that you can retrieve the ID of that saved object using some call like getId() on the object. Most ORMs such as Doctrine ORM, Propel or Eloquent will have some methods that will allow you to do this or something similar. $transaction = MyClass::saveTransaction($some_data); $txn_id = $transaction->getId(); Step 2 is to send the purchase request. Do a purchase transaction on the gateway try { $transaction = $gateway->authorize(array( 'amount' => '10.00', 'currency' => 'AUD', 'description' => 'This is a test authorize transaction.', 'returnUrl' => 'http://mysite.com/paypal/return/?txn_id=' . $txn_id, 'cancelUrl' => 'http://mysite.com/paypal/return/?txn_id=' . $txn_id, )); $response = $transaction->send(); $data = $response->getData(); echo "Gateway purchase response data == " . print_r($data, true) . "\n"; if ($response->isSuccessful()) { echo "Step 2 was successful!\n"; } } catch (\Exception $e) { echo "Exception caught while attempting authorize.\n"; echo "Exception type == " . get_class($e) . "\n"; echo "Message == " . $e->getMessage() . "\n"; } Step 3 is where your code needs to redirect the customer to the PayPal gateway so that the customer can sign in to their PayPal account and agree to authorize the payment. The response will implement an interface called RedirectResponseInterface from which the redirect URL can be obtained. How you do this redirect is up to your platform, code or framework at this point. For the below example I will assume that there is a function called redirectTo() which can handle it for you. if ($response->isRedirect()) { Redirect the customer to PayPal so that they can sign in and authorize the payment. echo "The transaction is a redirect"; redirectTo($response->getRedirectUrl()); } Step 4 is where the customer returns to your site. This will happen on either the returnUrl or the cancelUrl, that you provided in the purchase() call. If the cancelUrl is called then you can assume that the customer has not authorized the payment, therefore you can cancel the transaction. If the returnUrl is called, then you need to complete the transaction via a further call to PayPal. Note this example assumes that the authorize has been successful. The payer ID and the payment ID returned from the callback after the authorize will be passed to the return URL as GET parameters payerId and paymentId respectively. $paymentId = $_GET['paymentId']; $payerId = $_GET['payerId']; Once the transaction has been approved, we need to complete it. $transaction = $gateway->completePurchase(array( 'payer_id' => $payer_id, 'transactionReference' => $sale_id, )); $response = $transaction->send(); if ($response->isSuccessful()) { The customer has successfully paid. echo "Step 4 was successful!\n"; } else { There was an error returned by completePurchase(). You should check the error code and message from PayPal, which may be something like "card declined", etc. } #### Note on Handling Error Messages PayPal account payments are a 2 step process. Firstly the customer needs to authorize the payment from PayPal to your application. Secondly, assuming that the customer does not have enough balance to pay the invoice from their PayPal balance, PayPal needs to transfer the funds from the customer's credit card to their PayPal account. This transaction is between PayPal and the customer, and not between the customer and you. If the second transaction fails then a call to completePurchase() will return an error. However this error message will be fairly generic. For privacy reasons, PayPal will not disclose to the merchant the full reason for the failure, they will only disclose this to the customer. Therefore on a failed completeAuthorize() call you could display an error message like this one: "PayPal failed to process the transaction from your card. For privacy reasons, PayPal are unable to disclose to us the reason for this failure. You should try a different payment method, a different card within PayPal, or contact PayPal support if you need to understand the reason for the failed transaction. PayPal may advise you to use a different card if the particular card is rejected by the card issuer."
См. также: RestCaptureRequest
См. также: RestPurchaseRequest
Наследование: extends AbstractRestRequest
Показать файл Открыть проект

Открытые методы

Метод Описание
getData ( )
getDescription ( ) : string Get transaction description.
getExperienceProfileId ( ) : string Get the experience profile id
setExperienceProfileId ( string $value ) : RestAuthorizeRequest Set the experience profile id

Защищенные методы

Метод Описание
createResponse ( $data, $statusCode )
getEndpoint ( ) : string Get transaction endpoint.

Описание методов

createResponse() защищенный Метод

protected createResponse ( $data, $statusCode )

getData() публичный Метод

public getData ( )

getDescription() публичный Метод

The REST API does not currently have support for passing an invoice number or transaction ID.
public getDescription ( ) : string
Результат string

getEndpoint() защищенный Метод

Authorization of payments is done using the /payment resource.
protected getEndpoint ( ) : string
Результат string

getExperienceProfileId() публичный Метод

Get the experience profile id
public getExperienceProfileId ( ) : string
Результат string

setExperienceProfileId() публичный Метод

Set the experience profile id
public setExperienceProfileId ( string $value ) : RestAuthorizeRequest
$value string
Результат RestAuthorizeRequest provides a fluent interface.