Skip to content

Upgrade to Omnipay v3 #6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 2, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,22 @@
}
},
"require": {
"omnipay/common": "~2.3"
"omnipay/common": "^3.0",
"ext-simplexml": "*",
"ext-dom": "*",
},
"require-dev": {
"omnipay/tests": "~2.0",
"satooshi/php-coveralls": "1.0.0"
"omnipay/tests": "^3.0",
"satooshi/php-coveralls": "1.0.0",
"guzzlehttp/guzzle": "^6.5.5"
},
"suggest": {
"guzzlehttp/guzzle": "To handle WebMoney payouts",
"ext-curl": "To handle WebMoney payouts"
},
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
"dev-master": "3.0.x-dev",
}
}
}
75 changes: 36 additions & 39 deletions src/Certificate/WMUsedRootCAs.crt
Original file line number Diff line number Diff line change
@@ -1,4 +1,40 @@
-----BEGIN CERTIFICATE-----
MIIGRzCCBC+gAwIBAgIKNl4/iwAAAAnF+TANBgkqhkiG9w0BAQsFADBrMSswKQYD
VQQLEyJXTSBUcmFuc2ZlciBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzMRgwFgYDVQQK
Ew9XTSBUcmFuc2ZlciBMdGQxIjAgBgNVBAMTGVdlYk1vbmV5IFRyYW5zZmVyIFJv
b3QgQ0EwHhcNMTYxMTIyMTQxOTQ0WhcNMjExMTIyMTQyOTQ0WjCBhzELMAkGA1UE
BhMCUlUxDzANBgNVBAgTBk1vc2NvdzEPMA0GA1UEBxMGTW9zY293MRowGAYDVQQK
ExFXZWJNb25leSBUcmFuc2ZlcjEdMBsGA1UECxMUV2ViTW9uZXkgV2ViIFNlcnZp
Y2UxGzAZBgNVBAMTEnczcy53bXRyYW5zZmVyLmNvbTCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBAJ0drRG+bzqrBk3IWMbtYMQZdYr501/c1NdnOWjyeFKt
Ho8N2PKiAf9OOFywSSdCoFdDxp0PNK1GoBESyhi2xIuXRpvCzNyRb2Se3V3IpFS8
VOu6V2GzFjc7xqS37MAgR6THCvULumh6w7DMY+HBU51CinuRbComR9+D4Yq8c6wx
NnlI0HnkKE1H6fqLwDU+JhVrEJ64it6emghIazcEoZ+9Ld0rHdhrYsthxTwmC9mr
YR6ayhde7BOn/B66XWtZE+7sFYkmC/547NuU+gMw7FoZ/iu3Vy3HPOvwtzbXbwVk
lltVMtU2JD4+3UWlwMTbbPOQc5pDbC6GP56mIOy976sCAwEAAaOCAc4wggHKMB0G
A1UdDgQWBBT5R7V8EMMuRX9sQBZz8pdftKYI2jAfBgNVHSMEGDAWgBSxMKdLA5lP
hDYcE31X9Otp+4gbwzCBpAYDVR0fBIGcMIGZMIGWoIGToIGQhklodHRwOi8vY2Vy
dC53bXRyYW5zZmVyLmNvbS9DZXJ0RW5yb2xsL1dlYk1vbmV5JTIwVHJhbnNmZXIl
MjBSb290JTIwQ0EuY3JshkNmaWxlOi8vY2VydC53bXRyYW5zZmVyLmNvbS9DZXJ0
RW5yb2xsL1dlYk1vbmV5IFRyYW5zZmVyIFJvb3QgQ0EuY3JsMIHgBggrBgEFBQcB
AQSB0zCB0DBpBggrBgEFBQcwAoZdaHR0cDovL2NlcnQud210cmFuc2Zlci5jb20v
Q2VydEVucm9sbC9jZXJ0LndtdHJhbnNmZXIuY29tX1dlYk1vbmV5JTIwVHJhbnNm
ZXIlMjBSb290JTIwQ0EuY3J0MGMGCCsGAQUFBzAChldmaWxlOi8vY2VydC53bXRy
YW5zZmVyLmNvbS9DZXJ0RW5yb2xsL2NlcnQud210cmFuc2Zlci5jb21fV2ViTW9u
ZXkgVHJhbnNmZXIgUm9vdCBDQS5jcnQwDQYJKoZIhvcNAQELBQADggIBAIE+gHDa
+nIQxlYJ2TMXbKBmBLdfwzd/FsO9PUxhx9fYg7Xp1/Vg3h7jjRl2/fe8iTLgInJ/
avuyF+57MhRa+XIVHT02RLqG1wDlIdi5pMt7xRCvTulzHAeOrctNtH+m3pdu5G4S
u8k9lltwdcprfz3HNqU/Q1zcYMjvJJ7dPNqzNQWGRGPHuU4pS/x0Y+wUdTDhAYla
CJOkYscJipeyWgWM9zJZAXvmKw8lWij/lQDjAqAc0O5FyN5RN+l9Yt14NPvAM1zc
1SJttrFUiXR+7tHOIB4eXxfHa1Y68qt3cNV6C/Gun/6hhc8Jg0ly9mk1EGMXbBWZ
fko/3VSJGRpSqKacQBOmdBbgJmZW3GNSrQEmF2pV6aIyxQJA5PPBN6ePKnYZQpdr
Q/4Ql6IJs9R2JN3e+dmwzzf7IQuWGppR+WDcw322xPteK9Mt/mz4SYPTIu7cARqV
Y+v32ybhXibT/PY5qIPrX2MGLolhG3dZO+gwIyMLCtEBQL8+CorFd06UhKKbU/8p
x9Iqyo57wM7yA8WbLYF+rGxFZ79WL+2rhTmyqycK/YZ7AnrY9oUA6W8maNbdIE3G
aGB4kZaEtdMz0MFErIXS75OC7HAwuSRz2QXUZ3Bj6syxQfkz67RRnfWF0AdhQY2V
kjDzCAi+4vTuN7xadrhJmsiRx6r/nQo+iDh2
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFsTCCA5mgAwIBAgIQA7dHzSZ7uJdBxFycIWn+WjANBgkqhkiG9w0BAQUFADBr
MSswKQYDVQQLEyJXTSBUcmFuc2ZlciBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzMRgw
FgYDVQQKEw9XTSBUcmFuc2ZlciBMdGQxIjAgBgNVBAMTGVdlYk1vbmV5IFRyYW5z
Expand Down Expand Up @@ -31,42 +67,3 @@ hlA2/d5ULImX70Q2te3xiS1vrQhu77mkb/jA4/9+YfeT7VMpbnC3OoHiZ2bjudKn
thlOs+AuUvzB4Tqo62VSF5+r0sYI593S+STmaZBAzsoaoEB7qxqKbEKCvXb9BlXk
L76xIOEkbSIdPIkGXM4aMo4mTVz7
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
-----END CERTIFICATE-----
5 changes: 3 additions & 2 deletions src/Message/FetchTransactionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,10 @@ public function getData()

