try{PaymentAuthorizationauth=client.createPayment(request);}catch(PaymentExpiredErrore){System.out.println("Payment request expired, retrying...");// Make new request to get fresh payment detailstry{Responseresponse=client.get(url);}catch(PaymentRequiredErrore2){// Handle new payment requestPaymentRequestnewRequest=e2.getPaymentRequest();PaymentAuthorizationauth=client.createPayment(newRequest);Responseretry=client.get(url,auth);}}
try{PaymentAuthorizationauth=client.createPayment(request);}catch(TransactionBroadcastErrore){System.err.println("Failed to broadcast transaction: "+e.getMessage());// Check if it's a network issueMap<String,Object>details=e.getDetails();if(details.containsKey("networkError")){System.err.println("Network error, retrying...");Thread.sleep(2000);// Retry payment creation}else{System.err.println("Transaction rejected");// Log and alert}}
publicStringgetUserFriendlyErrorMessage(Exceptione){if(einstanceofInsufficientFundsError){InsufficientFundsErrorerr=(InsufficientFundsError)e;returnString.format("You don't have enough funds. Required: %s USDC, Available: %s USDC. "+"Please add funds to continue.",err.getRequiredAmount(),err.getAvailableAmount());}elseif(einstanceofPaymentRequiredError){PaymentRequiredErrorerr=(PaymentRequiredError)e;returnString.format("This resource requires a payment of %s USDC. Would you like to proceed?",err.getPaymentRequest().getMaxAmountRequired());}elseif(einstanceofPaymentExpiredError){return"The payment request expired. Please try again.";}elseif(einstanceofPaymentVerificationError){return"Your payment couldn't be verified. Please contact support if this persists.";}elseif(einstanceofTransactionBroadcastError){return"There was a problem processing your payment. Please check your connection and try again.";}elseif(einstanceofInvalidPaymentRequestError){return"The server sent an invalid payment request. Please contact the API provider.";}elseif(einstanceofIOException){return"Network error. Please check your internet connection and try again.";}else{return"An unexpected error occurred. Please try again later.";}}
try{Responseresponse=autoClient.get(url);}catch(InsufficientFundsErrore){// Alert user immediatelynotifyUser("Please add funds to your account");// Log for monitoringlogger.error("Insufficient funds for user: "+userId);// Send alert to admin dashboardalertDashboard("User "+userId+" has insufficient funds");}
publicclassCircuitBreaker{privateintfailureCount=0;privatestaticfinalintFAILURE_THRESHOLD=5;privatestaticfinallongCOOLDOWN_MS=60000;privatelonglastFailureTime=0;publicbooleanshouldAttemptPayment(){if(failureCount>=FAILURE_THRESHOLD){if(System.currentTimeMillis()-lastFailureTime<COOLDOWN_MS){returnfalse;// Circuit open}else{reset();// Try again after cooldown}}returntrue;}publicvoidrecordFailure(){failureCount++;lastFailureTime=System.currentTimeMillis();}publicvoidrecordSuccess(){reset();}privatevoidreset(){failureCount=0;}}
publicclassPaymentAuditor{publicstaticvoidlogPaymentActivity(StringuserId,PaymentRequestrequest,PaymentAuthorizationauth,booleansuccess,Exceptionerror){Map<String,Object>auditEntry=newHashMap<>();auditEntry.put("timestamp",Instant.now().toString());auditEntry.put("userId",userId);auditEntry.put("paymentId",request.getPaymentId());auditEntry.put("amount",request.getMaxAmountRequired());auditEntry.put("paymentAddress",request.getPaymentAddress());auditEntry.put("success",success);if(auth!=null){auditEntry.put("signature",auth.getSignature());}if(error!=null){auditEntry.put("errorCode",((X402Error)error).getCode());auditEntry.put("errorMessage",error.getMessage());}// Save to audit logsaveToAuditLog(auditEntry);}privatestaticvoidsaveToAuditLog(Map<String,Object>entry){// Persist to database, file, or logging service}}