如何用VB.NET调用WooCommerce API获取指定日期订单并在DataGridView展示
解决方案:VB.NET调用WooCommerce API获取订单并展示
一、发起API请求获取JSON数据
WooCommerce REST API需要OAuth 1.0a身份验证,用HttpClient配合OAuth签名工具就能实现,步骤如下:
安装必要NuGet包
安装Newtonsoft.Json(用于JSON解析)和OAuth.Base(简化OAuth签名生成,也可手动实现)。编写API请求代码
Imports System.Net.Http Imports Newtonsoft.Json Imports OAuth.Base Public Async Function GetWooCommerceOrders(startDate As Date, endDate As Date) As Task(Of List(Of Order)) ' 店铺API配置 Dim baseUrl As String = "https://你的店铺域名/wp-json/wc/v3" Dim consumerKey As String = "你的Consumer Key" Dim consumerSecret As String = "你的Consumer Secret" ' 构造请求参数:日期范围、订单状态等 Dim parameters As New Dictionary(Of String, String) From { {"after", startDate.ToString("yyyy-MM-ddTHH:mm:ss")}, {"before", endDate.ToString("yyyy-MM-ddTHH:mm:ss")}, {"status", "completed"} ' 可按需修改为processing、pending等 } ' 生成OAuth授权头 Dim oauthHelper As New OAuthHelper(consumerKey, consumerSecret) Dim requestUrl As String = $"{baseUrl}/orders" Dim authHeader As String = oauthHelper.GenerateOAuthHeader(requestUrl, HttpMethod.Get, parameters) ' 发起异步请求 Using client As New HttpClient() client.DefaultRequestHeaders.Add("Authorization", authHeader) Dim queryString As String = String.Join("&", parameters.Select(Function(kv) $"{kv.Key}={Uri.EscapeDataString(kv.Value)}")) Dim response As HttpResponseMessage = Await client.GetAsync($"{requestUrl}?{queryString}") response.EnsureSuccessStatusCode() ' 解析JSON到实体类 Dim jsonString As String = Await response.Content.ReadAsStringAsync() Return JsonConvert.DeserializeObject(Of List(Of Order))(jsonString) End Using End Function ' 订单实体类(根据WooCommerce API响应字段定义,可按需扩展) Public Class Order Public Property id As Integer Public Property number As String Public Property date_created As DateTime Public Property total As Decimal Public Property status As String Public Property billing As BillingInfo ' 其他需要的字段可自行添加 End Class Public Class BillingInfo Public Property first_name As String Public Property last_name As String Public Property email As String Public Property phone As String End Class
二、绑定数据到DataGridView
在按钮点击事件中调用上述方法,将结果绑定到DataGridView:
Private Async Sub btnGetOrders_Click(sender As Object, e As EventArgs) Handles btnGetOrders.Click ' 获取用户选择的日期范围(假设用DateTimePicker控件:dtpStart、dtpEnd) Dim startDate As Date = dtpStart.Value.Date Dim endDate As Date = dtpEnd.Value.Date.AddDays(1).AddSeconds(-1) ' 包含结束日的最后一秒 Try Dim orders As List(Of Order) = Await GetWooCommerceOrders(startDate, endDate) ' 绑定数据源 dgvOrders.DataSource = orders ' 自定义列显示(可选) dgvOrders.Columns("id").HeaderText = "订单ID" dgvOrders.Columns("number").HeaderText = "订单编号" dgvOrders.Columns("date_created").HeaderText = "创建时间" dgvOrders.Columns("total").HeaderText = "订单总额" dgvOrders.Columns("status").HeaderText = "订单状态" ' 绑定嵌套对象属性 dgvOrders.Columns.Add(New DataGridViewTextBoxColumn() With { .Name = "BillingName", .HeaderText = "客户姓名", .DataPropertyName = "billing.first_name" }) ' 隐藏不需要的列 dgvOrders.Columns("billing").Visible = False Catch ex As Exception MessageBox.Show($"获取订单失败:{ex.Message}") End Try End Sub
三、更优的订单展示方案
优化DataGridView体验
- 开启列自适应:
dgvOrders.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill - 添加交替行颜色:
dgvOrders.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGray - 格式化金额列:设置
total列的DefaultCellStyle.Format = "C2"(按本地货币格式显示) - 启用排序筛选:
dgvOrders.AllowSorting = True,或手动实现关键词筛选功能
- 开启列自适应:
替代展示方案
- 分页加载:WooCommerce API支持
page和per_page参数,避免一次性加载大量数据 - 列表+详情模式:用ListView展示简洁订单列表,点击行弹出窗口显示完整订单信息
- 第三方控件:如DevExpress GridControl、Telerik RadGridView,支持分组、导出、高级筛选等功能
- 分页加载:WooCommerce API支持
四、参考资源
- WooCommerce REST API官方文档:重点查看Orders端点的请求参数、响应结构和OAuth验证规则
- Newtonsoft.Json官方文档:学习JSON序列化/反序列化的高级用法,比如自定义字段映射
- VB.NET HttpClient官方文档:了解异步请求的最佳实践
- GitHub开源项目:搜索VB.NET WooCommerce API客户端,可找到现成的封装类参考
内容的提问来源于stack exchange,提问作者John MacClain
相关产品推荐
相关产品推荐

