Simplest installation is using composer
:
$ composer require seberm/paypal-component
or manually you can edit composer.json
:
"require": {
"seberm/paypal-component": "1.0.*"
}
Add following lines into your config.neon
file.
parameters: ...
---------------------------
paypal:
api:
username: 'seberm_1332081338_biz_api1.gmail.com'
password: '1332081363'
signature: 'AWiH1IO0zFZrEQbbn0JwDZHbWukIAebmYjpOylRCqBGGgztea2bku.N4'
sandbox: true # default is false
extensions:
paypal: Seberm\DI\PayPalExtension
---------------------------
php:
date.timezone: Europe/Prague
...
More about DI container extensions you can find here: https://doc.nette.org/en/2.3/di-extensions
Alternatively you can configure component via factories.
parameters:
paypal:
api:
username: 'seberm_1332081338_biz_api1.gmail.com'
password: '1332081363'
signature: 'AWiH1IO0zFZrEQbbn0JwDZHbWukIAebmYjpOylRCqBGGgztea2bku.N4'
sandbox: true
factories:
paypalOrderButton:
implement: Seberm\Components\PayPal\Buttons\IOrderFactory
setup:
- setCredentials(%paypal.api%)
- setSandBox(%paypal.sandbox%)
Firstly, you have to get IOrderFactory object.
/** @var \Seberm\Components\PayPal\Buttons\IOrderFactory @inject */
public $factory;
/** @var \Seberm\Components\PayPal\Buttons\IOrderFactory $factory */
public $factory;
/**
* @param \Seberm\Components\PayPal\Buttons\IOrderFactory $factory
*/
public function injectFactory(\Seberm\Components\PayPal\Buttons\IOrderFactory $factory)
{
$this->factory = $factory;
}
Following code will be the same for both methods.
/** @var \Seberm\Components\PayPal\Buttons\Order */
private $orderButton;
public function startup()
{
parent::startup();
$this->orderButton = $this->factory->create();
$this->orderButton->setSessionSection($this->session->getSection('paypal'));
$this->orderButton->onSuccessPayment[] = array($this, 'successPayment');
}
/**
* Creates new button control. After that you can load this control in template
* via {control paypalButton}.
* @return Seberm\Components\PayPal\Buttons\Order
*/
protected function createComponentPaypalButton()
{
$control = $this->orderButton;
$control->setCurrencyCode(\Seberm\PayPal\API\API::CURRENCY_EURO);
$control->onConfirmation[] = array($this, 'confirmOrder');
$control->onError[] = array($this, 'errorOccurred');
$control->onCancel[] = array($this, 'canceled');
// It is possible to set shipping
$button->shipping = 4.3;
// or set a tax
$button->tax = 3.1;
$price = 56; // In Euro in this example
$control->addItemToCart('Product A', 'A - Product description', $price);
$control->addItemToCart('Product B', 'B - Product description', 123);
return $control;
}
This method is called after successful confirmation. It has one argument $data
.
public function successPayment($data) {
/**
* Here you can proccess information about user. For example save him to the
* database...
*/
$payerID = $data->payerID;
$firstName = $data->firstName;
$lastName = $data->lastName;
$email = $data->email;
// See dump($data);
}
Following method is called if some error occures (for example error in communication). It receives an array of errors.
public function errorOccurred($errors) { ... }
// It is called if payment inicialization succeeds
public function confirmOrder($data) {
/**
* Here you can do some checks of the order data. If everything is ok,
* you can confirm the order with confirmExpressCheckout() method.
*/
...
$this->orderButton->confirmExpressCheckout();
}
public function canceled($data) { ... } // Called if user cancels his order
Add following control macro where you want to have your PayPal button.
{control paypalButton}