Skip to content

Commit e73f6ee

Browse files
committed
Merge pull request thephpleague#147 from ruudk/multisafepay-fix
MultiSafepay: Fixed wrong gateway node and added support for direct transactions
2 parents 77de4bc + 69838b7 commit e73f6ee

File tree

3 files changed

+33
-22
lines changed

3 files changed

+33
-22
lines changed

src/Omnipay/MultiSafepay/Message/PurchaseRequest.php

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,12 @@ public function getData()
9494
{
9595
$this->validate('transactionId', 'amount', 'currency', 'description', 'clientIp', 'card');
9696

97-
$data = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><redirecttransaction/>');
97+
if ('IDEAL' === $this->getGateway() && $this->getIssuer()) {
98+
$data = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><directtransaction/>');
99+
} else {
100+
$data = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><redirecttransaction/>');
101+
}
102+
98103
$data->addAttribute('ua', $this->userAgent);
99104

100105
$merchant = $data->addChild('merchant');
@@ -104,12 +109,6 @@ public function getData()
104109
$merchant->addChild('notification_url', htmlspecialchars($this->getNotifyUrl()));
105110
$merchant->addChild('cancel_url', htmlspecialchars($this->getCancelUrl()));
106111
$merchant->addChild('redirect_url', htmlspecialchars($this->getReturnUrl()));
107-
$merchant->addChild('gateway', $this->getGateway());
108-
109-
if ('IDEAL' === $this->getGateway() && $this->getIssuer()) {
110-
$gatewayInfo = $data->addChild('gatewayinfo');
111-
$gatewayInfo->addChild('issuerid', $this->getIssuer());
112-
}
113112

114113
/** @var CreditCard $card */
115114
$card = $this->getCard();
@@ -137,6 +136,12 @@ public function getData()
137136
$transaction->addChild('var2', $this->getExtraData2());
138137
$transaction->addChild('var3', $this->getExtraData3());
139138
$transaction->addChild('items', $this->getItems());
139+
$transaction->addChild('gateway', $this->getGateway());
140+
141+
if ('IDEAL' === $this->getGateway() && $this->getIssuer()) {
142+
$gatewayInfo = $data->addChild('gatewayinfo');
143+
$gatewayInfo->addChild('issuerid', $this->getIssuer());
144+
}
140145

141146
$data->addChild('signature', $this->generateSignature());
142147

src/Omnipay/MultiSafepay/Message/PurchaseResponse.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,21 @@ public function isSuccessful()
2727
*/
2828
public function isRedirect()
2929
{
30-
return isset($this->data->transaction->payment_url);
30+
return isset($this->data->transaction->payment_url) || isset($this->data->gatewayinfo->redirecturl);
3131
}
3232

3333
/**
3434
* {@inheritdoc}
3535
*/
3636
public function getRedirectUrl()
3737
{
38-
return $this->isRedirect() ? (string) $this->data->transaction->payment_url : null;
38+
if (isset($this->data->gatewayinfo->redirecturl)) {
39+
return (string) $this->data->gatewayinfo->redirecturl;
40+
} elseif (isset($this->data->transaction->payment_url)) {
41+
return (string) $this->data->transaction->payment_url;
42+
}
43+
44+
return null;
3945
}
4046

4147
/**

tests/Omnipay/MultiSafepay/Message/PurchaseRequestTest.php

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -134,19 +134,15 @@ public function allDataProvider()
134134
{
135135
$xml = <<<EOF
136136
<?xml version="1.0" encoding="UTF-8"?>
137-
<redirecttransaction ua="Omnipay">
137+
<directtransaction ua="Omnipay">
138138
<merchant>
139139
<account>111111</account>
140140
<site_id>222222</site_id>
141141
<site_secure_code>333333</site_secure_code>
142142
<notification_url>http://localhost/notify</notification_url>
143143
<cancel_url>http://localhost/cancel</cancel_url>
144144
<redirect_url>http://localhost/return</redirect_url>
145-
<gateway>IDEAL</gateway>
146145
</merchant>
147-
<gatewayinfo>
148-
<issuerid>issuer</issuerid>
149-
</gatewayinfo>
150146
<customer>
151147
<ipaddress>127.0.0.1</ipaddress>
152148
<locale>a language</locale>
@@ -170,9 +166,13 @@ public function allDataProvider()
170166
<var2>extra 2</var2>
171167
<var3>extra 3</var3>
172168
<items>the items</items>
169+
<gateway>IDEAL</gateway>
173170
</transaction>
171+
<gatewayinfo>
172+
<issuerid>issuer</issuerid>
173+
</gatewayinfo>
174174
<signature>ad447bab87b8597853432c891e341db1</signature>
175-
</redirecttransaction>
175+
</directtransaction>
176176
177177
EOF;
178178

@@ -193,7 +193,6 @@ public function noIssuerDataProvider()
193193
<notification_url>http://localhost/notify</notification_url>
194194
<cancel_url>http://localhost/cancel</cancel_url>
195195
<redirect_url>http://localhost/return</redirect_url>
196-
<gateway>another</gateway>
197196
</merchant>
198197
<customer>
199198
<ipaddress>127.0.0.1</ipaddress>
@@ -218,6 +217,7 @@ public function noIssuerDataProvider()
218217
<var2>extra 2</var2>
219218
<var3>extra 3</var3>
220219
<items>the items</items>
220+
<gateway>another</gateway>
221221
</transaction>
222222
<signature>ad447bab87b8597853432c891e341db1</signature>
223223
</redirecttransaction>
@@ -233,19 +233,15 @@ public function specialCharsDataProvider()
233233
{
234234
$xml = <<<EOF
235235
<?xml version="1.0" encoding="UTF-8"?>
236-
<redirecttransaction ua="Omnipay">
236+
<directtransaction ua="Omnipay">
237237
<merchant>
238238
<account>111111</account>
239239
<site_id>222222</site_id>
240240
<site_secure_code>333333</site_secure_code>
241241
<notification_url>http://localhost/?one=1&amp;two=2</notification_url>
242242
<cancel_url>http://localhost/?one=1&amp;two=2</cancel_url>
243243
<redirect_url>http://localhost/?one=1&amp;two=2</redirect_url>
244-
<gateway>IDEAL</gateway>
245244
</merchant>
246-
<gatewayinfo>
247-
<issuerid>issuer</issuerid>
248-
</gatewayinfo>
249245
<customer>
250246
<ipaddress>127.0.0.1</ipaddress>
251247
<locale>a language</locale>
@@ -269,9 +265,13 @@ public function specialCharsDataProvider()
269265
<var2>extra 2</var2>
270266
<var3>extra 3</var3>
271267
<items>the items</items>
268+
<gateway>IDEAL</gateway>
272269
</transaction>
270+
<gatewayinfo>
271+
<issuerid>issuer</issuerid>
272+
</gatewayinfo>
273273
<signature>ad447bab87b8597853432c891e341db1</signature>
274-
</redirecttransaction>
274+
</directtransaction>
275275
276276
EOF;
277277

0 commit comments

Comments
 (0)