public function sendData($data)
{
$httpResponse = $this->httpClient->post($this->endpoint, null, $data)->send();
$httpResponse = $this->httpClient->request('POST', $this->endpoint, [], $data);
$xml = simplexml_load_string($httpResponse->getBody()->getContents());

return $this->createResponse($httpResponse->xml());
return $this->createResponse($xml);
}

protected function createResponse($data)
Expand Down
26 changes: 16 additions & 10 deletions src/Message/PayoutRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Omnipay\WebMoney\Message;

use Guzzle\Http\Client;
use Omnipay\Common\Exception\InvalidRequestException;

/**
Expand Down Expand Up @@ -275,20 +276,29 @@ public function getData()
return $document->saveXML();
}

/**
* @return Client
*/
private function getHttpClient()
{
return new Client($this->endpoint);
}

public function sendData($data)
{
$this->httpClient->setConfig(array(
'curl.options' => array(
$client = $this->getHttpClient();
$client->setConfig([
Client::CURL_OPTIONS => [
CURLOPT_CAINFO => $this->getCertificatePath('WMUsedRootCAs.crt'),
CURLOPT_SSLCERT => $this->getSslFile(),
CURLOPT_SSLKEY => $this->getSslKey(),
CURLOPT_SSLVERSION => 1,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_SSL_VERIFYPEER => 1,
),
));
],
]);

$httpResponse = $this->httpClient->post($this->endpoint, null, $data)->send();
$httpResponse = $client->post($this->endpoint, [], $data)->send();

return $this->createResponse($httpResponse->xml());
}
Expand All @@ -300,10 +310,6 @@ protected function createResponse($data)

