|
|
@@ -550,6 +550,50 @@ public class WxPayScoreStrategy implements PayScoreStrategy {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public PayScoreResult payServiceOrder(String outOrderNo) {
|
|
|
+ log.info("[微信支付分] 发起支付扣款 - 订单号: {}", outOrderNo);
|
|
|
+
|
|
|
+ PayScoreResult checkResult = checkServiceAvailable();
|
|
|
+ if (checkResult != null) {
|
|
|
+ return checkResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ ObjectNode body = objectMapper.createObjectNode();
|
|
|
+ body.put("appid", wxPayConfig.getAppId());
|
|
|
+ body.put("service_id", wxPayConfig.getServiceId());
|
|
|
+
|
|
|
+ String requestBody = objectMapper.writeValueAsString(body);
|
|
|
+ String url = PAY_SCORE_BASE_URL + "/" + outOrderNo + "/pay";
|
|
|
+ log.info("[微信支付分] 支付请求: url={}, body={}", url, requestBody);
|
|
|
+
|
|
|
+ HttpRequest httpRequest = new HttpRequest.Builder()
|
|
|
+ .httpMethod(HttpMethod.POST)
|
|
|
+ .url(url)
|
|
|
+ .body(new JsonRequestBody.Builder().body(requestBody).build())
|
|
|
+ .addHeader("Content-Type", MediaType.APPLICATION_JSON.getValue())
|
|
|
+ .addHeader("Accept", MediaType.APPLICATION_JSON.getValue())
|
|
|
+ .build();
|
|
|
+
|
|
|
+ HttpResponse<Map> response = wxPayHttpClient.execute(httpRequest, Map.class);
|
|
|
+ Map<String, Object> responseMap = response.getServiceResponse();
|
|
|
+ JsonNode respJson = objectMapper.valueToTree(responseMap);
|
|
|
+
|
|
|
+ String respOrderNo = getJsonString(respJson, "out_order_no");
|
|
|
+ log.info("[微信支付分] 支付扣款成功 - 订单号: {}", respOrderNo);
|
|
|
+
|
|
|
+ return PayScoreResult.success(respOrderNo, null);
|
|
|
+
|
|
|
+ } catch (ServiceException e) {
|
|
|
+ log.error("[微信支付分] 支付扣款业务异常: code={}, msg={}", e.getErrorCode(), e.getErrorMessage(), e);
|
|
|
+ return PayScoreResult.fail(e.getErrorCode(), e.getErrorMessage());
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("[微信支付分] 支付扣款异常", e);
|
|
|
+ return PayScoreResult.fail("UNKNOWN_ERROR", "支付扣款失败: " + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public PayScoreResult refundServiceOrder(PayScoreRefundRequest request) {
|
|
|
log.info("[微信支付分] 申请退款 - 订单号: {}, 金额: {}元", request.getOutOrderNo(), request.getRefundAmount());
|