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