我需要使用ERP站点中的Rest API,在那里我将列出该站点中的某些项目,但是我找不到任何有用的东西可以帮助我使用
我正在使用json和http客户端执行,但是过程中的错误会识别站点路径
public partial class ProdutoPage : ContentPage
{
ListView lv = new ListView();
public ProdutoPage()
{
InitializeComponent();
iniciar();
}
private async void iniciar()
{
//tinyapp API = new tinyapp();
//var lista = API.ListaCategorias("automacao");
var client = new HttpClient();
client.DefaultRequestHeaders.Add("token", "");
client.BaseAddress = new Uri("https://api.tiny.com.br/api2/pedidos.pesquisa.php/");
var resp = await client.GetAsync("pedidos.pesquisa.php/");
if (resp.IsSuccessStatusCode)
{
var respStr = await resp.Content.ReadAsStringAsync();
var l = JsonConvert.DeserializeObject<List<Pedido>>(respStr);
lv.ItemsSource = l;
}
}
}
}
我需要一个ERP站点请求列表
答案 0 :(得分:0)
这有效:
var client = new HttpClient();
client.BaseAddress = new Uri("https://api.tiny.com.br/api2/");
var parameters = new Dictionary<string, string> { { "token", "0dbffc6cbb412c01a90431f07631c0e00f2889d4" } };
var encodedContent = new FormUrlEncodedContent(parameters);
var resp = await client.PostAsync("pedidos.pesquisa.php", encodedContent);
var respStr = await resp.Content.ReadAsStringAsync();
经过研究,我发现您的API需要POST才能返回数据:
{{1}}
答案 1 :(得分:0)
在ASP.Net中没有错误,但是在xamarim中,它没有使用System.Web.Script.Serialization来启用javascript
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Web;
using System.Web.Script.Serialization;
using System.Xml.Linq;
namespace mia.Webservices
{
public class TinyAPI
{
private const string URL_PEDIDOS = "https://api.tiny.com.br/api2/pedidos.pesquisa.php/";
private const string URL_OBTER_PEDIDO = "https://api.tiny.com.br/api2/pedido.obter.php/";
private string parametros = "?formato=json";
private string token_solucoes = "";
private string token_automacao = "";
/// <summary>
/// ListaPedidos é um método que lista todos os pedidos do Tiny de acordo com os parâmetros data inicial e data final.
/// </summary>
public List<Pedido> ListaPedidos(string empresa, string situacao, string data_inicial, string data_final)
{
int pagina = 1;
string token = "";
if (empresa.Equals("automacao"))
{
token = token_automacao;
}
else
{
if (empresa.Equals("solucoes"))
{
token = token_solucoes;
}
}
HttpClient client = new HttpClient();
var baseAddress = new Uri(URL_PEDIDOS);
client.BaseAddress = baseAddress;
List<Pedido> pedidos = new List<Pedido>();
HttpResponseMessage response = null;
if (data_inicial != null && data_inicial != "" && data_final != null && data_final != "")
{
response = client.GetAsync(parametros + "&token=" + token + "&dataInicial=" + data_inicial + "&dataFinal=" + data_final + "&situacao=" + situacao).Result;
}
else
{
response = client.GetAsync(parametros + "&pagina=" + pagina + "&token=" + token).Result;
}
string json = response.Content.ReadAsStringAsync().Result;
Dictionary<string, object> userObject = new JavaScriptSerializer().DeserializeObject(json) as Dictionary<string, object>;
if (userObject.ContainsKey("retorno"))
{
Object meta = userObject["retorno"];
Dictionary<string, object> dic_meta = (Dictionary<string, object>)meta;
if (dic_meta.ContainsKey("numero_paginas"))
{
int total_count = (int)dic_meta["numero_paginas"];
while (total_count >= pagina)
{
HttpResponseMessage response_2 = null;
if (data_inicial != null && data_inicial != "" && data_final != null && data_final != "")
{
response_2 = client.GetAsync(parametros + "&token=" + token + "&dataInicial=" + data_inicial + "&dataFinal=" + data_final + "&situacao=" + situacao).Result;
}
else
{
response_2 = client.GetAsync(parametros + "&pagina=" + pagina + "&token=" + token).Result;
}
string json_2 = response_2.Content.ReadAsStringAsync().Result;
Dictionary<string, object> userObject_2 = new JavaScriptSerializer().DeserializeObject(json_2) as Dictionary<string, object>;
Dictionary<string, object> objetos = (Dictionary<string, object>)userObject_2["retorno"];
if (objetos.ContainsKey("pedidos"))
{
Object[] pedidos_list = (Object[])objetos["pedidos"];
foreach (var item in pedidos_list)
{
Dictionary<string, object> pre_lista_pedidos = (Dictionary<string, object>)item;
Dictionary<string, object> list_pedidos = (Dictionary<string, object>)pre_lista_pedidos["pedido"];
Pedido pedido = new Pedido();
pedido.situacao = (string)list_pedidos["situacao"];
pedido.id = (string)list_pedidos["id"];
pedido.numero = (string)list_pedidos["numero"];
pedido.numero_ecommerce = (string)list_pedidos["numero_ecommerce"];
pedido.data_pedido = (string)list_pedidos["data_pedido"];
pedido.data_prevista = (string)list_pedidos["data_prevista"];
pedido.nome = (string)list_pedidos["nome"];
pedido.valor = (string)list_pedidos["valor"].ToString();
pedido.id_vendedor = (string)list_pedidos["id_vendedor"];
pedido.nome_vendedor = (string)list_pedidos["nome_vendedor"];
pedido.codigo_rastreamento = (string)list_pedidos["codigo_rastreamento"];
pedido.url_rastreamento = (string)list_pedidos["url_rastreamento"];
pedidos.Add(pedido);
}
}
total_count -= 1;
}
}
}
return pedidos;
}
}
答案 2 :(得分:0)
> var client = new HttpClient();
client.BaseAddress = new Uri("https://api.tiny.com.br/api2/");
var resp = client.GetAsync("pedidos.pesquisa.php?token=********&formato=json").Result;
if (resp.IsSuccessStatusCode)
{
var respStr = resp.Content.ReadAsStringAsync().Result;
var l = JsonConvert.DeserializeObject<List<Pedido>>(respStr);
lv.ItemsSource = l;
}`
这样做是为了找到令牌,但是Json中的一个错误遵循了Pedido列表中json的示例
{
"retorno": {
"status_processamento": 3,
"status": "OK",
"pagina": "1",
"numero_paginas": "1",
"pedidos": [
{
"pedido": {
"id": 123456,
"numero": 123456,
"numero_ecommerce": "12",
"data_pedido": "01/01/2013",
"data_prevista": "10/01/2013",
"nome": "Cliente Teste",
"valor": "100.25",
"id_vendedor": "123456",
"nome_vendedor": "Vendedor Teste",
"situacao": "Atendido"
}
},
{
"pedido": {
"id": 123456,
"numero": 123458,
"numero_ecommerce": "15",
"data_pedido": "01/01/2013",
"data_prevista": "10/01/2013",
"nome": "Cliente Teste 3",
"valor": "50.25",
"id_vendedor": "",
"nome_vendedor": "",
"situacao": "Aberto"
}
}
]
}
}
错误Newtonsoft.Json.JsonSerializationException:
pedido班
public class Pedido
{
public string id { get; set; }
public string numero { get; set; }
public string numero_ecommerce { get; set; }
public string data_pedido { get; set; }
public string data_prevista { get; set; }
public string nome { get; set; }
public string valor { get; set; }
public string id_vendedor { get; set; }
public string nome_vendedor { get; set; }
public string situacao { get; set; }
public string codigo_rastreamento { get; set; }
public string url_rastreamento { get; set; }
public string data_faturamento { get; set; }
public Cliente cliente { get; set; }
public List<Produto_Servico> produtos_servicos { get; set; }
}
答案 3 :(得分:0)
我能够读取较小的类别列表
using System;
using System.Collections.Generic;
using System.Text;
namespace MacVendas.Models.API
{
public class Categoria
{
public class Retorno
{
public string id { get; set; }
public string descricao { get; set; }
public List<object> nodes { get; set; }
}
public class RootObject
{
public List<Retorno> retorno { get; set; }
}
}
}
Produtopagexaml.cs
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using MacVendas.Classes;
//using macvendas.services;
using MacVendas.Models.API;
using Newtonsoft.Json;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace MacVendas.Pages
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class ProdutoPage : ContentPage
{
public ProdutoPage()
{
InitializeComponent();
Iniciar();
}
private void Iniciar()
{
var client = new HttpClient();
var resp = client.GetAsync("https://api.tiny.com.br/api2/produtos.categorias.arvore.php?token=*****&formato=json").Result;
string respStr = resp.Content.ReadAsStringAsync().Result;
Categoria.RootObject ObjPedidotList = new Categoria.RootObject ();
if (respStr != "")
{
ObjPedidotList = JsonConvert.DeserializeObject<Categoria.RootObject>(respStr);
}
//Binding listview with server response
listviewConacts.ItemsSource = ObjPedidotList.retorno;
}
}
}
produto.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="MacVendas.Pages.ProdutoPage">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Margin="10" Text="JSON Parsing" FontSize="25" />
<ListView x:Name="listviewConacts" Grid.Row="1" HorizontalOptions="FillAndExpand" HasUnevenRows="True" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid HorizontalOptions="FillAndExpand" Padding="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Text="{Binding descricao}" HorizontalOptions="StartAndExpand" Grid.Row="0" TextColor="Blue" FontAttributes="Bold"/>
<!--<Label Text="{Binding numero}" HorizontalOptions="StartAndExpand" Grid.Row="1" TextColor="Orange" FontAttributes="Bold"/>
<Label Text="{Binding valor}" HorizontalOptions="StartAndExpand" Grid.Row="2" TextColor="Gray" FontAttributes="Bold"/>-->
<BoxView HeightRequest="2" Margin="0,10,10,0" BackgroundColor="Gray" Grid.Row="3" HorizontalOptions="FillAndExpand" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</ContentPage>
答案 4 :(得分:0)
Pedidos类
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace MacVendas.Models.API
{
public class Pedido
{
public class Pedido2
{
public string id { get; set; }
public string numero { get; set; }
public string numero_ecommerce { get; set; }
public string data_pedido { get; set; }
public string data_prevista { get; set; }
public string nome { get; set; }
public string valor { get; set; }
public string id_vendedor { get; set; }
public string nome_vendedor { get; set; }
public string situacao { get; set; }
public string codigo_rastreamento { get; set; }
public string url_rastreamento { get; set; }
}
public class Pedido1
{
public string pedido { get; set; }
}
public class Retorno
{
public string status_processamento { get; set; }
public string status { get; set; }
public string pagina { get; set; }
public string numero_paginas { get; set; }
public List<Pedido1> pedidos { get; set; }
}
public class RootObject
{
public Retorno retorno { get; set; }
}
}
}