protected function getCertificatePath($fileName)
{
$class = new \ReflectionObject($this);
$directory = dirname($class->getFileName());
$file = realpath($directory.'/../Certificate/'.$fileName);

return $file;
return __DIR__ . '/../Certificate/' . $fileName;
}
}
2 changes: 1 addition & 1 deletion tests/Message/CompletePurchaseRequestTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,6 @@ public function testSendData()
{
$data = $this->request->getData();
$response = $this->request->sendData($data);
$this->assertSame('Omnipay\WebMoney\Message\CompletePurchaseResponse', get_class($response));
$this->assertInstanceOf(CompletePurchaseResponse::class, $response);
}
}
13 changes: 9 additions & 4 deletions tests/Message/CompletePurchaseResponseTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
namespace Omnipay\WebMoney\Message;

use Omnipay\Tests\TestCase;
use Omnipay\Common\Exception\InvalidResponseException;

class CompletePurchaseResponseTest extends TestCase
{
Expand All @@ -21,7 +22,8 @@ public function setUp()

public function testSignHashException()
{
$this->setExpectedException('Omnipay\Common\Exception\InvalidResponseException', 'Invalid hash');
$this->expectException(InvalidResponseException::class);
$this->expectExceptionMessage('Invalid hash');
new CompletePurchaseResponse($this->request, array(
'LMI_MODE' => '1',
'LMI_PAYMENT_AMOUNT' => '14.65',
Expand All @@ -43,7 +45,8 @@ public function testSignHashException()

public function testInvalidTestModeException()
{
$this->setExpectedException('Omnipay\Common\Exception\InvalidResponseException', 'Invalid test mode');
$this->expectException(InvalidResponseException::class);
$this->expectExceptionMessage('Invalid test mode');
new CompletePurchaseResponse($this->request, array(
'LMI_MODE' => '0',
'LMI_PAYMENT_AMOUNT' => '14.65',
Expand Down Expand Up @@ -166,7 +169,8 @@ public function testMd5Hash()

public function testInvalidHashTypeException()
{
$this->setExpectedException('Omnipay\Common\Exception\InvalidResponseException', 'Control sign forming method "SIGN" is not supported');
$this->expectException(InvalidResponseException::class);
$this->expectExceptionMessage('Control sign forming method "SIGN" is not supported');
new CompletePurchaseResponse($this->request, array(
'LMI_MODE' => '1',
'LMI_PAYMENT_AMOUNT' => '14.65',
Expand All @@ -188,7 +192,8 @@ public function testInvalidHashTypeException()

public function testInvalidSignatureTypeException()
{
$this->setExpectedException('Omnipay\Common\Exception\InvalidResponseException', 'Invalid signature type');
$this->expectException(InvalidResponseException::class);
$this->expectExceptionMessage('Invalid signature type');
new CompletePurchaseResponse($this->request, array(
'LMI_MODE' => '1',
'LMI_PAYMENT_AMOUNT' => '14.65',
Expand Down
8 changes: 4 additions & 4 deletions tests/Message/FetchTransactionRequestTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ public function setUp()
{
parent::setUp();

$mockPlugin = new \Guzzle\Plugin\Mock\MockPlugin();
$mockPlugin->addResponse($this->getMockHttpResponse('FetchTransactionSuccess.txt'));
$this->getMockClient()->addResponse(
$this->getMockHttpResponse('FetchTransactionSuccess.txt')
);

$httpClient = $this->getHttpClient();
$httpClient->addSubscriber($mockPlugin);

$this->request = new FetchTransactionRequest($httpClient, $this->getHttpRequest());
$this->request->initialize(array(
Expand All @@ -42,6 +42,6 @@ public function testSendData()
{
$data = $this->request->getData();
$response = $this->request->sendData($data);
$this->assertSame('Omnipay\WebMoney\Message\FetchTransactionResponse', get_class($response));
$this->assertInstanceOf(\Omnipay\WebMoney\Message\FetchTransactionResponse::class, $response);
}
}
6 changes: 4 additions & 2 deletions tests/Message/FetchTransactionResponseTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ public function setUp()
public function testFailure()
{
$httpResponse = $this->getMockHttpResponse('FetchTransactionFailure.txt');
$response = new FetchTransactionResponse($this->request, $httpResponse->xml());
$xml = simplexml_load_string($httpResponse->getBody()->getContents());
$response = new FetchTransactionResponse($this->request, $xml);

$this->assertFalse($response->isSuccessful());
$this->assertSame(7, $response->getCode());
Expand All @@ -38,7 +39,8 @@ public function testFailure()
public function testSuccess()
{
$httpResponse = $this->getMockHttpResponse('FetchTransactionSuccess.txt');
$response = new FetchTransactionResponse($this->request, $httpResponse->xml());
$xml = simplexml_load_string($httpResponse->getBody()->getContents());
$response = new FetchTransactionResponse($this->request, $xml);

$this->assertTrue($response->isSuccessful());
$this->assertSame(0, $response->getCode());
Expand Down
35 changes: 25 additions & 10 deletions tests/Message/PayoutRequestTest.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
<?php
namespace Omnipay\WebMoney\Message;

use Guzzle\Http\Client;
use Guzzle\Http\Exception\CurlException;
use Omnipay\Tests\TestCase;
use ReflectionObject;
use SimpleXMLElement;

class PayoutRequestTest extends TestCase
{
Expand All @@ -11,19 +15,23 @@ public function setUp()
{
parent::setUp();

$class = new \ReflectionObject($this);
$class = new ReflectionObject($this);
$directory = dirname($class->getFileName());
$sslFile = realpath($directory . '/../Certificate/webmoney.pem');
$sslKey = realpath($directory . '/../Certificate/webmoney.key');

$mockPlugin = new \Guzzle\Plugin\Mock\MockPlugin();
$mockPlugin->addResponse($this->getMockHttpResponse('PayoutSuccess.txt'));
$mockPlugin->addResponse(__DIR__ . '/../Mock/PayoutSuccess.txt');

$httpClient = $this->getHttpClient();
$httpClient = new Client();
$httpClient->addSubscriber($mockPlugin);

$this->request = new PayoutRequest($httpClient, $this->getHttpRequest());
$this->request->initialize(array(
$this->request = $this->getMockBuilder(PayoutRequest::class)
->setMethods(['getHttpClient'])
->setConstructorArgs([$this->getHttpClient(), $this->getHttpRequest()])
->getMock();
$this->request->method('getHttpClient')->willReturn($httpClient);
$this->request->initialize([
'webMoneyId' => '811333344777',
'merchantPurse' => 'Z123428476799',
'secretKey' => '226778888',
Expand All @@ -39,7 +47,8 @@ public function setUp()
'description' => 'Payout',
'currency' => 'USD',
'amount' => '12.46'
));
]
);
}

public function testException()
Expand All @@ -49,14 +58,14 @@ public function testException()
try {
$this->request->getData();
} catch (\Exception $e) {
$this->assertEquals('Omnipay\Common\Exception\InvalidRequestException', get_class($e));
$this->assertInstanceOf(\Omnipay\Common\Exception\InvalidRequestException::class, $e);
}
}

public function testGetData()
{
$data = $this->request->getData();
$request = new \SimpleXMLElement($data);
$request = new SimpleXMLElement($data);

$this->assertSame('111222333', (string) $request->reqn);
$this->assertSame('', (string) $request->wmid);
Expand All @@ -75,7 +84,13 @@ public function testGetData()
public function testSendData()
{
$data = $this->request->getData();
$response = $this->request->sendData($data);
$this->assertSame('Omnipay\WebMoney\Message\PayoutResponse', get_class($response));
$caught = false;
try {
$response = $this->request->sendData($data);
} catch (CurlException $exception) {
// We don't have a valid client SSL cert to interact with
$this->assertStringStartsWith('[curl] 56: OpenSSL SSL_read: error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca', $exception->getMessage());
$caught = true;
}
}
}
6 changes: 4 additions & 2 deletions tests/Message/PayoutResponseTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ public function setUp()
public function testFailure()
{
$httpResponse = $this->getMockHttpResponse('PayoutFailure.txt');
$response = new PayoutResponse($this->request, $httpResponse->xml());
$xml = simplexml_load_string($httpResponse->getBody()->getContents());
$response = new PayoutResponse($this->request, $xml);

$this->assertFalse($response->isSuccessful());
$this->assertSame(17, $response->getCode());
Expand All @@ -53,7 +54,8 @@ public function testFailure()
public function testSuccess()
{
$httpResponse = $this->getMockHttpResponse('PayoutSuccess.txt');
$response = new PayoutResponse($this->request, $httpResponse->xml());
$xml = simplexml_load_string($httpResponse->getBody()->getContents());
$response = new PayoutResponse($this->request, $xml);

$this->assertTrue($response->isSuccessful());
$this->assertSame(0, $response->getCode());
Expand Down
Loading