Как передать json в тело Zennoposter.HttpPost

  • Автор темы Автор темы maksgmn
  • Дата начала Дата начала

maksgmn

Client
Регистрация
29.01.2016
Сообщения
204
Реакции
6
Баллы
18
Нужно передать json вот такого типа:

Код:
Развернуть Свернуть Копировать
{
    "id":"11111111111111",
    "sum": {
                "amount":100.50,
                "currency":"643"
    },
    "paymentMethod": {
            "type":"Account",
            "accountId":"643"
    },
    "comment":"test",
    "fields": {
                 "account":"+79121112233"
    }
}

Проблема с тем, что я не знаю как передать вложенный json, одноуровневые понятно, а тут не очень, сам запрос такого вида:

Код:
Развернуть Свернуть Копировать
var proxy = project.Variables["proxy"].Value;
var resultHttpPost = ZennoPoster.HttpPost(
    "https://edge.qiwi.com/sinap/api/v2/terms/99/payments",
    "application/json",
    proxy,
    "UTF-8",
    ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
    30000,
    "",
    "",
    true,
    5,
    new[] {
    Вот сюда надо как-то передать этот json
    }
);
return resultHttpPost;

Подскажите плиз
 
Код:
Развернуть Свернуть Копировать
{"id":"11111111111111","sum": {"amount":100.50,"currency":"643"},"paymentMethod": {"type":"Account","accountId":"643"},"comment":"test","fields": {"account":"+79121112233"}}
 
Код:
Развернуть Свернуть Копировать
{"id":"11111111111111","sum": {"amount":100.50,"currency":"643"},"paymentMethod": {"type":"Account","accountId":"643"},"comment":"test","fields": {"account":"+79121112233"}}
Я вот так передаю, он на двоеточия и все такое ругается:

