Биллинг в крохотном проекте. 10 строк HTML кода

    Только что прочитал про биллинги в больших проектах и хочу поделиться опытом биллинга для крохотных проектов.

    Основа — PayPal. Он довольно широко распространён + если нет у клиента учетной записи в PayPal, то можно обычной кредиткой оплатить. Поиск по хабру выявил уже один мануал, но он реально страшен. Мы пойдем простым путем!

    Использовать будем HTTP интеграцию. По этому линку можно получить полную документацию:

    Вот такой нехитрый HTML код позволяет нам получать деньги на свой PayPal:

    <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="ваш PayPAL email">
    <input type="hidden" name="amount" value="0.99">
    <input type="hidden" name="handling" value="0.20">
    <input type="hidden" name="currency_code" value="EUR">
    <input type="hidden" name="notify_url" value="http://ваш скрипт, который зарегистрирует покупку ?client=XXX">
    <input type="hidden" name="item_name" value="название продукта">
    <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" alt="PayPal - The safer, easier way to pay online!">
    </form>
    


    Разберем его по строчкам

    - PayPal'овский обработчик платежа

    - говорит, что это платёж с PayPal кнопки "купить"

    - ваш email/login в PayPal. На этот счёт будут приходить деньги

    - цена продукта/услуги

    - сколько денег, хотите за обработку заказа. это поле необязательно

    - в какой валюте желаете получать

    - вот тут мы указываем url скрипта, который будет вызван PayPal если покупка была успешной. Имеет смысл в это url вставить get параметры, которые идентифицирует пользователя и продукт, который он купил. В моём случае (цифровой продукт) , этом скрипте я проверяю, что запрос пришел с PayPal и сразу активирую премиум фичи на сервере для купившего клиента. Можно обойтись и без этого поля, и просто проверять почту от PayPal о полученных переводах.

    - название того, что продаем

    - картинка для кнопки. их есть множество

    Вот так мы можем легко настроить получение денег на своем вебсайте или мобильном аппе (через webview)

    Надеюсь кому-то пригодится. Если есть вопросы - отвечу в комментариях.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 22

      +2
      А подтверждения по IPN разве не надо чтобы транзакцию закончить/подтвердить???
        0
        ничего не надо. код рабочий
          +2
          да, код рабочий. Но если пользователь посмотрит в код страницы и откроет в браузере «http:// ваш скрипт, который зарегистрирует покупку ?client=XXX», то получит покупку бесплатно. Если вы думаете что пользователь не имеет доступа к коду страницы, то он легко сможет воспользоваться любым дебаг прокси и достичь такого же результата. Для того что бы достичь хоть как-то надежного результата, нужно проверять правда ли произошла покупка.
            +2
            Для _крохотных_ проетов покупки можно и руками аппрувить/рассылать
              0
              А что, правда там все так просто? Мне кажется логичным было бы передавать в notify_url некий хеш, который посчитан от переданных параметров + соль (ну например). Которая известна скрипту проверки, отображается в каком-нибудь личном кабинете в пейпале, но неизвестна покупателю.
            0
            Кстати, а можно HTTPS указать в notify_url? Вроде как это не указано:
            notify_url
            The URL to which PayPal posts information about the transaction.

            Если да, то надо как–то проверить подлинность PayPal сертификата при запросе скрипта (может кто знает как это всё делается?), и если всё ок, то сразу обрабатывать платёж как достоверный.
              0
              вопрос отменяется – решение от PayPal указали в ветке выше.
          +5
          Думаю, не будет лишним заметить, что в скрипте notify_url надо обязательно проверить, что платеж ушел по адресу, указанному в business и именно за тот самый продукт по правильной цене.
            –6
            Возможно это все-таки разметка, а не код.
              +3
              Возможно у вас будет шок, но это КОД РАЗМЕТКИ
              +10
              Это всего лишь форма приема платежа. Биллингом в данном случае можно было бы назвать скрипт в notify_url (IPN), именно в нем должна быть логика продления действия подписки, включение какой-то фичи и т.д.
                0
                Если мне не изменяет память, то этот код генерируется средствами пейпал когда мы хотим создать кнопку для оплаты (типа «Buy via PayPal»). Там идёт форма в несколько шагов, а в самом конце — код кнопки, которую нужно вставить на страницу сайта.
                  0
                  He cовсем. Там сгенерится что-то типа вот такого:
                  <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
                  <input type="hidden" name="cmd" value="_s-xclick">
                  <input type="hidden" name="hosted_button_id" value="96NRURPEFY73E">
                  <input type="image" src="https://www.paypalobjects.com/en_US/NL/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
                  <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
                  </form>
                  


                  вся логика будет в
                  <input type="hidden" name="hosted_button_id" value="96NRURPEFY73E">
                  


                  Фиг изменишь run-time

                  в моем же примере — всё открыто. Поля можно динамически менять (хоть на сервере, хоть на клиенте javasctipt'ом). В этом прелесть и красота :) Малой кровью довольно гибкое решение

                  +1
                  Где тут биллинг? Это просто форма отсылки на стороннюю платёжку, аналогичная которой используется примерно в 100500 остальных похожих системах.
                    +3
                    Было бы здорово еще такой же короткий код для notify_url. В нем проверять откуда пришел запрос и отсеивать максимальное кол-во способов обхода.
                    Конечно, в целом понятно как это сделать, но хорошо бы дополнить красивое решение до рабочего варианта, а не останавливаться «по середине»…

                    В любом случае спасибо)
                      0
                      <input type="hidden" name="business" value="ваш PayPAL email">
                      

                      Слово business намекает, что простой персональный аккаунт тут использовать нельзя?
                        0
                        нет. работает сразу. даже с ограниченным акком
                          0
                          Что технически работает — я не сомневаюсь. Но интересно как с т.з. правил?
                        +1
                        биллинг все же не просто прием платежей… то что в вашем «notify_url» можно было бы назвать биллингом, а то, что в статье — увы, но никак.
                          0
                          ;)
                          Cпасибо за коммент. Таких я получил уже несколько. И все они мне напомнили старый анекдот:
                          «Американский форум- задал вопрос, тебе на него обстоятельно и вежливо ответят.
                          Еврейский форум- задал вопрос, тебе зададут встречный вопрос.
                          Русский форум-задал вопрос, тебе ещё 2 часа будут объяснять какой ты мудак!»

                          Я потратил 10 мин и описал свой опыт, который наверняка пригодится хотя бы нескольким людям (какому-то проценту от тех кто занес в избранное). Статья написана для новичков в этой области. Для тех кто погуглил немного и нашёл решение или сложные или дорогие. А тут и просто и дешево. И есть потенциал для развития.

                          поэтому несовсем понятно по каким причинам люди минусуют статью :) Чтобы другие новички не увидели? :)
                            +3
                            Думаю потому, что вы вводите в заблуждение новичков. Или заголовок желтый или вы, действительно, не понимаете отличия биллинга от простого приема платежей.

                            Если статью дополнить примерами, что делать после того как пришло уведомление о платеже, то это уже хотя бы как-то было похоже на биллинг.

                        Only users with full accounts can post comments. Log in, please.