Java Example
Use this when you want to send the vendor-number callback from Java. Construct with apiKey and baseUrl (e.g. from config), then call assignVendorNumber(eventId, vendorNumber). Returns true on 204.
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class B1LinkWebhookClient {
private final String apiKey;
private final String baseUrl;
private final HttpClient httpClient;
private final ObjectMapper objectMapper;
public B1LinkWebhookClient(String apiKey, String baseUrl) {
this.apiKey = apiKey;
this.baseUrl = baseUrl;
this.httpClient = HttpClient.newHttpClient();
this.objectMapper = new ObjectMapper();
}
public boolean assignVendorNumber(String eventId, String vendorNumber) throws Exception {
// Create request payload
var payload = Map.of(
"Id", eventId,
"ErpVendorNumber", vendorNumber
);
// Serialize to JSON (compact format)
String jsonPayload = objectMapper.writeValueAsString(payload);
// Generate signature
String signature = generateSignature(jsonPayload, apiKey);
// Create HTTP request
String url = baseUrl + "/api/onboarding-request-erp-events/assign-erp-vendor-number-event";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.header("X-B1LINK-Signature", signature)
.PUT(HttpRequest.BodyPublishers.ofString(jsonPayload))
.build();
// Send request
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
return response.statusCode() == 204;
}
private String generateSignature(String payload, String apiKey) throws Exception {
// Get bytes
byte[] payloadBytes = payload.getBytes(StandardCharsets.UTF_8);
byte[] keyBytes = apiKey.getBytes(StandardCharsets.UTF_8);
// Create HMAC-SHA256
Mac mac = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "HmacSHA256");
mac.init(secretKeySpec);
// Compute hash
byte[] hashBytes = mac.doFinal(payloadBytes);
// Base64 encode
return Base64.getEncoder().encodeToString(hashBytes);
}
}
// Usage
B1LinkWebhookClient client = new B1LinkWebhookClient(
"your-api-key-here",
"{baseUrl}"
);
boolean success = client.assignVendorNumber(
"550e8400-e29b-41d4-a716-446655440000",
"VENDOR-12345"
);
Key Points
- Uses
java.net.http.HttpClient(Java 11+) ObjectMapperfrom Jackson for JSON serializationMac.getInstance("HmacSHA256")for signature generationBase64.getEncoder()for Base64 encoding
Dependencies
Add to your pom.xml (Maven):
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
Or to your build.gradle (Gradle):
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
Requirements
- Java 11 or higher (for
java.net.http.HttpClient)
Next step
- Troubleshooting — If you get 401 or 404.