Official OpenPayU PHP Library
The OpenPayU PHP library provides integration access to the REST API 2.1, (*1)
Dependencies
PHP >= 5.3 with extensions cURL and hash, (*2)
Documentation
Full implementation guide: English, Polish., (*3)
To process operations such as:
- order status update
- order retrieve
- order cancel, (*4)
You will need to provide a parameter called orderId. The value of orderId is your order identifier that is set by PayU
Payment system, and it's used to invoke remote methods., (*5)
There are two ways to get orderId:, (*6)
- It is present inside the received notification message from PayU Payment System as a result of payment.
- In the response from method OpenPayU_Order::create.
In both cases you will find orderId using this statement: $response->getResponse()->orderId
., (*7)
Installation
Composer
To install with Composer, simply add the requirement to your composer.json file:, (*8)
{
"require" : {
"openpayu/openpayu" : "2.3.*"
}
}
Then install by running, (*9)
composer.phar install
Manual installation
Obtain the latest version of openpayu_php SDK with:, (*10)
git clone https://github.com/PayU/openpayu_php.git
Getting started
If you are using Composer use autoload functionality:, (*11)
include "vendor/autoload.php";
Or simply add this lines anywhere in your application:, (*12)
require_once 'lib/openpayu.php';
require_once realpath(dirname(__FILE__)) . '/../../config.php';
Important: SDK works only with 'REST API' (Checkout) points of sales (POS).
If you do not already have PayU merchant account, please register in Production or [please register in Sandbox][ext6], (*13)
Example "Configuration keys" from Merchant Panel, (*14)
, (*15)
To configure OpenPayU environment you must provide a set of mandatory data in config.php file., (*16)
For production environment:, (*17)
//set Production Environment
OpenPayU_Configuration::setEnvironment('secure');
//set POS ID and Second MD5 Key (from merchant admin panel)
OpenPayU_Configuration::setMerchantPosId('145227');
OpenPayU_Configuration::setSignatureKey('13a980d4f851f3d9a1cfc792fb1f5e50');
//set Oauth Client Id and Oauth Client Secret (from merchant admin panel)
OpenPayU_Configuration::setOauthClientId('145227');
OpenPayU_Configuration::setOauthClientSecret('12f071174cb7eb79d4aac5bc2f07563f');
For sandbox environment:, (*18)
//set Sandbox Environment
OpenPayU_Configuration::setEnvironment('sandbox');
//set POS ID and Second MD5 Key (from merchant admin panel)
OpenPayU_Configuration::setMerchantPosId('300046');
OpenPayU_Configuration::setSignatureKey('0c017495773278c50c7b35434017b2ca');
//set Oauth Client Id and Oauth Client Secret (from merchant admin panel)
OpenPayU_Configuration::setOauthClientId('300046');
OpenPayU_Configuration::setOauthClientSecret('c8d4b7ac61758704f38ed5564d8c0ae0');
If you want to use sandbox environment, register at this link https://secure.snd.payu.com/cp/register?lang=en, (*19)
OAuth configuration
SDK supports two PayU OAuth grant types: client_credentials
and trusted_merchant
. Default is client_credentials
., (*20)
If you want to change grant type use:, (*21)
OpenPayU_Configuration::setOauthGrantType('grant_type');
grant_type can be one of the following OauthGrantType::CLIENT_CREDENTIAL
or OauthGrantType::TRUSTED_MERCHANT
, (*22)
Parameters needed for client_credentials
, (*23)
//set Oauth Client Id and Oauth Client Secret (from merchant admin panel)
OpenPayU_Configuration::setOauthClientId('300046');
OpenPayU_Configuration::setOauthClientSecret('c8d4b7ac61758704f38ed5564d8c0ae0');
Parameters needed for trusted_merchant
, (*24)
//set Oauth Client Id and Oauth Client Secret (from merchant admin panel)
OpenPayU_Configuration::setOauthClientId('clent_id');
OpenPayU_Configuration::setOauthClientSecret('clent_secret');
//set Oauth Email and Oauth Ext Customer Id
OpenPayU_Configuration::setOauthEmail('email');
OpenPayU_Configuration::setOauthExtCustomerId('ext_customer_id');
Connection over Proxy
OpenPayU_Configuration::setProxyHost('address');
OpenPayU_Configuration::setProxyPort(8080);
OpenPayU_Configuration::setProxyUser('user');
OpenPayU_Configuration::setProxyPassword('password');
Cache
OpenPayU library automatically stores OAuth authentication data in the Cache., (*25)
OpenPayU library has two classes implemented to manage the Cache:, (*26)
-
OauthCacheFile
- data is stored in the file system.
This is a default and automatic Cache method which stores the data in lib/Cache
folder.
ATTENTION: for security reasons it is recommended to change the Cache folder, so it would not be accessible from the web browser., (*27)
Configuration:, (*28)
OpenPayU_Configuration::setOauthTokenCache(new OauthCacheFile($directory));
$directory
- absolute path to the data folder; if the parameter is missing, the folder is lib/Cache
, (*29)
-
OauthCacheMemcached
- data is stored in Memcached
This method requires Memcached (https://memcached.org/) to be installed on the server along with Memcached PHP module (http://php.net/manual/en/book.memcached.php), (*30)
Configuration:, (*31)
OpenPayU_Configuration::setOauthTokenCache(new OauthCacheMemcached($host, $port, $weight));
$host
- Memcached server address - localhost
by default
$port
- Memcached server port - 11211
by default
$weight
- Memcached server priority - 0
by default, (*32)
It is possible to implement another method to manage cache. In such a case it needs to implement OauthCacheInterface
, (*33)
Usage
Remember: All keys in "order array" must be in lowercase., (*34)
Creating order using REST API
File with working example: examples/v2/order/OrderCreate.php, (*35)
To create an order using REST API in back-end you must provide an Array with order data:, (*36)
in your controller, (*37)
$order['continueUrl'] = 'http://localhost/'; //customer will be redirected to this page after successfull payment
$order['notifyUrl'] = 'http://localhost/';
$order['customerIp'] = $_SERVER['REMOTE_ADDR'];
$order['merchantPosId'] = OpenPayU_Configuration::getMerchantPosId();
$order['description'] = 'New order';
$order['currencyCode'] = 'PLN';
$order['totalAmount'] = 3200;
$order['extOrderId'] = '1342'; //must be unique!
$order['products'][0]['name'] = 'Product1';
$order['products'][0]['unitPrice'] = 1000;
$order['products'][0]['quantity'] = 1;
$order['products'][1]['name'] = 'Product2';
$order['products'][1]['unitPrice'] = 2200;
$order['products'][1]['quantity'] = 1;
//optional section buyer
$order['buyer']['email'] = 'dd@ddd.pl';
$order['buyer']['phone'] = '123123123';
$order['buyer']['firstName'] = 'Jan';
$order['buyer']['lastName'] = 'Kowalski';
$response = OpenPayU_Order::create($order);
header('Location:'.$response->getResponse()->redirectUri); //You must redirect your client to PayU payment summary page.
Retrieving order from OpenPayU
File with working example: examples/v2/order/OrderRetrieve.php, (*38)
You can retrieve order by its PayU order_id, (*39)
$response = OpenPayU_Order::retrieve('Z963D5JQR2230925GUEST000P01'); //as parameter use orderId
Retrieving transactions for order from OpenPayU
File with working example: examples/v2/order/OrderTransactionRetrieve.php, (*40)
You can retrieve transactions for order by its PayU order_id, (*41)
$response = OpenPayU_Order::retrieveTransaction('Z963D5JQR2230925GUEST000P01'); //as parameter use orderId
Cancelling order
File with working example: examples/v2/order/OrderCancel.php, (*42)
You can cancel order by its PayU order_id, (*43)
$response = OpenPayU_Order::cancel('Z963D5JQR2230925GUEST000P01'); //as parameter use orderId
Updating order status
File with working example: examples/v2/order/OrderStatusUpdate.php, (*44)
You can update order status to accept order., (*45)
$status_update = array(
"orderId" => 'Z963D5JQR2230925GUEST000P01', //as value use ORDER_ID
"orderStatus" => 'COMPLETED'
);
$response = OpenPayU_Order::statusUpdate($status_update);
Handling notifications from PayU
File with working example: examples/v2/order/OrderNotify.php, (*46)
PayU sends requests to your application when order status changes, (*47)
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$body = file_get_contents('php://input');
$data = trim($body);
$response = OpenPayU_Order::consumeNotification($data);
$response->getResponse()->order->status; //NEW PENDING CANCELED REJECTED COMPLETED WAITING_FOR_CONFIRMATION
header("HTTP/1.1 200 OK");
}
Refund money
File with working example: examples/v2/refund/RefundCreate.php, (*48)
You can create refund to refund money on buyer account, (*49)
$refund = OpenPayU_Refund::create(
'Z963D5JQR2230925GUEST000P01', //as a value use ORDER_ID
'Money refund', //Description - required
'100', //Amount - If not provided, returns whole transaction, optional
'ext-customer-id', // External submerchant ID, required only for marketplace
'ext-refund-id' // External refund ID, required only for marketplace
);
Retrieving pay methods from POS
File with working example: examples/v2/retrieve/RetrievePaymethods.php, (*50)
You can retrieve pay methods from POS, (*51)
$response = OpenPayU_Retrieve::payMethods();
You can add optional parameter lang
to payMethods()
, (*52)
$response = OpenPayU_Retrieve::payMethods('en');
Delete card token
File with working example: examples/v2/token/TokenDelete.php, (*53)
You can delete user's card token., (*54)
Token deletion is possible only for trusted_merchant
grant type., (*55)
$refund = OpenPayU_Token::delete(
'TOKC_EXAMPLE_TOKEN' // as a value use user card token
);
Get Shop
File with working example: examples/v2/shops/Get.php, (*56)
You can retrieve shop data., (*57)
$shop = OpenPayU_Shop::get(
'PUBLIC_SHOP_ID' // Shop ID from Merchant Panel
);
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
)
- Commit your changes (
git commit -am 'Add some feature'
)
- Push to the branch (
git push origin my-new-feature
)
- Create new Pull Request
, (*58)