ПоискПочтаКалендарьДеньгиМой КругФоткиНародОткрытки
Войти


Чтобы получить доступ ко всем возможностям Я.ру, создайте страницу или , если у вас она уже есть.
userpic

премодерируемый клуб  

Присоединившись к клубу, вы сможете вывешивать фотки в галерее и создавать новые темы для обсуждения. Обсуждаемые темы клуба будут появляться на странице «Что нового».
Вступить в клуб
В клубе действуют правила.
Правила клуба
Клуб создан для удобства общения разработчиков приложений на базе API Яндекс.Денег друг с другом и с разработчиками сервиса.

В Клубе приветствуется:
  • Взаимопомощь при решении возникших у кого-либо затруднений
  • Любое другое общение, которое поможет делать много полезных сайтов и приложений, использующих API Яндекс.Денег и сделать это API лучше, краше и функциональней.

Помните, клуб создан только для обсуждения API Яндекс.Денег, его достоинств и недостатков, а также методов решения тех или иных задач, с ним связанных.

В клубе запрещено.
1. Писать сообщения, противоречащие законодательству РФ (без комментариев).
2. Материться (клубы открыты, и все записи видны детям и бабушкам).
3. Размещать записи, не соответствующие теме клуба (это лучше делать в своем блоге).
4. Размещать рефссылки и платные ссылки (пробуйте зарабатывать по-другому и/или в других местах).
5. Оставлять рекламные посты и комментарии.
6. Обсуждать действия модераторов.

В случае нарушения правил ваши записи могут быть удалены, а вы сами – исключены из клуба.
записи по месяцам · меткам · типам

выделить все / снять выделение

Показать
andywolk написал
изменено вчера, в 01:47
userpic
Доверить приложению заполнить форму HTTP-уведомлений

Сейчас пользователь сам идет в настройки счета и указывает адрес для уведомлений.

Нельзя ли доверить это приложению?

 

Разработать механизм такой авторизации (без последующей работы с токенами), при которой приложение подает заявку только на изменение параметров HTTP-уведомлений.

 

В запросе при таком способе авторизации приложение укажет адрес для уведомлений,

откроется браузер, пользователь разрешит выполнить действие,

а в ответ на адрес redirect_uri приложение получит:

 - номер счета пользователя

 - секретный ключ

 - новый адрес для HTTP - уведомлений

плюс одно тестовое сообщение на указанный в форме адрес.

.
spin написал
вчера, 11:03
userpic
Отладка приложений.

Здравствуйте.

Не поделится ли кто опытом в плане отладки приложений? Где-то что-то видел о демо-банке, но не могу найти.

Спасибо. 

.
hasoid написал
изменено 18 мая, в 17:04
userpic
Доработка документации Яндекс.Деньги

Изучаю мерчант ЯД.

Впринципе все понятно, но есть одно но.

После проведения платежа ЯД посылает уведомление на скрипт обработки платежа.

Туда приходят следующие параметры, согласно документации:

notification_type&operation_id&amount&currency&datetime&sender&codepro&notification_secret&label

Каждый из этих параметров не сможет передать пользовательские данные, кроме параметра label.

Я не нашел как задать этот параметр в форме. Все это принуждает делать лишний вызов процедуры  operation-details, что создает паразитную нагрузку.

Пример моей формы, для приема платежей: 

<form method="POST" action="https://money.yandex.ru/quickpay/confirm.xml">
   <input name="receiver" type="hidden" value="XXXXXXXXXXXXX">
   <input name="FormComment" type="hidden" value="Payment balans">
   <input name="short-dest" type="hidden" value="Payment $slovo $orderid">
   <input name="label" type="hidden" value="$orderid">
   <input name="writable-targets" type="hidden" value="false">
   <input name="writable-sum" type="hidden" value="false">
   <input name="comment-needed" type="hidden" value="false">
   <input name="quickpay-form" type="hidden" value="shop">
   <input type="hidden" name="targets" value="Payment balans\">
   <input data-type="number" type="hidden" name="sum" value="1">
   <input type="submit" name="submit-button" value=\"Внести 1 руб\" class=login_input>
</form>

Я хотел бы передать из формы платежа параметр label, равный номеру платежа внутри магазина.

Просьба помочь кто знает.

Таким образом имеет место отсутствие какой либо документации входных параметров для создания платежной формы. Это для платежной системы большой минус.

Что предлагается - автосгенерировання форма, но она не очень годна во многих случаях.

Просьба доработать сервис уведомлений и передавать хотя бы один пользовательский параметр.

 

.
iustat написало
18 мая, 08:00
userpic
Проблема с тестированием уведомления

Здравствуйте уважаемые! 

 

Хотел спросить Вашего совета.

 

