completed initial charge logic

This commit is contained in:
2025-06-18 09:28:01 +02:00
parent b214d42d2f
commit 9ae78635c7
34 changed files with 614 additions and 102 deletions

View File

@@ -39,6 +39,13 @@ public class RestService {
public final RestTemplate restTemplate;
@Value("${sbz.aggregator.client-id}")
private String clientId;
@Value("${sbz.aggregator.client-secret}")
private String clientSecret;
@Value("${sbz.aggregator.url}")
private String aggregatorUrl;
public RestService() {
this.restTemplate = new RestTemplate(
new BufferingClientHttpRequestFactory(
@@ -54,7 +61,7 @@ public class RestService {
if (CollectionUtils.isEmpty(interceptors)) {
interceptors = new ArrayList<>();
}
interceptors.add(new RestTemplateInterceptor(gson));
interceptors.add(new RestTemplateInterceptor());
this.restTemplate.setInterceptors(interceptors);
}
@@ -81,6 +88,24 @@ public class RestService {
return clientToken;
}
public String getMerchantToken() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
Map<String, String> payload = Map.of(
"clientId", clientId,
"clientSecret", clientSecret
);
HttpEntity<Map<String, String>> entity = new HttpEntity<>(payload, headers);
Map response = this.restTemplate.postForObject(aggregatorUrl + "/merchant/client/token",entity, Map.class);
Map<String, String> body = (Map<String, String>) response.get("body");
return (String) body.get("access_token");
}
public Map getToken(MultiValueMap payload){
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
@@ -120,6 +145,12 @@ public class RestService {
return this.restTemplate.postForObject(path, entity, clazz);
}
public <T> T getAs(String path, HttpHeaders headers, Class<T> clazz){
// build the request
HttpEntity entity = new HttpEntity<>(headers);
return this.restTemplate.exchange(path, HttpMethod.GET, entity, clazz).getBody();
}
public <T> T post(String path, Object payload, Class<T> clazz){
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

View File

@@ -1,6 +1,7 @@
package zw.qantra.tm.rest;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.RequiredArgsConstructor;
import org.json.JSONArray;
import org.json.JSONException;
@@ -19,11 +20,10 @@ import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.stream.Collectors;
@RequiredArgsConstructor
public class RestTemplateInterceptor
implements ClientHttpRequestInterceptor {
private final Logger logger = LoggerFactory.getLogger(getClass().getName());
private final Gson gson;
private final Gson gson = new GsonBuilder().setPrettyPrinting().create();
@Override
public ClientHttpResponse intercept(
@@ -35,18 +35,20 @@ public class RestTemplateInterceptor
// we don't log file data
if(request.getHeaders().getContentLength() < 10000){
logger.info("Request: "
+ request.getMethod() + ": "
+ request.getURI(), "http", gson.fromJson(requestBody, HashMap.class));
logger.info("Request: {}: {}\n{}\n{}",
request.getMethod(),
request.getURI(),
request.getHeaders().toSingleValueMap(),
gson.toJson(gson.fromJson(requestBody, HashMap.class)));
}
ClientHttpResponse response = execution.execute(request, reqBody);
InputStreamReader isr = new InputStreamReader(response.getBody());
String body = new BufferedReader(isr).lines()
.collect(Collectors.joining("\n"));
try{
logger.info("Response body: {}", "http", gson.fromJson(body, HashMap.class));
logger.info("Response body:\n{}", gson.toJson(gson.fromJson(body, HashMap.class)));
}catch (Exception exception){
logger.info("Problem serializing resp: {}", "http", exception.getMessage());
logger.info("Problem serializing resp: {}", exception.getMessage());
}
return response;
}