需监听哪个Easypost Webhook事件以确认运单标签退款被承运人接受?
正确的Easypost Webhook事件:
refund.updated 你当前监听的return_update是用于退货运输(用户寄回商品的物流状态更新),和运单标签的退款确认完全无关,所以不会触发。要确认运单标签退款被承运人接受,需要监听refund.updated事件,并检查退款状态是否变为accepted。
关键调整点:
- 订阅正确的Webhook事件:在Easypost控制台开启
refund.updated事件的订阅,否则无法收到退款状态变更通知。 - 修改代码逻辑:不再通过
statusDetail判断,而是基于Webhook的事件类型和退款对象的状态来处理:
// 先获取Webhook事件类型 String eventType = (String) result.get("event"); if ("refund.updated".equals(eventType)) { Map<String, Object> refundData = (Map<String, Object>) result.get("refund"); String refundStatus = (String) refundData.get("status"); // 仅当退款被承运人接受时处理 if ("accepted".equals(refundStatus)) { String easypostShipmentId = (String) refundData.get("shipment_id"); Shipment userShipment = shipmentService.retrieveShipmentFromEasypostId(easypostShipmentId); String chargeId = userShipment.getStripeChargeId(); try { Refund refund = stripeService.refund(chargeId); userShipment.setStripeRefundId(refund.getId()); userShipment.setStatus(ShipmentStatus.REFUND_PROCESSED); // 这里可以设置对应退款的状态,比如自定义的REFUNDED枚举值 userShipment.setEasypostStatus(EasypostShipmentStatus.REFUNDED); shipmentService.updateShipment(userShipment); double refundAmount = stripeService.getRefundAmount(refund); activityLoggerService.insert(userShipment.getUser(), userShipment, activityLoggerService.getShipmentReturnProcessed(userShipment, refundAmount), ActivityMessageType.RETURN_PROCESSED); } catch (StripeException e) { System.err.println("Error issuing refund: " + e.getMessage()); } } }
补充说明:
- Easypost的标签退款流程:提交退款请求后,先触发
refund.created事件(状态submitted);当承运人审核通过并接受退款时,触发refund.updated事件,状态变为accepted,这才是你需要的确认节点。 - 不要混淆"退货运输"和"标签退款":
return_update对应前者的物流状态,和退款本身没有关系。
内容的提问来源于stack exchange,提问作者Johni
相关产品推荐
相关产品推荐

