Однократно выставляемые счета нужны для получения средств от пользователя приложения через систему InSales. Это позволяет владельцу приложения взаимодействовать только с одним контрагентом. InSales в свою очередь за это берет комиссию, которая согласуется и устанавливается при публикации приложения.
Перед установкой приложения пользователь может увидеть стоимость. Пользователь соглашается, приложение выставляет счет и перенаправляет на страницу оплаты. На странице оплаты пользователь видит, что приложение выставило ему счет за его установку. Ему предлагается оплатить или отклонить выставленный счет. После того, как пользователь выполнить одно из этих действий, InSales уведомляет приложение, отправляя запрос на URL, указанный при выставлении счета. Приложение после получения уведомления проверяет состояние счета, оплачен он или отклонен, и в зависимости от этого дает доступ к функционалу.
Уведомление на данный момент шлется только один раз, не зависимо от ответа приложения или каких либо других ошибок. Поэтому рекомендуется раз в день поверять состояние выставленных счетов, от которых не поступило уведомлений.
Описание полей:
name - назначение платежа;
price - сумма счета;
return-url - URL по которому будут уведомлять об оплате;
confirmation-url - URL страницы оплаты / отклонения счета (генерируется автоматически при создании);
test - флаг для отладки, если установлен, то для подтверждения платежа не надо его оплачивать. По умолчанию не установлен.
status - статус счета.
Возможные значения:
pending - пользователь еще ничего сделал;
accepted - оплатил счет;
declined - отклонил счет.
1. Создание счета:
POST /admin/application\_charges.xml
<?xml version="1.0" encoding="UTF-8"?>
<application-charge>
<name>Купи слона</name>
<price type="decimal">180.0</price>
<return-url>http://applicaiton.my/check_payment_url/%id_in_my_application%</return-url>
</application-charge>
2. Получение ответа:
<?xml version="1.0" encoding="UTF-8"?>
<application-charge>
<id type="integer">2</id>
<name>Купи слона</name>
<price type="decimal">180.0</price>
<return-url>http://applicaiton.my/check_payment_url/%id_in_my_application%</return-url>
<status>pending</status>
<test type="boolean">false</test>
<confirmation-url>http://some-shop.myinsales.ru/admin/invoices/6539</confirmation-url>
<created-at type="datetime">2013-12-02T22:34:59+04:00</created-at>
<updated-at type="datetime">2013-12-02T22:34:59+04:00</updated-at>
</application-charge>
3. Далее необходимо запомнить соответствие между id_in_my_application и id (2 в данном случае).
4. Перенаправление клиента на confirmation-url, в данном случае: http://some-shop.myinsales.ru/admin/invoices/6539.
5. Получение уведомления на http://applicaiton.my/check_payment_url/id_in_my_application
По id_in_my_application нужно определить id и проверить статус application_charge.
6. Запрос:
GET /admin/application\_charges/2.xml
Получение ответа:
<application-charge>
<id type="integer">2</id>
<name>Купи слона</name>
<price type="decimal">180.0</price>
<return-url>http://applicaiton.my/check_payment_url/%id_in_my_application%</return-url>
<status>accepted</status>
<test type="boolean">false</test>
<confirmation-url>http://some-shop.myinsales.ru/admin/invoices/6539</confirmation-url>
<created-at type="datetime">2013-12-02T22:34:59+04:00</created-at>
<updated-at type="datetime">2013-12-02T22:40:59+04:00</updated-at>
</application-charge>
Создается счет отправкой POST-запроса по адресу:
/admin/application_charges.xml
Пример запроса:
<?xml version="1.0" encoding="UTF-8"?>
<application-charge>
<name>Sms 200</name>
<price type="decimal">180.0</price>
<return-url>http://host/url</return-url>
</application-charge>
Пример ответа:
<?xml version="1.0" encoding="UTF-8"?>
<application-charge>
<id type="integer">1</id>
<name>Sms 200</name>
<price type="decimal">180.0</price>
<status>pending</status>
<return-url>http://host/url</return-url>
<confirmation-url>http://host.myinsales.ru/admin/invoices/6539</confirmation-url>
<test type="boolean">false</test>
<created-at type="datetime">2013-07-18T22:34:59+04:00</created-at>
<updated-at type="datetime">2013-07-18T22:34:59+04:00</updated-at>
</application-charge>
GET запрос по адресу:
/admin/application_charges/%id%.xml
Пример ответа:
<?xml version="1.0" encoding="UTF-8"?>
<application-charge>
<created-at type="datetime">2013-07-18T22:34:59+04:00</created-at>
<id type="integer">1</id>
<name>Sms 200</name>
<price type="decimal">180.0</price>
<return-url>http://host/url</return-url>
<status>pending</status>
<test type="boolean">false</test>
<updated-at type="datetime">2013-07-18T22:34:59+04:00</updated-at>
<confirmation-url>http://host.myinsales.ru/admin/invoices/2</confirmation-url>
</application-charge>
Для отклонения счёта нужно отправить POST-запрос по адресу:
/admin/application_charges/%id%/decline.xml.
В ответ возвращается информация о состоянии счета. Отклонить можно только еще не оплаченный счет.
Отправив GET-запрос по адресу:
/admin/application_charges.xml
можно получить информацию о счетах, выставленных приложением. Поддерживаемые форматы: xml, json.
Пример xml документа:
<?xml version="1.0" encoding="UTF-8"?>
<application-charges type="array">
<application-charge>
<created-at type="datetime">2013-07-18T22:34:59+04:00</created-at>
<id type="integer">1</id>
<name>Sms 200</name>
<price type="decimal">180.0</price>
<return-url>http://host/url</return-url>
<status>pending</status>
<test type="boolean">false</test>
<updated-at type="datetime">2013-07-18T22:34:59+04:00</updated-at>
<confirmation-url>http://host.myinsales.ru/admin/invoices/2</confirmation-url>
</application-charge>
<application-charge>
<created-at type="datetime">2013-05-23T18:46:51+04:00</created-at>
<id type="integer">3</id>
<name>Sms 200</name>
<price type="decimal">180.0</price>
<return-url>http://host/url</return-url>
<status>accepted</status>
<test type="boolean">false</test>
<updated-at type="datetime">2013-05-27T11:27:37+04:00</updated-at>
<confirmation-url>http://host.myinsales.ru/admin/invoices/4</confirmation-url>
</application-charge>
</application-charges>