Попатылся проинтегрировать систему Я.Денег, зашел в HTTP уведомления, завел адрес страницы для уведомлений, жму Протестировать, а мне вываливается ошибка: Невозможно отправить уведомление из-за проблем с вашим сервером: HTTP 302 Found.  

В тоже время когда я запрашиваю страницу по этому адресу с фаерфокса, то она нормально отображается. Firebug показывает статус 200.


Я попробовал поменять адрес страницы для получения уведомлений на не существующую... Ошибка та же... Такое ощущение что он даже не пытается отправить запрос.


Буду признателен, если ткнете меня носом где я не прав.

.
subzero866 написал
17 мая, 16:30
userpic
HTTP уведомления

Как через HTTP уведомления получить дополнительные поля, которые пользователь заполняет на моём сайте, или хотябы как получить назначение платежа?

.
Jonny написал
изменено 16 мая, в 11:32
userpic
Использование API Яндекс.Денег на ASP.NET


Что же нам будет нужно? А нужно будет следующее:

  1. Свой сервис (надо же что-то монетизировать! впрочем, если народ готов вам платить и без сервиса - то сервис не нужен)
  2. Немного фантазии
  3. и немного умения писать на C#

Будем предполагать, что все вышеперечисленное уже под рукой, и можно приступать к разработке!

Ниже будут даны фрагменты кода. В них сознательно приведена только та часть, которая позволит сервису работать, но опущена обработка ошибок и прочие вещи, которые для продакшен-проекта обязательны. Оставим их добавление на совести разработчика.

( подробнее )

Итак, для реализации работы с Яндекс.Деньгами через API


 

1. Создаем набор функций, необходимых для выполнения базовых действий по работе с API



Для обращений к серверу Яндекс.Денег хватит стандартных средств C#, для разбора JSON - можно использовать любимую библиотеку (в примере - используется библиотека от Newtonsoft).

Для начала, создаем класс, в котором будут, как минимум хранится настройки:


public class YamoneyNet
{

    ///  Задаем константы для работы с API
    public static string ClientId = "";
    public static string SecretId = "";
    public static string RedirectUri = "http://localhost/Redirect.aspx";
    public static string Scope = "account-info";


    private string _accessToken;
    public string AccessToken
    {
        get
        {
            return _accessToken;
        }
        set
        {
            _accessToken = value;
        }
    }
}



А как максимум - могут хоть все три следующих метода (для простоты тут будем предполагать, что так и есть). А потребуется нам следующее:

 

1.1. Умение конструировать URL, на который надо отправить пользователя, чтобы он подтвердил выдачу разрешения:

 

public static string  GetTokenRequestURL()
{
    return "https://sp-money.yandex.ru/oauth/authorize?client_id=" + ClientId +
                                             "&redirect_uri=" + RedirectUri + "&response_type=code&scope=" + Scope;

}

 

1.2. Получение постоянного токена по временному

public string GetAccessTokenFromTemporaryToken(string temporaryToken)
{
   
    System.Net.WebRequest reqPost = System.Net.WebRequest.Create("https://sp-money.yandex.ru/oauth/token");
    reqPost.Method = "POST"; // Устанавливаем метод передачи данных в POST
    reqPost.Timeout = 120000; // Устанавливаем таймаут соединения
    reqPost.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";

    System.Net.ServicePointManager.Expect100Continue = false;
    // Формируем параметры запроса
    string data = "code=" + temporaryToken + "&client_id=" + ClientId + "&client_secret=" +
                                                       SecretId + "&grant_type=authorization_code&redirect_uri="
                                                       + System.Web.HttpUtility.UrlEncode(RedirectUri, Encoding.UTF8);

    byte[] sentData = Encoding.UTF8.GetBytes(data) ;
    reqPost.ContentLength = sentData.Length;
    Stream sendStream = reqPost.GetRequestStream() ;

    // Выполняем запрос
    sendStream.Write(sentData, 0, sentData.Length) ;
    sendStream.Close() ;

    // Получаем результат
    System.Net.WebResponse result = reqPost.GetResponse() ;

    string resultString = "";

    using (StreamReader reader = new StreamReader(result.GetResponseStream()))
    {
        resultString = reader.ReadToEnd() ;
    }
   
    // Пытаемся разобрать
    JObject o = JObject.Parse(resultString);
    // и сохранить токен
    _accessToken = (string)o.SelectToken("access_token");

    // Если есть ошибка - возвращаем ее
    return (string)o.SelectToken("error") ;

}



Ну и - надо же что-то уметь делать осмысленное, верно? Например,

1.3. Узнавать баланс пользователя



