Sending support information for delivery of an order (Java)
In this use case, the user wants to contact the customer support due to an issue with the delivery of an order. Here the seller returns the support info of the delivery service provider.
Code snippets
BPP receives protocol support
/*
Example Request JSON:
{
"context": {
"domain": "local_retail",
"country": "IND",
"city": "std:080",
"action": "support",
"core_version": "0.9.2",
"bap_id": "https://mock_bap.com/",
"bap_uri": "https://mock_bap.com/beckn/",
"transaction_id": "1239890342",
"message_id": "123793824",
"timestamp": "2021-06-23T08:22:44.059Z"
},
"message": {
"ref_id": "fulfillment_1"
}
}
*/
// BPP Support Endpoint
@PostMapping("/bpp/support")
public ResponseEntity support(
@RequestHeader HttpHeaders headers,
@RequestBody SupportRequest request) {
var response = bppApplicationService.support(request, headers);
return ResponseEntity.ok(response);
}
BPP processes the support
public Response support(SupportRequest request, HttpHeaders headers) {
var onSupportRequest = new OnSupportRequest();
// Validate the headers
var isHeadersValid = validateHeaders(headers);
// Construct and return error
if (!isHeadersValid) return null;
// support contact for the given order
var orderSupport = request.getMessage().getRefId();
// Execute business logic here
// Generate the response
onSupportRequest = supportDelivery(orderSupport);
//invoke on_support api
return invokeOnSupport(onSupportRequest, headers);
}
}
BPP generates response
/*
Example Response JSON:
{
"context": {
"domain": "local_retail",
"country": "IND",
"city": "std:080",
"action": "on_support",
"core_version": "0.9.2",
"bap_id": "https://mock_bap.com/",
"bap_uri": "https://mock_bap.com/beckn/",
"transaction_id": "1239890342",
"message_id": "123793824",
"timestamp": "2021-06-23T08:24:26.519Z"
},
"message": {
"phone": "+919898989898",
"email": "[email protected]",
"uri": "http://support.bpp.com?order_id=fulfillment_1"
}
}
*/
public OnSupportRequest supportDelivery(SupportContact support) {
var supportResult = SupportResponseBuilder.builder.result(support).build();
// Convert response into protocol object similar to example above
return supportResult;
}
BPP calls protocol on_support
public Response invokeOnSupport(OnSupportRequest supportResponse, HttpHeaders headers) {
if(supportResponse.getError() == null) {
// Call BAP on_support api with the order response
// Call to look up function which returns the the public key and BAP Endpoint to be called
var url = lookUp(headers);
// Call BAP on_support with the support contact details
var response = apiClient.post(url[0] + Context.ActionEnum.on_support,
constructResponseHeaders(),
supportResponse,
OnSupportRequest.class);
return Response.of("ACK", null);
} else {
return Response.of("NACK", null);
}
}