Class Mypos\IPC\Purchase
Process IPC method: IPCPurchase. Collect, validate and send API params
- Mypos\IPC\Base
Mypos\IPC\Purchase
Methods summary
public |
|
public Mypos\IPC\Purchase |
|
public Mypos\IPC\Purchase |
|
public Mypos\IPC\Purchase |
|
public Mypos\IPC\Purchase |
|
public |
#
setCardTokenRequest( integer $cardTokenRequest )
Whether to return Card Token for current client card |
public |
#
setPaymentParametersRequired( integer $paymentParametersRequired )
Defines the packet of details needed from merchant and client to make payment |
public boolean |
|
public boolean |
|
public string |
|
public |
|
public string |
|
public Mypos\IPC\Purchase |
|
public integer |
|
public integer |
#
getPaymentParametersRequired( )
Defines the packet of details needed from merchant and client to make payment |
public string |
|
public Mypos\IPC\Purchase |
|
public Mypos\IPC\Cart |
|
public Mypos\IPC\Purchase |
|
public Mypos\IPC\Customer |
|
public Mypos\IPC\Purchase |
|
public string |
|
public string |
|
public mixed |
|
public |
Methods inherited from Mypos\IPC\Base
_addPostParam()
, _processHtmlPost()
, _processPost()
, getCnf()
, getOutputFormat()
, isValidSignature()
, setCnf()
, setOutputFormat()
Constants summary
Constants summary
integer |
PURCHASE_TYPE_FULL
|
#
1 |
integer |
PURCHASE_TYPE_SIMPLIFIED_CALL
|
#
2 |
integer |
PURCHASE_TYPE_SIMPLIFIED_PAYMENT_PAGE
|
#
3 |
integer |
CARD_TOKEN_REQUEST_NONE
|
#
0 |
integer |
CARD_TOKEN_REQUEST_ONLY_STORE
|
#
1 |
integer |
CARD_TOKEN_REQUEST_PAY_AND_STORE
|
#
2 |
integer |
PAYMENT_METHOD_STANDARD
|
#
1 |
integer |
PAYMENT_METHOD_IDEAL
|
#
2 |
integer |
PAYMENT_METHOD_BOTH
|
#
3 |
Properties summary
Properties inherited from Mypos\IPC\Base
Example
<?php namespace Mypos\IPC; /** * Process IPC method: IPCPurchase. * Collect, validate and send API params */ class Purchase extends Base { const PURCHASE_TYPE_FULL = 1; const PURCHASE_TYPE_SIMPLIFIED_CALL = 2; const PURCHASE_TYPE_SIMPLIFIED_PAYMENT_PAGE = 3; const CARD_TOKEN_REQUEST_NONE = 0; const CARD_TOKEN_REQUEST_ONLY_STORE = 1; const CARD_TOKEN_REQUEST_PAY_AND_STORE = 2; const PAYMENT_METHOD_STANDARD = 1; const PAYMENT_METHOD_IDEAL = 2; const PAYMENT_METHOD_BOTH = 3; /** * @var Cart */ private $cart; /** * @var Customer */ private $customer; private $url_ok, $url_cancel, $url_notify; private $currency = 'EUR', $note, $orderID, $cardTokenRequest, $paymentParametersRequired; private $paymentMethod; /** * Return purchase object * * @param Config $cnf */ public function __construct(Config $cnf) { $this->setCnf($cnf); } /** * Purchase identifier - must be unique * * @param string $orderID * * @return Purchase */ public function setOrderID($orderID) { $this->orderID = $orderID; return $this; } /** * Optional note to purchase * * @param string $note * * @return Purchase */ public function setNote($note) { $this->note = $note; return $this; } /** * Merchant Site URL where client comes after unsuccessful payment * * @param string $urlCancel * * @return Purchase */ public function setUrlCancel($urlCancel) { $this->url_cancel = $urlCancel; return $this; } /** * Merchant Site URL where IPC posts Purchase Notify requests * * @param string $urlNotify * * @return Purchase */ public function setUrlNotify($urlNotify) { $this->url_notify = $urlNotify; return $this; } /** * Whether to return Card Token for current client card * * @param integer $cardTokenRequest */ public function setCardTokenRequest($cardTokenRequest) { $this->cardTokenRequest = $cardTokenRequest; } /** * Defines the packet of details needed from merchant and client to make payment * * @param integer $paymentParametersRequired */ public function setPaymentParametersRequired($paymentParametersRequired) { $this->paymentParametersRequired = $paymentParametersRequired; } /** * Initiate API request * * @return boolean */ public function process() { $this->validate(); $this->_addPostParam('IPCmethod', 'IPCPurchase'); $this->_addPostParam('IPCVersion', $this->getCnf()->getVersion()); $this->_addPostParam('IPCLanguage', $this->getCnf()->getLang()); $this->_addPostParam('SID', $this->getCnf()->getSid()); $this->_addPostParam('WalletNumber', $this->getCnf()->getWallet()); $this->_addPostParam('KeyIndex', $this->getCnf()->getKeyIndex()); $this->_addPostParam('Source', $this->getCnf()->getSource()); $this->_addPostParam('Currency', $this->getCurrency()); if (!$this->isNoCartPurchase()) { $this->_addPostParam('Amount', $this->cart->getTotal()); } $this->_addPostParam('OrderID', $this->getOrderID()); $this->_addPostParam('URL_OK', $this->getUrlOk()); $this->_addPostParam('URL_Cancel', $this->getUrlCancel()); $this->_addPostParam('URL_Notify', $this->getUrlNotify()); $this->_addPostParam('Note', $this->getNote()); if ($this->getPaymentParametersRequired() != self::PURCHASE_TYPE_SIMPLIFIED_PAYMENT_PAGE) { $this->_addPostParam('customeremail', $this->getCustomer()->getEmail()); $this->_addPostParam('customerphone', $this->getCustomer()->getPhone()); $this->_addPostParam('customerfirstnames', $this->getCustomer()->getFirstName()); $this->_addPostParam('customerfamilyname', $this->getCustomer()->getLastName()); $this->_addPostParam('customercountry', $this->getCustomer()->getCountry()); $this->_addPostParam('customercity', $this->getCustomer()->getCity()); $this->_addPostParam('customerzipcode', $this->getCustomer()->getZip()); $this->_addPostParam('customeraddress', $this->getCustomer()->getAddress()); } if (!$this->isNoCartPurchase()) { $this->_addPostParam('CartItems', $this->cart->getItemsCount()); $items = $this->cart->getCart(); $i = 1; foreach ($items as $v) { $this->_addPostParam('Article_' . $i, $v['name']); $this->_addPostParam('Quantity_' . $i, $v['quantity']); $this->_addPostParam('Price_' . $i, $v['price']); $this->_addPostParam('Amount_' . $i, $v['price'] * $v['quantity']); $this->_addPostParam('Currency_' . $i, $this->getCurrency()); $i++; } } $this->_addPostParam('CardTokenRequest', $this->getCardTokenRequest()); $this->_addPostParam('PaymentParametersRequired', $this->getPaymentParametersRequired()); $this->_addPostParam('PaymentMethod', $this->getPaymentMethod()); $this->_processHtmlPost(); return true; } /** * Validate all set purchase details * * @return boolean * @throws IPC_Exception */ public function validate() { if ($this->getUrlCancel() === null || !Helper::isValidURL($this->getUrlCancel())) { throw new IPC_Exception('Invalid Cancel URL'); } if ($this->getUrlNotify() === null || !Helper::isValidURL($this->getUrlNotify())) { throw new IPC_Exception('Invalid Notify URL'); } if ($this->getUrlOk() === null || !Helper::isValidURL($this->getUrlOk())) { throw new IPC_Exception('Invalid Success URL'); } if ($this->getCardTokenRequest() === null || !in_array($this->getCardTokenRequest(), [ self::CARD_TOKEN_REQUEST_NONE, self::CARD_TOKEN_REQUEST_ONLY_STORE, self::CARD_TOKEN_REQUEST_PAY_AND_STORE, ])) { throw new IPC_Exception('Invalid value provided for CardTokenRequest params'); } if ($this->getPaymentParametersRequired() === null || !in_array($this->getPaymentParametersRequired(), [ self::PURCHASE_TYPE_FULL, self::PURCHASE_TYPE_SIMPLIFIED_CALL, self::PURCHASE_TYPE_SIMPLIFIED_PAYMENT_PAGE, ])) { throw new IPC_Exception('Invalid value provided for PaymentParametersRequired params'); } if ($this->getCurrency() === null) { throw new IPC_Exception('Invalid currency'); } try { $this->getCnf()->validate(); } catch (\Exception $ex) { throw new IPC_Exception('Invalid Config details: ' . $ex->getMessage()); } if (!$this->isNoCartPurchase()) { try { $this->getCart()->validate(); } catch (\Exception $ex) { throw new IPC_Exception('Invalid Cart details: ' . $ex->getMessage()); } } if ($this->getPaymentParametersRequired() == self::PURCHASE_TYPE_FULL) { try { if (!$this->getCustomer()) { throw new IPC_Exception('Customer details not set!'); } $this->getCustomer()->validate($this->getPaymentParametersRequired()); } catch (\Exception $ex) { throw new IPC_Exception('Invalid Customer details: ' . $ex->getMessage()); } } return true; } /** * Merchant Site URL where client comes after unsuccessful payment * * @return string */ public function getUrlCancel() { return $this->url_cancel; } /** * Merchant Site URL where IPC posts Purchase Notify requests * * @var string */ public function getUrlNotify() { return $this->url_notify; } /** * Merchant Site URL where client comes after successful payment * * @return string */ public function getUrlOk() { return $this->url_ok; } /** * Merchant Site URL where client comes after successful payment * * @param string $urlOk * * @return Purchase */ public function setUrlOk($urlOk) { $this->url_ok = $urlOk; return $this; } /** * Whether to return Card Token for current client card * * @return integer */ public function getCardTokenRequest() { return $this->cardTokenRequest; } /** * Defines the packet of details needed from merchant and client to make payment * * @return integer */ public function getPaymentParametersRequired() { return $this->paymentParametersRequired; } /** * ISO-4217 Three letter currency code * * @return string */ public function getCurrency() { return $this->currency; } /** * ISO-4217 Three letter currency code * * @param string $currency * * @return Purchase */ public function setCurrency($currency) { $this->currency = $currency; return $this; } /** * If request is only for card token request without payment, the Amount and Cart params are not required * * @return bool */ private function isNoCartPurchase() { return $this->getCardTokenRequest() == self::CARD_TOKEN_REQUEST_ONLY_STORE; } /** * Cart object * * @return Cart */ public function getCart() { return $this->cart; } /** * Cart object * * @param Cart $cart * * @return Purchase */ public function setCart(Cart $cart) { $this->cart = $cart; return $this; } /** * @return Customer */ public function getCustomer() { return $this->customer; } /** * Customer object * * @param Customer $customer * * @return Purchase */ public function setCustomer(Customer $customer) { $this->customer = $customer; return $this; } /** * Purchase identifier * * @return string */ public function getOrderID() { return $this->orderID; } /** * Optional note to purchase * * @return string */ public function getNote() { return $this->note; } /** * @return mixed */ public function getPaymentMethod() { return $this->paymentMethod; } /** * @param mixed $paymentMethod */ public function setPaymentMethod($paymentMethod) { $this->paymentMethod = $paymentMethod; } }