Skip to content

Commit cca85f9

Browse files
Merge pull request #38 from answear/keep-customer-ip
keep customer ip
2 parents c2ff604 + 27347a6 commit cca85f9

2 files changed

Lines changed: 101 additions & 15 deletions

File tree

src/Action/ConvertPaymentAction.php

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,9 @@ public function execute($request): void
3838
/** @var PaymentInterface $payment */
3939
$payment = $request->getSource();
4040
$details = Model::ensureArrayObject($payment->getDetails());
41-
$details->replace(
42-
[
43-
ModelFields::TOTAL_AMOUNT => $payment->getTotalAmount(),
44-
ModelFields::CURRENCY => $payment->getCurrencyCode(),
45-
ModelFields::EXT_ORDER_ID => $details->extOrderId() ?? $payment->getNumber(),
46-
ModelFields::DESCRIPTION => $payment->getDescription(),
47-
ModelFields::CLIENT_EMAIL => $payment->getClientEmail(),
48-
ModelFields::CLIENT_ID => $payment->getClientId(),
49-
ModelFields::CUSTOMER_IP => $this->userIpService->getIp(),
50-
ModelFields::CREDIT_CARD_MASKED_NUMBER => $payment->getCreditCard() ? $payment->getCreditCard()->getMaskedNumber() : null,
51-
ModelFields::VALIDITY_TIME => $details->validityTime() ?? self::DEFAULT_VALIDITY_TIME,
52-
]
53-
);
41+
42+
$this->replaceModelFields($details, $payment);
43+
5444
if ($payment instanceof Payment) {
5545
$details->setConfigKey($payment->getConfigKey());
5646

@@ -105,4 +95,28 @@ public function supports($request): bool
10595
&& $request->getSource() instanceof PaymentInterface
10696
&& 'array' === $request->getTo();
10797
}
98+
99+
private function replaceModelFields(Model $details, PaymentInterface $payment): void
100+
{
101+
if (null === $details->customerIp()) {
102+
$details->replace(
103+
[
104+
ModelFields::CUSTOMER_IP => $this->userIpService->getIp(),
105+
]
106+
);
107+
}
108+
109+
$details->replace(
110+
[
111+
ModelFields::TOTAL_AMOUNT => $payment->getTotalAmount(),
112+
ModelFields::CURRENCY => $payment->getCurrencyCode(),
113+
ModelFields::EXT_ORDER_ID => $details->extOrderId() ?? $payment->getNumber(),
114+
ModelFields::DESCRIPTION => $payment->getDescription(),
115+
ModelFields::CLIENT_EMAIL => $payment->getClientEmail(),
116+
ModelFields::CLIENT_ID => $payment->getClientId(),
117+
ModelFields::CREDIT_CARD_MASKED_NUMBER => $payment->getCreditCard() ? $payment->getCreditCard()->getMaskedNumber() : null,
118+
ModelFields::VALIDITY_TIME => $details->validityTime() ?? self::DEFAULT_VALIDITY_TIME,
119+
]
120+
);
121+
}
108122
}

tests/Integration/Action/ConvertActionTest.php

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Answear\Payum\Model\PaidForInterface;
88
use Answear\Payum\PayU\Action\ConvertPaymentAction;
9+
use Answear\Payum\PayU\Enum\ModelFields;
910
use Answear\Payum\PayU\Service\UserIpService;
1011
use Answear\Payum\PayU\Tests\Payment;
1112
use Payum\Core\Model\CreditCard;
@@ -41,13 +42,13 @@ public function convertWithLowInfoTest(): void
4142

4243
self::assertSame(
4344
[
45+
'customerIp' => null,
4446
'totalAmount' => null,
4547
'currencyCode' => null,
4648
'extOrderId' => null,
4749
'description' => null,
4850
'clientEmail' => null,
4951
'clientId' => null,
50-
'customerIp' => null,
5152
'creditCardMaskedNumber' => null,
5253
'validityTime' => 259200,
5354
'configKey' => 'pos2',
@@ -107,13 +108,84 @@ public function convertWithFullDataTest(): void
107108

108109
self::assertSame(
109110
[
111+
'customerIp' => '127.0.0.1',
112+
'totalAmount' => 1001,
113+
'currencyCode' => 'PLN',
114+
'extOrderId' => 'extOrderId',
115+
'description' => 'Some description',
116+
'clientEmail' => 'email@test.fake',
117+
'clientId' => '2874',
118+
'creditCardMaskedNumber' => $creditCard->getMaskedNumber(),
119+
'validityTime' => 259200,
120+
'configKey' => 'pos2',
121+
'buyer' => [
122+
'email' => 'email2@test.fake',
123+
'firstName' => 'Firstname',
124+
'lastName' => 'Surname',
125+
'phone' => '123123123',
126+
'customerId' => null,
127+
'extCustomerId' => '2874',
128+
'nin' => null,
129+
'language' => 'pl',
130+
'delivery' => null,
131+
],
132+
'status' => 'NEW',
133+
],
134+
$convert->getResult()
135+
);
136+
}
137+
138+
/**
139+
* @test
140+
*/
141+
public function convertButKeepCustomerIp(): void
142+
{
143+
$convertAction = new ConvertPaymentAction(new UserIpService());
144+
145+
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
146+
147+
$creditCard = new CreditCard();
148+
$creditCard->setMaskedNumber('masked-number');
149+
150+
$paidFor = $this->createMock(PaidForInterface::class);
151+
$paidFor->method('getEmail')
152+
->willReturn('email2@test.fake');
153+
$paidFor->method('getFirstName')
154+
->willReturn('Firstname');
155+
$paidFor->method('getSurname')
156+
->willReturn('Surname');
157+
$paidFor->method('getPhone')
158+
->willReturn('123123123');
159+
160+
$payment = new Payment();
161+
$payment->setTotalAmount(1001);
162+
$payment->setCurrencyCode('PLN');
163+
$payment->setNumber('extOrderId');
164+
$payment->setDescription('Some description');
165+
$payment->setClientEmail('email@test.fake');
166+
$payment->setClientId('2874');
167+
$payment->setCreditCard($creditCard);
168+
$payment->setLanguage('pl');
169+
$payment->setConfigKey('pos2');
170+
$payment->setPaidFor($paidFor);
171+
$payment->setDetails(
172+
[
173+
ModelFields::CUSTOMER_IP => '111.222.333.444'
174+
]
175+
);
176+
$convert = new Convert($payment, 'array');
177+
178+
$convertAction->execute($convert);
179+
180+
self::assertSame(
181+
[
182+
'customerIp' => '111.222.333.444',
110183
'totalAmount' => 1001,
111184
'currencyCode' => 'PLN',
112185
'extOrderId' => 'extOrderId',
113186
'description' => 'Some description',
114187
'clientEmail' => 'email@test.fake',
115188
'clientId' => '2874',
116-
'customerIp' => '127.0.0.1',
117189
'creditCardMaskedNumber' => $creditCard->getMaskedNumber(),
118190
'validityTime' => 259200,
119191
'configKey' => 'pos2',

0 commit comments

Comments
 (0)