Skip to content

Commit

Permalink
Return whole Reuqest object instead of string
Browse files Browse the repository at this point in the history
  • Loading branch information
panda-madness committed Apr 13, 2018
1 parent a439220 commit d33a9eb
Show file tree
Hide file tree
Showing 13 changed files with 120 additions and 80 deletions.
6 changes: 3 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"description": "A PHP client for the Qazkom Epay payment gateway",
"type": "library",
"license": "MIT",
"version": "0.0.9",
"version": "0.1",
"authors": [
{
"name": "Margulan Baimbet",
Expand All @@ -12,10 +12,10 @@
],
"minimum-stability": "stable",
"require": {
"php": "^7"
"php": "^7.1"
},
"require-dev": {
"phpunit/phpunit": "^6"
"phpunit/phpunit": "^7"
},
"autoload": {
"psr-4": {
Expand Down
14 changes: 7 additions & 7 deletions src/Epay.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,20 @@

class Epay
{
protected $params;
protected $options;

protected $signer;
protected $certManager;

public function __construct($params = [])
public function __construct(array $options = [])
{
$this->params = $params;
$this->options = $options;

$this->certManager = new CertManager($params);
$this->certManager = new CertManager($options);
}

public function buildRequest(string $type, array $params)
public function buildRequest(string $type, array $requestParams)
{
return RequestFactory::create($type, array_merge($params, $this->params), $this->certManager)->getXML();
return RequestFactory::create($type, $this->options, $requestParams, $this->certManager);
}

public function parseResponse(string $type, string $body)
Expand Down
20 changes: 13 additions & 7 deletions src/Requests/AbstractRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@

abstract class AbstractRequest
{
/** @var array $params */
protected $params;
/** @var array $clientOptions */
protected $clientOptions;

/** @var array $requestParams */
protected $requestParams;

/** @var \SimpleXMLElement $xml */
protected $xml;
Expand All @@ -18,14 +21,15 @@ abstract class AbstractRequest
*/
protected $certManager;

public function __construct(array $params, CertManager $certManager)
public function __construct($clientOptions, $requestParams, CertManager $certManager)
{
$this->params = $params;
$this->certManager = $certManager;
$this->clientOptions = $clientOptions;
$this->requestParams = $requestParams;
$this->xml = $this->buildXML();
}

public function getXML() {
protected function getXML() {
$this->signXML();
return trim(
preg_replace('/^.+\n/', '', $this->xml->saveXML())
Expand All @@ -45,8 +49,10 @@ protected function signXML()
$merchantSign = $this->xml->addChild('merchant_sign', $signature);

$merchantSign->addAttribute('type', 'RSA');
$merchantSign->addAttribute('cert_id', $this->params['MERCHANT_CERTIFICATE_ID']);
$merchantSign->addAttribute('cert_id', $this->clientOptions['MERCHANT_CERTIFICATE_ID']);
}

abstract public function buildXML();
abstract protected function buildXML();

abstract public function getContents();
}
29 changes: 16 additions & 13 deletions src/Requests/PaymentRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,35 @@ public function buildXML()
$document = new \SimpleXMLElement('<document />');

$merchant = $document->addChild('merchant', null);
$merchant->addAttribute('cert_id', $this->params['MERCHANT_CERTIFICATE_ID']);
$merchant->addAttribute('name', $this->params['MERCHANT_NAME']);
$merchant->addAttribute('cert_id', $this->clientOptions['MERCHANT_CERTIFICATE_ID']);
$merchant->addAttribute('name', $this->clientOptions['MERCHANT_NAME']);

$order = $merchant->addChild('order');
$order->addAttribute('order_id', sprintf('%06d', $this->params['order_id']));
$order->addAttribute('amount', $this->params['amount']);
$order->addAttribute('currency', $this->params['currency']);
$order->addAttribute('order_id', sprintf('%06d', $this->requestParams['order_id']));
$order->addAttribute('amount', $this->requestParams['amount']);
$order->addAttribute('currency', $this->requestParams['currency']);

$department = $order->addChild('department');
$department->addAttribute('merchant_id', $this->params['MERCHANT_ID']);
$department->addAttribute('amount', $this->params['amount']);
$department->addAttribute('merchant_id', $this->clientOptions['MERCHANT_ID']);
$department->addAttribute('amount', $this->requestParams['amount']);

if(isset($this->params['fields'])) {
foreach ($this->params['fields'] as $field => $value) {
foreach ($this->requestParams['fields'] as $field => $value) {
$department->addAttribute($field, $value);
}
}

return $document;
}

public function getXML()
public function getContents()
{
$this->signXML();
$xml = preg_replace('/^.+\n/', '', $this->xml->saveXML());

return base64_encode($xml);
return [
'Signed_Order_B64' => base64_encode($this->getXML()),
'Backlink' => $this->requestParams['links']['BackLink'],
'FailureBacklink' => $this->requestParams['links']['FailureBackLink'],
'PostLink' => $this->requestParams['links']['PostLink'],
'FailurePostLink' => $this->requestParams['links']['FailurePostLink'],
];
}
}
11 changes: 6 additions & 5 deletions src/Requests/RequestFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,20 @@ class RequestFactory
{
/**
* @param string $type
* @param array $params
* @param \KkbEpay\SSL\CertManager $signer
* @param array $clientOptions
* @param array $requestParams
* @param \KkbEpay\SSL\CertManager $certManager
* @return \KkbEpay\Requests\AbstractRequest
*/
public static function create(string $type, array $params, CertManager $signer) : AbstractRequest {
public static function create(string $type, array $clientOptions, array $requestParams, CertManager $certManager): AbstractRequest {
$request = false;

switch ($type) {
case 'payment':
$request = new PaymentRequest($params, $signer);
$request = new PaymentRequest($clientOptions, $requestParams, $certManager);
break;
case 'status':
$request = new StatusRequest($params, $signer);
$request = new StatusRequest($clientOptions, $requestParams, $certManager);
break;
case 'remote':
break;
Expand Down
9 changes: 7 additions & 2 deletions src/Requests/StatusRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,16 @@ public function buildXML()
$document = new \SimpleXMLElement('<document />');

$merchant = $document->addChild('merchant', null);
$merchant->addAttribute('id', $this->params['MERCHANT_ID']);
$merchant->addAttribute('id', $this->clientOptions['MERCHANT_ID']);

$order = $merchant->addChild('order');
$order->addAttribute('id', sprintf('%06d', $this->params['order_id']));
$order->addAttribute('id', sprintf('%06d', $this->requestParams['order_id']));

return $document;
}

public function getContents()
{
return (string)$this->getXML();
}
}
8 changes: 4 additions & 4 deletions src/Responses/ResponseFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,18 @@ class ResponseFactory
/**
* @param string $type
* @param $body
* @param \KkbEpay\SSL\CertManager $signer
* @param \KkbEpay\SSL\CertManager $certManager
* @return \KkbEpay\Responses\AbstractResponse
*/
public static function create(string $type, $body, CertManager $signer) : AbstractResponse {
public static function create(string $type, $body, CertManager $certManager) : AbstractResponse {
$request = false;

switch ($type) {
case 'payment':
$request = new PaymentResponse($body, $signer);
$request = new PaymentResponse($body, $certManager);
break;
case 'status':
$request = new StatusResponse($body, $signer);
$request = new StatusResponse($body, $certManager);
break;
case 'remote':
break;
Expand Down
3 changes: 2 additions & 1 deletion src/Responses/StatusResponse.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ protected function parse(\SimpleXMLElement $xml)
return $props;
}

private function parseAttributes(\SimpleXMLElement $xml) {
private function parseAttributes(\SimpleXMLElement $xml): array
{
$props = [];

foreach ($xml->attributes() as $name => $value) {
Expand Down
Binary file removed test-certs/cert.der
Binary file not shown.
22 changes: 8 additions & 14 deletions test-certs/cert.prv
Original file line number Diff line number Diff line change
@@ -1,18 +1,12 @@
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,D7EAB35213AF0278
DEK-Info: DES-EDE3-CBC,25E4520A4E5EE17A

kNBrP8tIJOygO25g/R0ZocgY+WUPHE/xvVomhPf8hnD4X7ldn/NGYRXjsVJ5WPhB
4l0p95RNveQW2nlTyyRiqpymAD7iqM7ztpktTghh0Bjwl0Qk1zluxycCtZW3/HzW
vXdfOuQmftDh6gZsTQ5jx67YXZABqjTUV5RCAwwx4mklDC2TYpJd1pdVgdXjPCcP
LnREinm4QjFC7Ph27vbLc/no0PwJFgzzf4/UrYv0TFx90mwQCaz/gJg5h1nXolaG
3nTBXnND5jX99IdMOF1igGzGDAL8oLqclsP6d8Cq3/bHyENzPnAhXoro/oOH6q6F
3E+JY9ILIw6LCZr8JbE13XzCbbpds2kn+xTViGgbbgpTNx0q6AKwQtiwZsqcT7cu
mRoH4V8QdMEUO8AQV8LCH5xpw1qYbbfAFo2hM3le9lUqD5aOl8Dd19l0Im7rXC6/
QKGsweSqs+ysGjExP/xI9noH3kiE2vXlbiRmwUgoqYU5TSAV4t1RVsjm1zb8CtvY
B67OMPJx6ATN+bJs8mq54nz1Cpz6Nk7n2gUi+NWKleaxTcb1FOXTN3Zty5OM5LDs
WZqvaVawyaePaubVGGEcYB3Pq6MyJuxjROgneaU5Oxx3b+FyLoc197rELYsz+N1A
LpbJsnf+aXpKeLqDX5Nk0b9ZB4tOu+lWxfmUYZXAcvym32NhApXR5olkyqNVKSJi
GZZRtK+9gXPlKecB6/XZXm+H1hc6jw4gIesaEJ8b8YyYF3s6iJTGdba4D17kghQ7
XwXfhSxUBnkgI/RULCwnf8ZFjI7H92+qiiG/jW8JLMA=
r1Uz/b1FZpMJg0kh2efZoaXpLnEg9xR8rkU8nH5y5LTP7q15zldAWm0BqGax6ZHm
5xe/zTjFcZKYjh7NeINlTKrAnbNNYZnYxqqj9GGUa1gEpvHn8TukXB83cEbvsDeS
jrbvbj5itRqqa9fNNs4rzizVdaGFpQKVhCqx4u7lE8oWdR1WCUHOywpFpkpHznDr
od/B2JSzG6OekuwCB4tnyZmJ1RYncbsM7NysOGcUZcT9ZmfzteYkVjPxZKcHzjTr
pLzhlYeAr0by9jNhtodGaYoRHEs2cqK8zEPBRMmgDydVA9Fg2NIIDaBB7ugdjaUw
XuWUo1y5JrU0hRnB7FdAEizO1g5CNG5aZ5UDcg9jbNeKEqrZy2VcBKARYxVDUIlm
INB98tXargbAgbCRwKvn76m8R0ClBMlIHiMzP3LCTfQaJnCIIDirfA==
-----END RSA PRIVATE KEY-----
37 changes: 19 additions & 18 deletions test-certs/cert.pub
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
subject=/C=KZ/L=Almaty/O=JSC Kazkommertsbank/OU=HeadOffice/CN=\xD0\xA1\xD0\xB5\xD1\x80\xD0\xB3\xD0\xB5\xD0\xB9 \xD0\xA4\xD1\x80\xD0\xBE\xD0\xBB\xD0\xBE\xD0\xB2/[email protected]
issuer= /C=KZ/O=KKB/OU=CA/CN=KKB CA/[email protected]
-----BEGIN CERTIFICATE-----
MIIDcjCCAlqgAwIBAgIFAMGD1wswDQYJKoZIhvcNAQEEBQAwUzELMAkGA1UEBhMC
MIIDWTCCAkGgAwIBAgIFAMGCsYkwDQYJKoZIhvcNAQEEBQAwUzELMAkGA1UEBhMC
S1oxDDAKBgNVBAoTA0tLQjELMAkGA1UECxMCQ0ExDzANBgNVBAMTBktLQiBDQTEY
MBYGCSqGSIb3DQEJARYJY2FAa2tiLmt6MB4XDTE1MDkyOTEyNDAwMVoXDTIwMDky
NzEyNDAwMVowbTELMAkGA1UEBhMCS1oxEDAOBgNVBAcTB0FsYW1hdHkxEjAQBgNV
BAoTCUFPIEthemtvbTELMAkGA1UECxMCQVQxDzANBgNVBAMTBkthemtvbTEaMBgG
CSqGSIb3DQEJARYLZXBheUBra2Iua3owgZ4wDQYJKoZIhvcNAQEBBQADgYwAMIGI
AoGAfjRuKTpGUKQ7v0NRSWNCkXxps3mkpG6WnyiZaBE79OMdJL6LONcPAy+qez8T
hoL+Lgppiu6LOZdk5H6U1UZ3dR9beevcLkDRsZ4rEqPIq/vx2dr/eil21/NM/6Xr
HqJayfjHO3JJ7vcSh61Y+Cx5/z0ItzvLYI2gPCtZC+iBqSUCAwEAAaOBtzCBtDAd
BgNVHQ4EFgQUOM1ECUXpxi2uVEItCNMJbwePxZcwHwYDVR0jBBgwFoAU712nYyiv
xvN+d0LbneCElQZ9clMwDAYDVR0TBAUwAwEBADAOBgNVHQ8BAf8EBAMCBPAwNQYD
VR0fBC4wLDAqoCigJoYkaHR0cDovL3d3dy5ra2Iua3ovY2VydHJvb3Qva2tiY2Eu
Y3JsMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDANBgkqhkiG9w0BAQQF
AAOCAQEAQwVT2KyGzQRokVYLKqc0jwus9pNCgY/RoLFJA8RoJaCj4WzI39V0XVm1
C2Ahr4KvzEQL5aVTPjEh9KFRzDuufjvCwmKjfRTI+tPwihLdgkh5VMnGcblY4wvS
PtlkN1LuHtvbUhiKujpcUX1V3xXzlPi8p1C56SPODUAtsLfzsCXvZUUMaDCJOMcK
S7U0GT0K0DjGxQVj4psMmMWqDSGHsLAUSA7hoGlUH7vozwDzHQTEQOy3KuHp+4TC
JLfPJetubOFY7fBbI3NeoVuGdZHrxEF75fmaOw8Y9Ad76+awZTJ3AbQdY7N8jzzI
dyi1FekBXp5yLTFEFK21+8o1VPJGTg==
MBYGCSqGSIb3DQEJARYJY2FAa2tiLmt6MB4XDTAzMTAxNjEwMzkxMFoXDTA4MTAx
NDEwMzkxMFowgZUxCzAJBgNVBAYTAktaMQ8wDQYDVQQHEwZBbG1hdHkxHDAaBgNV
BAoTE0pTQyBLYXprb21tZXJ0c2JhbmsxEzARBgNVBAsTCkhlYWRPZmZpY2UxIjAg
BgNVBAMMGdCh0LXRgNCz0LXQuSDQpNGA0L7Qu9C+0LIxHjAcBgkqhkiG9w0BCQEW
D1NlRnJvbG92QGtrYi5rejBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQCscl9BRGTF
U/v++LztCO7ypVL6ZGWa+RdtjO0NU/GQVE08KXmFQKZ+SJmvmaBVKWr2cj6Tt777
hvV09cGvqnaRAgMBAAGjgbgwgbUwHQYDVR0OBBYEFBu7lKAaCWtC02I414kGauJB
FYYlMB8GA1UdIwQYMBaAFO9dp2Mor8bzfndC253ghJUGfXJTMAwGA1UdEwQFMAMB
AQAwDwYDVR0PAQH/BAUDAwfwADA1BgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vd3d3
LmtrYi5rei9jZXJ0cm9vdC9ra2JjYS5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwIG
CCsGAQUFBwMEMA0GCSqGSIb3DQEBBAUAA4IBAQDJ+SMg0CtSpfaN9H2A9S/77KA3
TKc+FFfxqaJCkeOLru/UMMo7Pk8kJpYfvwa5TUGSzUXwlY8Cow018ztfa1q7Ou5p
Z07rqAqyncQaKMKWkifDijtPsCEckd11Rjm87vE8zMzqv8oHd2QiMO8rEGdliiuV
iyW2KbAeqtSbvHkYqpTjDZ/q1r+HRMXGEk6twVl0MjsOXVMxD9JduNSLmE9tt85p
NwXuS9BXCR5mYvkpFSla2+kRG9Xw7Km54m2cV+sMpkiYCQyk4xDnNCDyyzmFiuj3
aPbiqyxs0jkGVY2Hpoy6jgCegR6CyLxkwSoytcEukCv8tAnIAVqH0LnOJgSV
-----END CERTIFICATE-----
20 changes: 14 additions & 6 deletions test-certs/config.ini
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
MERCHANT_CERTIFICATE_ID = "00c183d70b"
MERCHANT_NAME = "Test shop 3"
MERCHANT_ID = "92061103"
MERCHANT_CERTIFICATE_ID = "00C182B189"
MERCHANT_NAME = "Test shop"
PRIVATE_KEY_FN = "./test-certs/cert.prv"
PRIVATE_KEY_PASS = "1q2w3e4r"
PUBLIC_KEY_FN = "./test-certs/cert.pub"
BANK_PUBLIC_KEY_FN = "./test-certs/kkbca_test.pub"
PRIVATE_KEY_PASS = "nissan"
PUBLIC_KEY_FN = "./test-certs/kkbca.pem"
BANK_PUBLIC_KEY_FN = "./test-certs/kkbca.pem"
MERCHANT_ID = "92061101"

;MERCHANT_CERTIFICATE_ID = "00c183d70b"
;MERCHANT_NAME = "Test shop 3"
;MERCHANT_ID = "92061103"
;PRIVATE_KEY_FN = "./test-certs/cert.prv"
;PRIVATE_KEY_PASS = "1q2w3e4r"
;PUBLIC_KEY_FN = "./test-certs/cert.pub"
;BANK_PUBLIC_KEY_FN = "./test-certs/kkbca_test.pub"
21 changes: 21 additions & 0 deletions test-certs/kkbca.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
-----BEGIN CERTIFICATE-----
MIIDdjCCAl6gAwIBAgIFAMGD1pAwDQYJKoZIhvcNAQEEBQAwUzELMAkGA1UEBhMC
S1oxDDAKBgNVBAoTA0tLQjELMAkGA1UECxMCQ0ExDzANBgNVBAMTBktLQiBDQTEY
MBYGCSqGSIb3DQEJARYJY2FAa2tiLmt6MB4XDTE1MDgyNzEzMjAwMVoXDTIwMDgy
NTEzMjAwMVowcTELMAkGA1UEBhMCS1oxDzANBgNVBAcTBkFsbWF0eTETMBEGA1UE
ChMKa2tiY2FfdGVzdDELMAkGA1UECxMCQVQxEzARBgNVBAMTCmtrYmNhX3Rlc3Qx
GjAYBgkqhkiG9w0BCQEWC2VwYXlAa2tiLmt6MIGeMA0GCSqGSIb3DQEBAQUAA4GM
ADCBiAKBgHubvjO36p31yokU3D6I8UEjSoypp9XwDx2BTRH1IpaagcHhIpM89N6D
IKR5+epfGa38JHoJOP63gtyWBMGeOAfpUa067rXzOeJu5cQDoJP5LGMzGmFGMxmA
1O+do0vzO5LnMpPxwgQhdY9PeS09DMzFyX6rVtmBdUWe2q0vIk6ZAgMBAAGjgbcw
gbQwHQYDVR0OBBYEFC6fvGjFXPR7vleUibg0uzC4eNkXMB8GA1UdIwQYMBaAFO9d
p2Mor8bzfndC253ghJUGfXJTMAwGA1UdEwQFMAMBAQAwDgYDVR0PAQH/BAQDAgTw
MDUGA1UdHwQuMCwwKqAooCaGJGh0dHA6Ly93d3cua2tiLmt6L2NlcnRyb290L2tr
YmNhLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDQYJKoZIhvcN
AQEEBQADggEBAAn2TBxC2ojyerV/rfFCId4Ef/+tbXGq36G2aJzqjd4ptEIrv8Vv
TEOa8n8cvZ19cFM5V0rF6yu8We5nwGHNoReA6c9sxk0d7g9tsCEeXEn1DCyccQPV
ptmUvg/l6pHKT6E3yNOyBFCAaXNiRatFzEeiCIFCway9vr4JgkVpCSfWzkTswLX4
rePQFs/tHR3W4r9GntB5m5GEdLq6tv4ZwMweVOdfHWYT0kdp3/NWFovz81E40/FF
TpZFCTyetMv89ffH/MzEPuSYsj8A++RvVUBqjiVEyLSz1ir6sNvsQDLc3mACg1HB
w+lJunGmquzFWUE1vo42Q1m9nLCOSfwAmRI=
-----END CERTIFICATE-----

0 comments on commit d33a9eb

Please sign in to comment.