fix: 修复微信发货接口 UTF8 编码问题

- 使用字符串模板直接构建 JSON,与 PHP 实现保持一致
- 移除 JsonSerializer 的 SnakeCaseLower 策略避免双重转换
- 添加请求内容的调试日志
This commit is contained in:
zpc 2026-02-10 16:18:17 +08:00
parent d9dc8e4a6e
commit ba0d0548d3

View File

@ -1013,38 +1013,35 @@ public class WechatService : IWechatService
}; };
} }
// 4. 构建请求参数 // 4. 构建请求参数 - 直接构建 JSON 字符串,与 PHP 保持一致
var itemDesc = request.ItemDesc ?? GetDefaultItemDesc(request.OrderNo); var itemDesc = request.ItemDesc ?? GetDefaultItemDesc(request.OrderNo);
var uploadTime = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + "+08:00"; var uploadTime = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss") + "+08:00";
var requestBody = new // 使用字符串模板构建 JSON确保格式与微信要求一致
{ var jsonContent = $$"""
order_key = new
{ {
order_number_type = 1, // 使用商户订单号 "order_key": {
mchid = mchId, "order_number_type": 1,
out_trade_no = request.OrderNo "mchid": "{{mchId}}",
}, "out_trade_no": "{{request.OrderNo}}"
logistics_type = request.LogisticsType, // 4=虚拟商品 },
delivery_mode = 1, // 1=统一发货 "logistics_type": {{request.LogisticsType}},
shipping_list = new[] "delivery_mode": 1,
{ "shipping_list": [
new { item_desc = itemDesc } {
}, "item_desc": "{{itemDesc}}"
upload_time = uploadTime, }
payer = new ],
{ "upload_time": "{{uploadTime}}",
openid = request.OpenId "payer": {
"openid": "{{request.OpenId}}"
}
} }
}; """;
var jsonContent = JsonSerializer.Serialize(requestBody, new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower
});
_logger.LogInformation("调用微信发货接口: OrderNo={OrderNo}, MchId={MchId}, OpenId={OpenId}", _logger.LogInformation("调用微信发货接口: OrderNo={OrderNo}, MchId={MchId}, OpenId={OpenId}",
request.OrderNo, mchId, request.OpenId); request.OrderNo, mchId, request.OpenId);
_logger.LogDebug("发货请求内容: {JsonContent}", jsonContent);
// 5. 发送请求 // 5. 发送请求
var url = $"{uploadShippingUrl}?access_token={accessToken}"; var url = $"{uploadShippingUrl}?access_token={accessToken}";