From d02e1a7124a9280d523bec9fa72b9cb799f6113c Mon Sep 17 00:00:00 2001 From: Stepan Kosatyi Date: Mon, 12 Sep 2016 18:49:02 +0300 Subject: [PATCH 1/4] clear empty params in getSignature method --- Ipsp/Resource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Ipsp/Resource.php b/Ipsp/Resource.php index 10c0d70..09b872c 100644 --- a/Ipsp/Resource.php +++ b/Ipsp/Resource.php @@ -30,7 +30,7 @@ class Ipsp_Resource { * @return string */ private function getSignature(Array $params){ - $params = array_filter($params); + $params = array_filter($params,'strlen'); ksort($params); $params = array_values($params); array_unshift( $params , $this->client->getPassword() ); From 58be9a8c1fab10c31cc975ec92e9a01169f8edde Mon Sep 17 00:00:00 2001 From: Stepan Kosatyi Date: Mon, 12 Sep 2016 18:50:03 +0300 Subject: [PATCH 2/4] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ddcf694..c05eb58 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ $ipsp = new Ipsp_Api( $client ); Date: Wed, 22 Mar 2017 11:42:50 +0200 Subject: [PATCH 3/4] fix unsupported php tags --- Ipsp/Client.php | 1 + Ipsp/Curl.php | 2 +- Ipsp/Resource.php | 1 + Ipsp/Resource/Capture.php | 2 +- Ipsp/Resource/Checkout.php | 2 +- Ipsp/Resource/P2pcredit.php | 2 +- Ipsp/Resource/Pcidss.php | 2 +- Ipsp/Resource/PcidssConfirm.php | 2 +- Ipsp/Resource/Recurring.php | 2 +- Ipsp/Resource/Reports.php | 2 +- Ipsp/Resource/Result.php | 2 +- Ipsp/Resource/Reverse.php | 2 +- Ipsp/Resource/Status.php | 2 +- Ipsp/Resource/Verification.php | 2 +- 14 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Ipsp/Client.php b/Ipsp/Client.php index c02dda7..4586948 100644 --- a/Ipsp/Client.php +++ b/Ipsp/Client.php @@ -1,4 +1,5 @@ Date: Sat, 17 Jun 2017 06:36:49 +0300 Subject: [PATCH 4/4] PSR4 --- .gitignore | 2 + Ipsp/Error.php | 6 --- autoload.php | 11 ----- composer.json | 15 ++++++ init.example.php | 9 ++-- {Ipsp => src}/Api.php | 20 ++++---- {Ipsp => src}/Client.php | 4 +- {Ipsp => src}/Curl.php | 6 ++- src/Error.php | 8 ++++ {Ipsp => src}/Request.php | 8 ++-- {Ipsp => src}/Resource.php | 18 +++---- {Ipsp => src}/Resource/Capture.php | 9 +++- {Ipsp => src}/Resource/Checkout.php | 9 +++- {Ipsp => src}/Resource/P2pcredit.php | 8 +++- {Ipsp => src}/Resource/Pcidss.php | 8 +++- {Ipsp => src}/Resource/PcidssConfirm.php | 8 +++- {Ipsp => src}/Resource/Recurring.php | 8 +++- {Ipsp => src}/Resource/Reports.php | 8 +++- {Ipsp => src}/Resource/Result.php | 9 +++- {Ipsp => src}/Resource/Reverse.php | 10 ++-- {Ipsp => src}/Resource/Status.php | 9 +++- {Ipsp => src}/Resource/Verification.php | 9 +++- src/Resources/Capture.php | 35 ++++++++++++++ src/Resources/Checkout.php | 42 +++++++++++++++++ src/Resources/P2pcredit.php | 53 +++++++++++++++++++++ src/Resources/Pcidss.php | 60 ++++++++++++++++++++++++ src/Resources/PcidssConfirm.php | 39 +++++++++++++++ src/Resources/Recurring.php | 46 ++++++++++++++++++ src/Resources/Reports.php | 37 +++++++++++++++ src/Resources/Result.php | 33 +++++++++++++ src/Resources/Reverse.php | 41 ++++++++++++++++ src/Resources/Status.php | 31 ++++++++++++ src/Resources/Verification.php | 52 ++++++++++++++++++++ {Ipsp => src}/Response.php | 6 ++- {Ipsp => src}/XmlData.php | 4 +- 35 files changed, 612 insertions(+), 69 deletions(-) delete mode 100644 Ipsp/Error.php delete mode 100644 autoload.php create mode 100644 composer.json rename {Ipsp => src}/Api.php (85%) rename {Ipsp => src}/Client.php (96%) rename {Ipsp => src}/Curl.php (99%) create mode 100644 src/Error.php rename {Ipsp => src}/Request.php (95%) rename {Ipsp => src}/Resource.php (94%) rename {Ipsp => src}/Resource/Capture.php (85%) rename {Ipsp => src}/Resource/Checkout.php (89%) rename {Ipsp => src}/Resource/P2pcredit.php (91%) rename {Ipsp => src}/Resource/Pcidss.php (93%) rename {Ipsp => src}/Resource/PcidssConfirm.php (86%) rename {Ipsp => src}/Resource/Recurring.php (89%) rename {Ipsp => src}/Resource/Reports.php (87%) rename {Ipsp => src}/Resource/Result.php (86%) rename {Ipsp => src}/Resource/Reverse.php (88%) rename {Ipsp => src}/Resource/Status.php (83%) rename {Ipsp => src}/Resource/Verification.php (91%) create mode 100644 src/Resources/Capture.php create mode 100644 src/Resources/Checkout.php create mode 100644 src/Resources/P2pcredit.php create mode 100644 src/Resources/Pcidss.php create mode 100644 src/Resources/PcidssConfirm.php create mode 100644 src/Resources/Recurring.php create mode 100644 src/Resources/Reports.php create mode 100644 src/Resources/Result.php create mode 100644 src/Resources/Reverse.php create mode 100644 src/Resources/Status.php create mode 100644 src/Resources/Verification.php rename {Ipsp => src}/Response.php (94%) rename {Ipsp => src}/XmlData.php (93%) diff --git a/.gitignore b/.gitignore index 9f11b75..b9991e5 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ .idea/ + +/vendor/ diff --git a/Ipsp/Error.php b/Ipsp/Error.php deleted file mode 100644 index fcb1ae0..0000000 --- a/Ipsp/Error.php +++ /dev/null @@ -1,6 +0,0 @@ -=5.4", + "ext-simplexml":"*", + "ext-curl": "*" + }, + "autoload": { + "psr-4": { + "Ipsp\\": "src/" + } + } +} diff --git a/init.example.php b/init.example.php index a54d486..ccb6990 100644 --- a/init.example.php +++ b/init.example.php @@ -1,7 +1,10 @@ client = $client; set_error_handler(array($this, 'handleError')); set_exception_handler(array($this, 'handleException')); @@ -28,10 +30,10 @@ public function __construct( Ipsp_Client $client ){ * @return bool */ public function initResource($name){ - $class = implode('_',array('Ipsp','Resource',ucfirst($name))); - if(!class_exists($class)) new \Exception(sprintf('ipsp resource "%s" not found',$class)); - $resource = new $class; - return $resource; + $class = '\Ipsp\Resources\\' . ucfirst($name); + if(!class_exists($class)) + new \Exception(sprintf('"%s" not found',$class)); + return new $class; } /** * @param null $name @@ -91,4 +93,4 @@ public function handleException(\Exception $e) { ); exit($msg); } -} +} \ No newline at end of file diff --git a/Ipsp/Client.php b/src/Client.php similarity index 96% rename from Ipsp/Client.php rename to src/Client.php index 4586948..0baea2b 100644 --- a/Ipsp/Client.php +++ b/src/Client.php @@ -1,9 +1,11 @@ curl = new Ipsp_Curl; + $this->curl = new Curl; } /** * @param $format diff --git a/Ipsp/Resource.php b/src/Resource.php similarity index 94% rename from Ipsp/Resource.php rename to src/Resource.php index 0803ba1..f3a237c 100644 --- a/Ipsp/Resource.php +++ b/src/Resource.php @@ -1,9 +1,11 @@ xmlToArray(); return $data; } @@ -100,7 +102,7 @@ private function formParams($params=array()){ * @return mixed */ private function xmlParams($params=array()){ - $xml = new Ipsp_XmlData(''); + $xml = new XmlData(''); $xml->arrayToXml($params); return $xml->asXML(); } @@ -119,14 +121,14 @@ protected function buildParams($params){ } } public function __construct(){ - $this->request = new Ipsp_Request(); + $this->request = new Request(); if(!empty($this->defaultParams)) $this->params = $this->defaultParams; } /** - * @param Ipsp_Client $client + * @param Client $client */ - public function setClient(Ipsp_Client $client){ + public function setClient(Client $client){ $this->client = $client; } /** @@ -201,7 +203,7 @@ public function call( $params=array() ){ * @param array $data */ public function setResponse($data=array()){ - $this->response = new Ipsp_Response($data); + $this->response = new Response($data); } /** * @return array diff --git a/Ipsp/Resource/Capture.php b/src/Resource/Capture.php similarity index 85% rename from Ipsp/Resource/Capture.php rename to src/Resource/Capture.php index 2ff9ebd..ef7ae80 100644 --- a/Ipsp/Resource/Capture.php +++ b/src/Resource/Capture.php @@ -1,9 +1,14 @@ array( diff --git a/Ipsp/Resource/Checkout.php b/src/Resource/Checkout.php similarity index 89% rename from Ipsp/Resource/Checkout.php rename to src/Resource/Checkout.php index ba0363d..40ffabb 100644 --- a/Ipsp/Resource/Checkout.php +++ b/src/Resource/Checkout.php @@ -1,9 +1,14 @@ array( diff --git a/Ipsp/Resource/P2pcredit.php b/src/Resource/P2pcredit.php similarity index 91% rename from Ipsp/Resource/P2pcredit.php rename to src/Resource/P2pcredit.php index f990cc5..96aebfa 100644 --- a/Ipsp/Resource/P2pcredit.php +++ b/src/Resource/P2pcredit.php @@ -1,9 +1,13 @@ array( diff --git a/Ipsp/Resource/Result.php b/src/Resource/Result.php similarity index 86% rename from Ipsp/Resource/Result.php rename to src/Resource/Result.php index b070283..18015fb 100644 --- a/Ipsp/Resource/Result.php +++ b/src/Resource/Result.php @@ -1,9 +1,14 @@ array( diff --git a/Ipsp/Resource/Verification.php b/src/Resource/Verification.php similarity index 91% rename from Ipsp/Resource/Verification.php rename to src/Resource/Verification.php index eb0a9f3..f4e7a24 100644 --- a/Ipsp/Resource/Verification.php +++ b/src/Resource/Verification.php @@ -1,9 +1,14 @@ 'y', diff --git a/src/Resources/Capture.php b/src/Resources/Capture.php new file mode 100644 index 0000000..511405e --- /dev/null +++ b/src/Resources/Capture.php @@ -0,0 +1,35 @@ +array( + 'type' => 'string', + 'required'=>TRUE + ), + 'order_id'=>array( + 'type' => 'string', + 'required'=>TRUE + ), + 'currency' => array( + 'type' => 'string', + 'required'=>TRUE + ), + 'amount' => array( + 'type' => 'integer', + 'required'=>TRUE + ), + 'signature' => array( + 'type' => 'string', + 'required'=>TRUE + ) + ); +} \ No newline at end of file diff --git a/src/Resources/Checkout.php b/src/Resources/Checkout.php new file mode 100644 index 0000000..9637f24 --- /dev/null +++ b/src/Resources/Checkout.php @@ -0,0 +1,42 @@ +array( + 'type' => 'string', + 'required'=>TRUE + ), + 'order_id'=>array( + 'type' => 'string', + 'required'=>TRUE + ), + 'order_desc'=>array( + 'type' => 'string', + 'required'=>TRUE + ), + 'currency' => array( + 'type' => 'string', + 'required'=>TRUE + ), + 'amount' => array( + 'type' => 'integer', + 'required'=>TRUE + ), + 'signature' => array( + 'type' => 'string', + 'required'=>TRUE + ) + ); + public function redirectToCheckout(){ + $this->getResponse()->redirectTo('checkout_url'); + } +} \ No newline at end of file diff --git a/src/Resources/P2pcredit.php b/src/Resources/P2pcredit.php new file mode 100644 index 0000000..d356709 --- /dev/null +++ b/src/Resources/P2pcredit.php @@ -0,0 +1,53 @@ +array( + 'type' => 'string', + 'required'=>TRUE + ), + 'order_id'=>array( + 'type' => 'string', + 'required'=>TRUE + ), + 'order_desc'=>array( + 'type' => 'string', + 'required'=>TRUE + ), + 'currency' => array( + 'type' => 'string', + 'required'=>TRUE + ), + 'amount' => array( + 'type' => 'integer', + 'required'=>TRUE + ), + 'receiver_card_number'=>array( + 'type' => 'string', + 'required'=>FALSE + ), + 'receiver_rectoken'=>array( + 'type' => 'string', + 'required'=>FALSE + ), + 'signature' => array( + 'type' => 'string', + 'required'=>TRUE + ), + 'version' => array( + 'type' => 'string', + 'required'=>FALSE + ) + ); +} \ No newline at end of file diff --git a/src/Resources/Pcidss.php b/src/Resources/Pcidss.php new file mode 100644 index 0000000..2ffe5df --- /dev/null +++ b/src/Resources/Pcidss.php @@ -0,0 +1,60 @@ + array( + 'type' => 'string', + 'required' => TRUE + ), + 'order_desc' => array( + 'type' => 'string', + 'required' => TRUE + ), + 'currency' => array( + 'type' => 'string', + 'required' => TRUE + ), + 'amount' => array( + 'type' => 'datetime', + 'required' => TRUE + ), + 'card_number' => array( + 'type' => 'creditcard', + 'required' => TRUE + ), + 'cvv2' => array( + 'type' => 'cvv', + 'required' => TRUE + ), + 'expiry_date' => array( + 'type' => 'datetime', + 'required' => TRUE + ) + ); + + public function acsRedirect( ){ + $response = $this->response; + if(!$response->acs_url) return FALSE; + $data = array( + 'PaReq' => $response->pareq, + 'MD' => $response->md, + 'TermUrl' => $this->getParam('response_url') + ); + $html = "
"; + foreach ($data as $key => $value) + $html .= ""; + $html .= "
"; + $html .= ""; + exit($html); + } + +} \ No newline at end of file diff --git a/src/Resources/PcidssConfirm.php b/src/Resources/PcidssConfirm.php new file mode 100644 index 0000000..500bbac --- /dev/null +++ b/src/Resources/PcidssConfirm.php @@ -0,0 +1,39 @@ + array( + 'type' => 'string', + 'required' => TRUE + ), + 'merchant_id' => array( + 'type' => 'string', + 'required' => TRUE + ), + 'pares' => array( + 'type' => 'string', + 'required' => TRUE + ), + 'md' => array( + 'type' => 'string', + 'required' => TRUE + ), + 'version' => array( + 'type' => 'cvv', + 'required' => FALSE + ), + 'signature' => array( + 'type' => 'string', + 'required' => TRUE + ) + ); +} \ No newline at end of file diff --git a/src/Resources/Recurring.php b/src/Resources/Recurring.php new file mode 100644 index 0000000..f5cf2c1 --- /dev/null +++ b/src/Resources/Recurring.php @@ -0,0 +1,46 @@ +array( + 'type' => 'string', + 'required'=>TRUE + ), + 'order_id'=>array( + 'type' => 'string', + 'required'=>TRUE + ), + 'currency' => array( + 'type' => 'string', + 'required'=>TRUE + ), + 'amount' => array( + 'type' => 'integer', + 'required'=>TRUE + ), + 'signature' => array( + 'type' => 'string', + 'required'=>TRUE + ), + 'rectoken' => array( + 'type' => 'string', + 'required'=>TRUE + ), + 'version' => array( + 'type' => 'string', + 'required'=>FALSE + ) + ); + +} \ No newline at end of file diff --git a/src/Resources/Reports.php b/src/Resources/Reports.php new file mode 100644 index 0000000..35d9643 --- /dev/null +++ b/src/Resources/Reports.php @@ -0,0 +1,37 @@ +array( + 'type' => 'string', + 'required'=> TRUE + ), + 'date_from'=>array( + 'type' => 'string', + 'format' => '', + 'required' => TRUE + ), + 'date_to' => array( + 'type' => 'string', + 'format' => '' , + 'required'=> TRUE + ), + 'signature' => array( + 'type' => 'string', + 'required'=>TRUE + ), + 'version' => array( + 'type' => 'string', + 'required'=>FALSE + ) + ); + +} \ No newline at end of file diff --git a/src/Resources/Result.php b/src/Resources/Result.php new file mode 100644 index 0000000..df59233 --- /dev/null +++ b/src/Resources/Result.php @@ -0,0 +1,33 @@ +parseResponseData(); + } else{ + $this->setResponse($data); + } + return $this; + } + private function parseResponseData(){ + $body = file_get_contents('php://input'); + $types = $this->request->getContentTypes(); + $types = array_flip($types); + $type = explode(';',$_SERVER['CONTENT_TYPE']); + $type = trim($type[0]); + if(isset($types[$type])){ + $this->format = $types[$type]; + $data = $this->parseRespose($body); + $this->setResponse($data); + } + } +} \ No newline at end of file diff --git a/src/Resources/Reverse.php b/src/Resources/Reverse.php new file mode 100644 index 0000000..ece2420 --- /dev/null +++ b/src/Resources/Reverse.php @@ -0,0 +1,41 @@ +array( + 'type' => 'string', + 'required'=>TRUE + ), + 'order_id'=>array( + 'type' => 'string', + 'required'=>TRUE + ), + 'currency' => array( + 'type' => 'string', + 'required'=>TRUE + ), + 'amount' => array( + 'type' => 'integer', + 'required'=>TRUE + ), + 'signature' => array( + 'type' => 'string', + 'required'=>TRUE + ), + 'version' => array( + 'type' => 'string', + 'required'=>FALSE + ) + ); + +} \ No newline at end of file diff --git a/src/Resources/Status.php b/src/Resources/Status.php new file mode 100644 index 0000000..1bed6d2 --- /dev/null +++ b/src/Resources/Status.php @@ -0,0 +1,31 @@ +array( + 'type' => 'string', + 'required'=>TRUE + ), + 'merchant_id'=>array( + 'type' => 'string', + 'required'=>TRUE + ), + 'signature' => array( + 'type' => 'string', + 'required'=>TRUE + ), + 'version' => array( + 'type' => 'string', + 'required'=>FALSE + ) + ); +} \ No newline at end of file diff --git a/src/Resources/Verification.php b/src/Resources/Verification.php new file mode 100644 index 0000000..884b04f --- /dev/null +++ b/src/Resources/Verification.php @@ -0,0 +1,52 @@ +'y', + 'verification_type'=>'code' + ); + protected $fields = array( + 'merchant_id'=>array( + 'type' => 'string', + 'required'=>TRUE + ), + 'order_id'=>array( + 'type' => 'string', + 'required'=>TRUE + ), + 'currency' => array( + 'type' => 'string', + 'required'=>TRUE + ), + 'amount' => array( + 'type' => 'integer', + 'required'=>TRUE + ), + 'verification'=>array( + 'type' => 'string', + 'equal'=> 'y' + ), + 'verification_type'=>array( + 'type' => 'string', + 'equal'=> 'y', + 'required'=>TRUE + ), + 'signature' => array( + 'type' => 'string', + 'required'=>TRUE + ), + 'version' => array( + 'type' => 'string', + 'required'=>FALSE + ) + ); +} \ No newline at end of file diff --git a/Ipsp/Response.php b/src/Response.php similarity index 94% rename from Ipsp/Response.php rename to src/Response.php index c0abff0..767a6b2 100644 --- a/Ipsp/Response.php +++ b/src/Response.php @@ -1,9 +1,11 @@ data = $data; diff --git a/Ipsp/XmlData.php b/src/XmlData.php similarity index 93% rename from Ipsp/XmlData.php rename to src/XmlData.php index 9b1645d..cec9ffb 100644 --- a/Ipsp/XmlData.php +++ b/src/XmlData.php @@ -1,6 +1,8 @@