Код:
Развернуть Свернуть Копировать
var resultHttpPost = ZennoPoster.HttpPost(
        "https://edge.qiwi.com/sinap/api/v2/terms/99/payments",
        "application/json",
        proxy,
        "UTF-8",
        ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
        30000,
        "",
        "",
        true,
        5,   
        new[]
        {
            "Authorization: Bearer xxxx",
            {"id":"12345678903456","sum": {"amount":1.50,"currency":"643"},"paymentMethod": {"type":"Account","accountId":"643"},"comment":"test","fields": {"account":"+79805408683"}   
        }

);
 
Я вот так передаю, он на двоеточия и все такое ругается:

Код:
Развернуть Свернуть Копировать
var resultHttpPost = ZennoPoster.HttpPost(
        "https://edge.qiwi.com/sinap/api/v2/terms/99/payments",
        "application/json",
        proxy,
        "UTF-8",
        ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly,
        30000,
        "",
        "",
        true,
        5,  
        new[]
        {
            "Authorization: Bearer xxxx",
            {"id":"12345678903456","sum": {"amount":1.50,"currency":"643"},"paymentMethod": {"type":"Account","accountId":"643"},"comment":"test","fields": {"account":"+79805408683"}  
        }

);
это строка. Её надо заключить в двойные кавычки. Двойные кавычки внутри строки нужно экранировать
 
это строка. Её надо заключить в двойные кавычки. Двойные кавычки внутри строки нужно экранировать
я не туда передавал похоже, надо в тело, а передаю в заголовки, щас попробую и отпишусь
 
Что-то такое получилось в итоге:

Код:
Развернуть Свернуть Копировать
var list = project.Lists["qiwiData"];

for (int i = 0; i < list.Count(); i++) {
  
    var proxy = project.Variables["proxy"].Value; //прокси
    var accountLogin = "+" + list[i].Split(':', '|')[0]; //логин резервного аккаунта
    var mainAccountApikey = project.Variables["mainAccountApikey"].Value; //апи-кей главного аккаунта
    var fillAmount = project.Variables["fillAmount"].Value; //на сколько пополняем
    var id = (long)(DateTime.Now.Subtract(new DateTime(1970, 1, 1))).TotalSeconds * 1000; //айди

    var content = "{\"id\":\"" + id + "\",\"sum\": {\"amount\":" + fillAmount + ",\"currency\":\"643\"},\"paymentMethod\": {\"type\":\"Account\",\"accountId\":\"643\"},\"comment\":\"test\",\"fields\": {\"account\":\"" + accountLogin + "\"}}";
    var url = "https://edge.qiwi.com/sinap/api/v2/terms/99/payments";

    var resultHttpPost = ZennoPoster.HttpPost(
       url,
       content,
       "application/json",
       "",
       "UTF-8",
       ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
       30000,
       "",
       "",
       true,
       5,
       new [] {
            "Accept: application/json",
            "Host: edge.qiwi.com",
            "Authorization: Bearer " + mainAccountApikey
        }
    );
  
}

Такой вопрос: а возможно как-либо без этих ухищрений с одной строкой все сделать? Чтобы прямо в коде был читаемый json
 
Можно. Сделать в C# объект и сериализовать его через Newtonsoft Json.NET: https://www.newtonsoft.com/json/help/html/SerializeObject.htm
делал так, там json сложный, я хз какой класс под него сделать если честно, может ты сообразишь? Вот сам json:

Код:
Развернуть Свернуть Копировать
{
    "accounts": [
        {
            "alias": "mc_beeline_rub",
            "fsAlias": "qb_mc_beeline",
            "bankAlias": "QIWI",
            "title": "MC",
            "type": {
                "id": "MC",
                "title": "Счет мобильного кошелька"
            },
            "hasBalance": false,
            "balance": null,
            "currency": 643
        },
        {
            "alias": "qw_wallet_rub",
            "fsAlias": "qb_wallet",
            "bankAlias": "QIWI",
            "title": "WALLET",
            "type": {
                "id": "WALLET",
                "title": "QIWI Wallet"
            },
            "hasBalance": true,
            "balance": {
                "amount": 8.74,
                "currency": 643
            },
            "currency": 643
        }
    ]
}
 
Как-то так:
C#:
Развернуть Свернуть Копировать
// В общий код
public class Type {
    public string id { get; set; }
    public string title { get; set; }
}
public class Balance {
    public double amount { get; set; }
    public int currency { get; set; }
}
public class Account {
    public string alias { get; set; }
    public string fsAlias { get; set; }
    public string bankAlias { get; set; }
    public string title { get; set; }
    public object type { get; set; }
    public bool hasBalance { get; set; }
    public object balance { get; set; }
    public int currency { get; set; }
}


// В кубик сниппета
Type acc_obj1_type = new Type() {
    id = "MC",
    title = "Счет мобильного кошелька"
};
Type acc_obj2_type = new Type() {
    id = "WALLET",
    title = "QIWI Wallet"
};
Balance acc_obj2_balance = new Balance(){
    amount = 8.74,
    currency = 643
}

Account acc_obj1 = new Account(){
    alias = "mc_beeline_rub",
    fsAlias = "qb_mc_beeline",
    bankAlias = "QIWI",
    title = "MC",
    type = acc_obj1_type,
    hasBalance = false,
    balance = null,
    currency = 643
};
Account acc_obj2 = new Account(){
    alias = "qw_wallet_rub",
    fsAlias = "qb_wallet",
    bankAlias = "QIWI",
    title = "WALLET",
    type = acc_obj2_type,
    hasBalance = true,
    balance = acc_obj2_balance,
    currency = 643
};

// делаем список аккаунтов
List<Account> accounts_list = new List<Account>();
accounts_list.Add(acc_obj1);
accounts_list.Add(acc_obj2);

// делаем словарь списка аккаунтов
Dictionary<string, object> accounts_dict = new Dictionary<string, object>();
accounts_dict.Add("accounts", accounts_list);


// генерируем json из словаря
string json = JsonConvert.SerializeObject(accounts_dict, Formatting.None);

PS: Писал на коленке, чтоб размять мозг, а то уже несколько недель только php трогаю. Могут быть ошибки, но ход мыслей должен быть понятен.
 
  • Оценить
Реакции: maksgmn
Как-то так:
C#:
Развернуть Свернуть Копировать
// В общий код
public class Type {
    public string id { get; set; }
    public string title { get; set; }
}
public class Balance {
    public double amount { get; set; }
    public int currency { get; set; }
}
public class Account {
    public string alias { get; set; }
    public string fsAlias { get; set; }
    public string bankAlias { get; set; }
    public string title { get; set; }
    public object type { get; set; }
    public bool hasBalance { get; set; }
    public object balance { get; set; }
    public int currency { get; set; }
}


// В кубик сниппета
Type acc_obj1_type = new Type() {
    id = "MC",
    title = "Счет мобильного кошелька"
};
Type acc_obj2_type = new Type() {
    id = "WALLET",
    title = "QIWI Wallet"
};
Balance acc_obj2_balance = new Balance(){
    amount = 8.74,
    currency = 643
}

Account acc_obj1 = new Account(){
    alias = "mc_beeline_rub",
    fsAlias = "qb_mc_beeline",
    bankAlias = "QIWI",
    title = "MC",
    type = acc_obj1_type,
    hasBalance = false,
    balance = null,
    currency = 643
};
Account acc_obj2 = new Account(){
    alias = "qw_wallet_rub",
    fsAlias = "qb_wallet",
    bankAlias = "QIWI",
    title = "WALLET",
    type = acc_obj2_type,
    hasBalance = true,
    balance = acc_obj2_balance,
    currency = 643
};

// делаем список аккаунтов
List<Account> accounts_list = new List<Account>();
accounts_list.Add(acc_obj1);
accounts_list.Add(acc_obj2);

// делаем словарь списка аккаунтов
Dictionary<string, object> accounts_dict = new Dictionary<string, object>();
accounts_dict.Add("accounts", accounts_list);


// генерируем json из словаря
string json = JsonConvert.SerializeObject(accounts_dict, Formatting.None);

PS: Писал на коленке, чтоб размять мозг, а то уже несколько недель только php трогаю. Могут быть ошибки, но ход мыслей должен быть понятен.

Спасибо большое, поковыряю
 
Что-то такое получилось в итоге:

Код:
Развернуть Свернуть Копировать
var list = project.Lists["qiwiData"];

for (int i = 0; i < list.Count(); i++) {
 
    var proxy = project.Variables["proxy"].Value; //прокси
    var accountLogin = "+" + list[i].Split(':', '|')[0]; //логин резервного аккаунта
    var mainAccountApikey = project.Variables["mainAccountApikey"].Value; //апи-кей главного аккаунта
    var fillAmount = project.Variables["fillAmount"].Value; //на сколько пополняем
    var id = (long)(DateTime.Now.Subtract(new DateTime(1970, 1, 1))).TotalSeconds * 1000; //айди

    var content = "{\"id\":\"" + id + "\",\"sum\": {\"amount\":" + fillAmount + ",\"currency\":\"643\"},\"paymentMethod\": {\"type\":\"Account\",\"accountId\":\"643\"},\"comment\":\"test\",\"fields\": {\"account\":\"" + accountLogin + "\"}}";
    var url = "https://edge.qiwi.com/sinap/api/v2/terms/99/payments";

    var resultHttpPost = ZennoPoster.HttpPost(
       url,
       content,
       "application/json",
       "",
       "UTF-8",
       ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
       30000,
       "",
       "",
       true,
       5,
       new [] {
            "Accept: application/json",
            "Host: edge.qiwi.com",
            "Authorization: Bearer " + mainAccountApikey
        }
    );
 
}

Такой вопрос: а возможно как-либо без этих ухищрений с одной строкой все сделать? Чтобы прямо в коде был читаемый json
это работает ?
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)