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_key": {
{ "order_number_type": 1,
order_number_type = 1, // 使用商户订单号 "mchid": "{{mchId}}",
mchid = mchId, "out_trade_no": "{{request.OrderNo}}"
out_trade_no = request.OrderNo
}, },
logistics_type = request.LogisticsType, // 4=虚拟商品 "logistics_type": {{request.LogisticsType}},
delivery_mode = 1, // 1=统一发货 "delivery_mode": 1,
shipping_list = new[] "shipping_list": [
{ {
new { item_desc = itemDesc } "item_desc": "{{itemDesc}}"
},
upload_time = uploadTime,
payer = new
{
openid = request.OpenId
} }
}; ],
"upload_time": "{{uploadTime}}",
var jsonContent = JsonSerializer.Serialize(requestBody, new JsonSerializerOptions "payer": {
{ "openid": "{{request.OpenId}}"
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}";