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

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;
Подскажите плиз
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 606
Благодарностей
4 597
Баллы
113

maksgmn

Client
Регистрация
29.01.2016
Сообщения
204
Благодарностей
6
Баллы
18

doc

Client
Регистрация
30.03.2012
Сообщения
8 606
Благодарностей
4 597
Баллы
113
Код:
{"id":"11111111111111","sum": {"amount":100.50,"currency":"643"},"paymentMethod": {"type":"Account","accountId":"643"},"comment":"test","fields": {"account":"+79121112233"}}
 

maksgmn

Client
Регистрация
29.01.2016
Сообщения
204
Благодарностей
6
Баллы
18
Код:
{"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"}   
        }

);
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 606
Благодарностей
4 597
Баллы
113
Я вот так передаю, он на двоеточия и все такое ругается:

Код:
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"}  
        }

);
это строка. Её надо заключить в двойные кавычки. Двойные кавычки внутри строки нужно экранировать
 

maksgmn

Client
Регистрация
29.01.2016
Сообщения
204
Благодарностей
6
Баллы
18
это строка. Её надо заключить в двойные кавычки. Двойные кавычки внутри строки нужно экранировать
я не туда передавал похоже, надо в тело, а передаю в заголовки, щас попробую и отпишусь
 

maksgmn

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

Код:
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
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113

maksgmn

Client
Регистрация
29.01.2016
Сообщения
204
Благодарностей
6
Баллы
18
Можно. Сделать в 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
        }
    ]
}
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 856
Баллы
113
Как-то так:
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

maksgmn

Client
Регистрация
29.01.2016
Сообщения
204
Благодарностей
6
Баллы
18
Как-то так:
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 трогаю. Могут быть ошибки, но ход мыслей должен быть понятен.
Спасибо большое, поковыряю
 

25region

Client
Регистрация
26.09.2013
Сообщения
182
Благодарностей
57
Баллы
28

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 25region какие-либо сделки.

Что-то такое получилось в итоге:

Код:
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
это работает ?
 

25region

Client
Регистрация
26.09.2013
Сообщения
182
Благодарностей
57
Баллы
28

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 25region какие-либо сделки.

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