public string GetAccountInfo()
{
    string resultText = "";
 
    try
    {
       
        System.Net.WebRequest request = System.Net.WebRequest.Create("https://money.yandex.ru/api/account-info");
        request.Method = "POST"; // Устанавливаем метод передачи данных в POST
        request.Timeout = 120000; // Устанавливаем таймаут соединения
        request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
        request.Headers.Add("Authorization", "Bearer " + _accessToken);
        request.ContentLength = 0;
        System.Net.WebResponse result = request.GetResponse() ;
      

        using (StreamReader reader = new StreamReader(result.GetResponseStream()))
        {
            resultText = reader.ReadToEnd() ;
        }
    }
    catch (System.Net.WebException ex)
    {
        resultText = "Ошибка: " + ex.Message;

    }
    return resultText;
}



На этом подготовительные действия заканчиваются, и пора создать что-то видимое пользователю. Например, очень подходит на эту роль

2. Страница приземления


В сущности, основное, что там нужно сделать - это в зависимости от результата выдачи пользователем разрешения отправить его на сайт, либо сообщить, что не что-то не ок и отправить туда же (или куда-то еще, где он сможет с проблемой разобраться).

Самое место этому процессу - в Page_Load (при этом, в данном пример на странице есть лейбл для отображения ошибок, буде таковые появятся - errorText).

protected void Page_Load(object sender, EventArgs e)
{
    // Узнаем, чем закончился процесс выдачи токена
    string code = Page.Request["code"];

    string error = Page.Request["error"];

    string errorDescr = Page.Request["error_description"];

    if ((code == null) && (error == null))
    {
        // Что-то пошло не так
        errorText.Text = "Ошибка: отсутствуют параметры code или error";
        return;
    }

    if (error!=null)
    {
        // Раз есть описание ошибки - значит, все равно что-то пошло не так
        errorText.Text = "Ошибка: " + error + "описание" + errorDescr;
        return;
    }

    YamoneyNet yaNet =  new YamoneyNet() ;
    // А если все так - получаем токен из временного ключа
    String getTokenResult = yaNet.GetAccessTokenFromTemporaryToken(code);

   
    if (yaNet.AccessToken != "")
    {
        // Все ок - сохраняем токен (например, как тут, в сессию) и возвращаемся на сайт
        Session["token"] = yaNet.AccessToken;
        Response.Redirect("default.aspx");
    }
    else
    {
        // Получить токен по временному ключу не удалось
        errorText.Text = getTokenResult;
    }
}

 

3. Ну и - сводим все это дело воедино на default.aspx

 

3.1 Если у пользователя нет токена

Отправляем его получать.

YamoneyNet ya = new YamoneyNet() ;

string url = ya.GetRequestForCreateToken() ;
Response.Redirect(url);

       

3.2 А если есть - то добавляем, например, textBox на форму и выводим текст запроса информации о счете

YamoneyNet ya = new YamoneyNet() ;
string tokenId = (string)Session["token"];
ya.Token.SetToken(tokenId) ;

TextBox1.Text= ya.GetAccountInfo() ;


Собственно, дальше как раз и потребуется немного фантазии, чтобы придумать даже не то, как можно это дело использовать, а как ЕЩЕ можно это дело использовать.

 


.
subzero866 написал
16 мая, 10:12
userpic
Юр. обоснование для подключение API

Добрый день.

Я будучи гражданином Украины, могу ли подлючить себе API? Я физ. лицо. И если да, то какие способы вывода денег останутся (в сравнеии с обычным идентифицированным кошельком).

.
Лесников Андрей написал
15 мая, 09:20
userpic
Возврат в магазин после оплаты кнопкой

Поставили кнопку для оплаты. Все хорошо, извещение по http приходит, НО! После оплаты человек остается на сайте Я.Д. Причем не только не происходит переадресации, даже ссылку на магазин не выводит. Как можно это преодолеть?

.
www.spasibo.kz написало
14 мая, 13:33
userpic
Возможна ли ситуация когда получен payment_id но пришел пустой request_id?

Возможна ли ситуация когда получен payment_id но пришел пустой request_id? В итоге, по факту платеж не зачисляется получателю.

Ведь если не получен request_id то и  payment_id не придет?

.
se-nn написал
12 мая, 07:53
userpic
Про shopping-cart

Здравствуйте!

Ух, токен для "shopping-cart" получил.

Напишите, плиз, пример запроса на php, чтобы операцию завершить! 

 

.

 

Что получается:    изменить 
Подписаться на комментарии к записи

Получать уведомления о всех ответах в этом обсуждении.

 
Отписаться от комментарев к записи

Получать уведомления только о тех ответах в этом обсуждении, которые адресованы лично вам.

 
К сожалению, комментарий не удалось отправить. Попробуйте ещё раз.я в курсе