Skip to content

Commit 9bd35ce

Browse files
author
Evgeniy Sinev
committed
#95799 Added /close-day operation
1 parent 927d2e4 commit 9bd35ce

9 files changed

Lines changed: 170 additions & 19 deletions

File tree

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package com.payneteasy.pos.proxy;
22

3-
import com.payneteasy.pos.proxy.messages.PaymentRequest;
4-
import com.payneteasy.pos.proxy.messages.PaymentResponse;
5-
import com.payneteasy.pos.proxy.messages.RefundRequest;
3+
import com.payneteasy.pos.proxy.messages.*;
64

75
public interface IPaymentService {
86

97
PaymentResponse pay(PaymentRequest aRequest);
108

119
PaymentResponse refund(RefundRequest aRequest);
1210

11+
CloseDayResponse closeDay(CloseDayRequest aRequest);
1312
}

server/src/main/java/com/payneteasy/pos/proxy/WebServer.java

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.payneteasy.pos.proxy;
22

3-
import com.payneteasy.pos.proxy.messages.PaymentRequest;
4-
import com.payneteasy.pos.proxy.messages.PaymentResponse;
5-
import com.payneteasy.pos.proxy.messages.RefundRequest;
3+
import com.payneteasy.pos.proxy.messages.*;
64
import one.nio.http.*;
75
import one.nio.server.AcceptorConfig;
86
import one.nio.util.ByteArrayBuilder;
@@ -52,11 +50,7 @@ public Response handleVersion() {
5250
public void pay(Request aRequest, HttpSession aSession) throws IOException {
5351
PAYMENT_EXECUTOR.execute(() -> {
5452
try {
55-
String apiKey = aRequest.getHeader("X-API-Key");
56-
57-
if(!EXPECTED_API_KEY.equals(apiKey)) {
58-
LOG.error("Expected X-API-Key is '{}' but was '{}'", EXPECTED_API_KEY, apiKey);
59-
aSession.sendError(Response.FORBIDDEN, "Wrong X-API-Key");
53+
if (!checkApiKey(aRequest, aSession)) {
6054
return;
6155
}
6256
JsonMessages json = new JsonMessages(aRequest);
@@ -73,11 +67,7 @@ public void pay(Request aRequest, HttpSession aSession) throws IOException {
7367
public void refund(Request aRequest, HttpSession aSession) throws IOException {
7468
PAYMENT_EXECUTOR.execute(() -> {
7569
try {
76-
String apiKey = aRequest.getHeader("X-API-Key");
77-
78-
if(!EXPECTED_API_KEY.equals(apiKey)) {
79-
LOG.error("Expected X-API-Key is '{}' but was '{}'", EXPECTED_API_KEY, apiKey);
80-
aSession.sendError(Response.FORBIDDEN, "Wrong X-API-Key");
70+
if (!checkApiKey(aRequest, aSession)) {
8171
return;
8272
}
8373
JsonMessages json = new JsonMessages(aRequest);
@@ -90,6 +80,37 @@ public void refund(Request aRequest, HttpSession aSession) throws IOException {
9080
});
9181
}
9282

83+
@Path("/pos-proxy/close-day")
84+
public void closeDay(Request aRequest, HttpSession aSession) throws IOException {
85+
PAYMENT_EXECUTOR.execute(() -> {
86+
try {
87+
if (!checkApiKey(aRequest, aSession)) {
88+
return;
89+
}
90+
JsonMessages json = new JsonMessages(aRequest);
91+
CloseDayRequest request = json.parse(CloseDayRequest.class);
92+
CloseDayResponse response = paymentService.closeDay(request);
93+
aSession.sendResponse(json.response(response));
94+
} catch (Exception e) {
95+
sendError("Error while processing pay", aSession, e);
96+
}
97+
});
98+
}
99+
100+
private boolean checkApiKey(Request aRequest, HttpSession aSession) throws IOException {
101+
String apiKey = aRequest.getHeader("X-API-Key");
102+
103+
if(EXPECTED_API_KEY.equals(apiKey)) {
104+
return true;
105+
} else {
106+
LOG.error("Expected X-API-Key is '{}' but was '{}'", EXPECTED_API_KEY, apiKey);
107+
aSession.sendError(Response.FORBIDDEN, "Wrong X-API-Key");
108+
return false;
109+
110+
}
111+
}
112+
113+
93114
@Override
94115
public void handleDefault(Request aRequest, HttpSession aSession) throws IOException {
95116
if(aRequest.getURI().startsWith("/pos-proxy/swagger-ui")) {

server/src/main/java/com/payneteasy/pos/proxy/impl/PaymentServiceImpl.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
import com.payneteasy.inpas.sa.messages.sale.Sa1PaymentResponse;
44
import com.payneteasy.inpas.sa.messages.sale.Sa29ReversalResponse;
55
import com.payneteasy.pos.proxy.IPaymentService;
6-
import com.payneteasy.pos.proxy.messages.PaymentRequest;
7-
import com.payneteasy.pos.proxy.messages.PaymentResponse;
8-
import com.payneteasy.pos.proxy.messages.RefundRequest;
6+
import com.payneteasy.pos.proxy.messages.*;
97
import org.slf4j.Logger;
108
import org.slf4j.LoggerFactory;
119

@@ -47,6 +45,20 @@ public PaymentResponse refund(RefundRequest aRequest) {
4745
});
4846
}
4947

48+
@Override
49+
public CloseDayResponse closeDay(CloseDayRequest aRequest) {
50+
InpasNetworkManager manager = new InpasNetworkManager("0", "RUB", aRequest.getPosAddress());
51+
52+
PaymentResponse response = manager.makeOperation(aClient -> {
53+
aClient.makeReconciliation();
54+
return PaymentResponse.builder()
55+
.responseCode("00")
56+
.build();
57+
});
58+
59+
return new CloseDayResponse(response.getResponseCode());
60+
}
61+
5062
public static String toRrn(long aOrderId) {
5163
StringBuilder sb = new StringBuilder();
5264
sb.append(aOrderId);
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.payneteasy.pos.proxy.messages;
2+
3+
import lombok.Data;
4+
import lombok.NonNull;
5+
6+
@Data
7+
public class CloseDayRequest {
8+
9+
@NonNull
10+
private final String posAddress;
11+
12+
@NonNull
13+
private final String posType;
14+
15+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.payneteasy.pos.proxy.messages;
2+
3+
import lombok.Data;
4+
import lombok.NonNull;
5+
6+
@Data
7+
public class CloseDayResponse {
8+
9+
@NonNull
10+
private final String responseCode;
11+
12+
}

server/src/main/resources/swagger-ui/pos-proxy.json

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,57 @@
159159
}
160160
}
161161
}
162+
},
163+
"/close-day": {
164+
"post": {
165+
"tags": [
166+
"proxy"
167+
],
168+
"summary": "Close day",
169+
"parameters": [
170+
{
171+
"in": "body",
172+
"name": "body",
173+
"required": true,
174+
"schema": {
175+
"title": "Close Day Request",
176+
"type": "object",
177+
"additionalProperties": false,
178+
"properties": {
179+
"posType": {
180+
"type": "string",
181+
"enum": [
182+
"INPAS"
183+
],
184+
"description": "POS terminal type",
185+
"example": "INPAS"
186+
},
187+
"posAddress": {
188+
"type": "string",
189+
"description": "POS terminal address",
190+
"example": "10.0.1.20:27015"
191+
}
192+
}
193+
}
194+
}
195+
],
196+
"responses": {
197+
"200": {
198+
"description": "Status",
199+
"schema": {
200+
"title": "Close Day Response",
201+
"type": "object",
202+
"additionalProperties": false,
203+
"properties": {
204+
"responseCode": {
205+
"type": "string",
206+
"description": "00 - Approved, other codes - errors"
207+
}
208+
}
209+
}
210+
}
211+
}
212+
}
162213
}
163214
}
164215
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
title: "Close Day Request"
2+
type: "object"
3+
additionalProperties: false
4+
properties:
5+
posType:
6+
type: "string"
7+
enum:
8+
- "INPAS"
9+
description: "POS terminal type"
10+
example: "INPAS"
11+
12+
13+
posAddress:
14+
type: "string"
15+
description: "POS terminal address"
16+
example: "10.0.1.20:27015"
17+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
title: "Close Day Response"
2+
type: "object"
3+
additionalProperties: false
4+
properties:
5+
responseCode:
6+
type: "string"
7+
description: "00 - Approved, other codes - errors"
8+

swagger/pos-proxy.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,19 @@ paths:
5252
description: Status
5353
schema:
5454
$ref: './messages/PaymentResponse.yaml'
55+
56+
/close-day:
57+
post:
58+
tags: ['proxy']
59+
summary: Close day
60+
parameters:
61+
- in: body
62+
name: body
63+
required: true
64+
schema:
65+
$ref: './messages/CloseDayRequest.yaml'
66+
responses:
67+
200:
68+
description: Status
69+
schema:
70+
$ref: './messages/CloseDayResponse.yaml'

0 commit comments

Comments
 (0)