Прием средств Webmoney на сайте

Прием средств Webmoney на сайте

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

В данном видео мы будем говорить о наиболее популярном методе приема Webmoney – через сервис Merchant WebMoney Transfer. Данный сервис очень удобен и с его помощью можно быстро и легко внедрить необходимые элементы на свой сайт, чтобы начать принимать средства WebMoney за Ваши товары или услуги.

План урока

    1. Основные требования для приема средств webmoney.

    2. Настройка торгового кошелька.

    3. Формирование платежа.

    4. Форма предварительного запроса.

    5. Форма оповещения о платеже.

    6. Форма выполненного платежа.

    7. Форма не выполненного платежа.

Детали учебника

Тема: PHP

Сложность: Средняя

Урок: Видео (.mp4)

Время: 00:56:57

Размер архива: 139 Mb

скачать исходникискачать урок

1. Основные требования для приема средств webmoney

Вначале давайте определимся, что нужно для приема средств WebMoney:

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

Ваш WMID, для использования в системе Merchant WebMoney Transfer должен иметь аттестат продавца. Данный аттестат можно получить, выполнив все требования сервиса Webmoney. Более подробно, о том, что такое аттестат и как его получить – смотрите по ссылке: //passport.webmoney.ru/asp/WMCertify.asp. Конечно аттестат продавца можно и не получать, достаточно иметь начальный или персональный аттестат, но при этом будут наложены большие ограничения, на выполнение различных операций, опять же о лимитах более подробно смотрите по ссылке.

2. Настройка торгового кошелька

Теперь, когда Вы выполнили два предыдущих условия, давайте перейдем на сайт сервиса Merchant WebMoney Transfer – по ссылке.

Далее авторизируемся, для этого переходите по ссылке Login:

Мне удобней регистрироваться, используя программу Webmoney Keeper, а Вы поступайте так, как Вам удобней. После регистрации Вас перенаправляют на страницу обзора Ваших кошельков и напротив каждого кошелька есть ссылка настроить (change).

Данная ссылка ведет на страницу изменения настроек кошелька, которые необходимы для приема средств. Поэтому напротив того кошелька, на который Вы планируете принимать средства Webmoney, переходите по ссылке настроить (change).

Теперь подробнее по текстовым полям:

Торговое имя – данное торговое имя плательщик будет видеть на странице Merchant WebMoney Transfer перед оплатой, то есть это обычное информационное поле.

Secret Key – произвольная строка из 15 – 20 символов, для обеспечения безопасности платежа. Данную строку будете знать только Вы, и сервис Merchant WebMoney Transfer. Так же данная строка будет использоваться для проверки подлинности платежа, но об этом далее.

Result URL – адрес страницы (на веб-сайте продавца), на которую сервис Merchant WebMoney Transfer посылает HTTP POST оповещение о совершении платежа с его детальными реквизитами. Данная страница будет использоваться для всевозможных проверок правильности платежа. Адрес данной страницы, никто кроме Вас знать не должен и пользователи при оплате, переходить на нее так же не будут. Она как промежуточная – и ее задача проверить подлинность платежа. Также ставим галочку напротив строки — Передавать параметры в предварительном запросе.

Success URL — адрес страницы (на веб-сайте продавца), на которую будет переведен интернет-браузер покупателя в случае успешного выполнения платежа.

Fail URL — адрес страницы (на веб-сайте продавца), на которую, будет переведен интернет-браузер покупателя в том случае, если платеж не был выполнен по каким-то причинам.

Напротив Success URL и Fail URL выбираем в качестве метода передачи данных – метод POST.

Позволять использовать URL, передаваемые в форме — данная опция нам не нужна, поэтому галочку ставить не нужно.

Высылать оповещение об ошибке платежа на кипер – если включить данную опцию, то сервис Merchant WebMoney Transfer будет отправлять по внутренней WM-почте сообщение в случае возникновения ошибки при совершении платежа пользователем. Данная опция будет полезной, поэтому галочку активируем.

Метод формирования контрольной подписи – лучше выбрать MD5. Данная возможность нам потребуется при проверке подлинности платежа. Но об этом далее по ходу урока.

Тестовый/Рабочий режимы – если выбрать тестовый режим, прием средств будет работать в тестовом режиме, при котором, деньги с кошелька плательщика списываться не будут. Поэтому данный режим используйте только на этапе тестирования. А затем активируйте рабочий режим.

Прием чеков Paymer.com (ВМ-карт) или WM notes – по Вашему усмотрению.

Прием платежей через терминалы, банкоматы, кассы магазинов — по Вашему усмотрению.

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

3. Формирование платежа.

Для начала формирования платежа сервис Merchant WebMoney Transfer должен получить определенный набор параметров. К примеру, сумму платежа, кому переводить деньги и т.д.

То есть перед тем как отправлять данные в сервис Merchant WebMoney Transfer (перед тем как пользователь нажмет кнопку оплатить заказ), Вы должны получить и подсчитать все, что нужно для оплаты заказа – общую стоимость заказа, наименования товаров, информацию о пользователе, который оплачивает заказ. В принципе – это уже Вам решать, какие данные нужны для правильного оформления заказа.

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

Главное на этой странице это форма запроса платежа – то есть обычная форма с определенным набором скрытых полей (поля которые нужны для проведения платежа), имена которых задает сам сервис Merchant WebMoney Transfer и менять их нельзя. Конечно, Вы можете добавить дополнительные свои поля, в которых будете передавать, данные которые нужны Вам для работы, но эти поля, ни как не будут учитываться самим сервисом (имена этих полей не должны иметь префикс LMI_).

Атрибут action=//merchant.webmoney.ru/lmi/payment.asp формы – должен иметь только такое значение, то есть он содержит путь к обработчику данной формы (сервис Merchant WebMoney Transfer). Так же, при отправки формы можно заранее определить способ (вариант) оплаты, к примеру, если в атрибуте action, указать вот такое значение — //merchant.webmoney.ru/lmi/payment.asp?at=authtype_8, то это означает, что оплату необходимо произвести с кошелька Webmoney. Все доступные способы позиционирования оплаты можно посмотреть в официальной документации сервиса.

Теперь давайте рассмотрим, какие скрытые поля необходимо отправлять для платежа. Сразу хочу сказать, что все поля мы с Вами рассматривать не будем, так как их очень много, мы рассмотрим только основные:

LMI_PAYMENT_AMOUNT — Сумма платежа, которую мы должны получить от покупателя, дробная часть отделяется точкой.

LMI_PAYEE_PURSE – Кошелек на который поступят средства. Формат — буква и 12 цифр.

LMI_PAYMENT_DESC – Описание товара (максимальная длина 255 символов). Текст должен быть кодирован в кодировке cp-1251.

Это были обязательные поля. Без них невозможно выполнить платеж.

Единственное замечание по полю LMI_PAYMENT_DESC. Если Вы планируете в описании платежа использовать символы, кодированные кодировкой UTF – 8, необходимо вместо этого поля использовать поле — LMI_PAYMENT_DESC_BASE64.

Теперь несколько необязательных полей:

LMI_PAYMENT_NO — номер покупки — данное поле нужно использовать в соответствии с тем, как Вы нумеруете товары или заказы. При формировании номера – лучше использовать уникальные значения (к примеру, идентификатор товара или заказа). Данный номер, так же поможет получить быструю информацию о платеже в системе Merchant WebMoney Transfer.

LMI_SIM_MODE – режим тестирования. Может принимать одно из следующих значений: 0 или отсутствует: для тестовых платежей сервис будет имитировать успешное выполнение; 1: сервис будет имитировать выполнение с ошибкой (платеж не выполнен); 2: Около 80% запросов на платеж будут выполнены успешно, а 20% — не выполнены.

FIELD_1, FIELD_2, FIELD_3 – поля, которые Вы можете добавить по своему усмотрению. К примеру, данные о покупателе и т.д.

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

4. Форма предварительного запроса.

После того, как пользователь отправит данную форму, то есть нажмет кнопку оплатить – он будет перенаправлен на сервис Merchant WebMoney Transfer, и одновременно с ним, в данный сервис попадут данные формы (методом POST).

Сервис предложит несколько способов оплаты, к примеру, если выбрать вкладку WebMoney Keeper и нажать далее, будет открыта программа WebMoney Keeper и ее специальное окошко, в которое нужно ввести графическую капчу, которую предоставляет сервис Merchant WebMoney Transfer. После ввода покупатель увидит вот такую страничку:

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

Но согласитесь, что данные, которые передаются через форму – очень легко подделать и передать, к примеру, совсем другую сумму оплаты за товар. Как такого избежать?

Для этого и необходимо будет выполнить определенные проверки. Смотрите, когда пользователь подтвердит платеж, то перед тем как снять деньги с его кошелька, сервис Merchant WebMoney Transfer отправляет пользователю специальную форму предварительного запроса. Данная форма передает нам (продавцам) параметры платежа, который будет выполнен. И если при настройке, кошелька принимающего средства, Вы поставили галочку напротив пункта — Передавать параметры в предварительном запросе, то страничка RESULT URL, должна обязательно вернуть строку «YES», иначе платеж не будет выполнен. Другими словами, получив данные, мы можем проверить их по своему усмотрению и если все верно — вернуть строку «YES», только тогда платеж будет выполнен.

Вот пример формы предварительного запроса.

Обратите внимание в атрибуте action, прописан путь к странице Result URL – тот, что Вы указывали при настройках кошелька, принимающего средства.

Теперь подробно о полях:

LMI_PREREQUEST — Индикатор предварительного запроса. То есть если пришло данное поле со значение 1, то значит, отправлен предварительный запрос, о начале выполнения платежа.

LMI_PAYMENT_AMOUNT – сумма, которую оплачивает покупатель товара. Данное значение должно полностью совпадать с тем, что мы отправляли в форме запроса платежа.

LMI_PAYMENT_NO – номер платежа, опять же данное поле должно совпадать с тем, что мы отправляли в форме запроса платежа, так как это оно и есть.

LMI_PAYEE_PURSE – кошелек, на который будут перечислены средства, опять же данное поле должно совпадать с тем, что мы отправляли в форме запроса платежа, так как это оно и есть.

LMI_MODE – режим работы платежа, если его значение равно 1 – то платеж выполняется в тестовом режиме. Если же 0 – то платеж выполняется в реальном режиме.

LMI_PAYER_WM – WMID покупателя, который выполняет платеж.

LMI_PAYER_PURSE – кошелек, с которого выполняется платеж.

Это основные поля, которые сервис присылает с запросом. Но, если Вы в форме запроса платежа, указывали еще дополнительные поля, все они будут дублироваться здесь. Так что данные по этим полям Вы обязательно получите.

А теперь смотрите, мы вначале отправляли сервису Merchant WebMoney Transfer некоторый набор полей, среди которых, были номер платежа (идентификатор товара), сумма к оплате, кошелек, получающий средства, а также различные дополнительные поля (если конечно Вы их передавали). Теперь мы эти данные получили обратно и необходимо обязательно проверить, совпадают ли они с данными, что мы отправили в начале. Тем самым мы защитим платеж от подмены, к примеру — цены, либо кошелька и т.д.

Как выполнить данную проверку? Для этого нужно создать в базе данных табличку, в которой будет храниться информация о заказах, то есть идентификатор заказа, сумма к оплате, описание, наименование товаров, данные о пользователе, который заказал товар и т.д.

Далее, перед отправкой формы формирования платежа, то есть перед передачей данных платежа сервису Merchant WebMoney Transfer, Вы в данную таблицу записываете данные о текущем заказе, в соответствии с теми полями, что Вам нужны, но обязательными являются цена и номер платежа (тот который передается полю LMI_PAYMENT_NO). То есть Вы сохраняете в базе данных те данные, которые передаете сервису Merchant WebMoney Transfer, через форму формирования платежа.

Когда Вы получите данные обратно, из формы предварительного запроса, то Вам останется только сравнить полученные данные с данными сохраненными в базе данных.

Да, и Важное замечание: не забывайте проверять номер кошелька, на который будут переведены средства. Вот небольшой пример, страницы RESULT URL:

Обратите внимание в переменной $wm_purce – содержится номер кошелька, на который будут перечислены средства. Теперь условимся, что через поле LMI_PAYMENT_NO, мы будем передавать идентификатор текущего заказа, а также что данный заказ сохранен в таблице заказов orders. У которой, поле id – идентификатор заказа, price – цена текущего заказа.

Когда в скрипт RESULT URL приходят данные методом POST, мы первым делом проверяем значение поля LMI_PREREQUEST. Если оно равно 1, значит, отправлена форма предварительного запроса. Дальше получаем из базы данных заказ, используя идентификатор, который содержится в поле LMI_PAYMENT_NO. Далее, если такой заказ найден — сравниваем цену данного заказа, с ценой, которая содержится в поле LMI_PAYMENT_AMOUNT, затем сравниваем кошек, на который будут перечислены средства (переменная $wm_purce), с кошельком что содержится в поле LMI_PAYEE_PURSE. И для надежности также сравниваем идентификатор заказа, с полем LMI_PAYMENT_NO. Если поля совпали – выводим строку YES, если же нет, то выходим из скрипта — exit().

Сервис Merchant WebMoney Transfer, обращаясь к данной странице и передавая данные методом POST, будет ждать возврат строки YES, как только он ее получит, выполнение платежа будет продолжено, если же данная строка не будет возвращена, значит, выполнение платежа будет прервано, о чем и будет сообщено пользователю в специальном сообщении.

5. Форма оповещения о платеже

После этого платеж еще будет выполнен, и сервис Merchant WebMoney Transfer отправит на страницу еще одну форму для нашего подтверждения – форму оповещения о платеже.

Как Вы видите, некоторые поля данной формы совпадают с предыдущими формами.

LMI_HASH – контрольная подпись оповещения о выполнении платежа, которая используется для проверки целостности. ОЧЕНЬ ВАЖНОЕ ПОЛЕ!!! По данному полю и необходимо выполнить последнюю проверку.

LMI_SYS_INVS_NO – номер счета в сервисе WebMoney Transfer, который выставляется покупателю от имени продавца.

LMI_SYS_TRANS_NO – номер платежа в сервисе WebMoney Transfer, другими словами идентификатор данного платежа в системе.

LMI_SYS_TRANS_DATE – дата и время платежа.

Обратите внимание – теперь к нам не приходит поле LMI_PREREQUEST. Смотрите, сейчас нам прислали итоговые данные по платежу, и среди них есть контрольная подпись платежа. Это специальная строка, зашифрованная при помощи того алгоритма, который Вы выбрали при настройке кошелька. Как Вы помните, мы выбрали шифрование md5.

Сервис Merchant WebMoney Transfer формирует данную строку при помощи склеивания следующих значений полей(в той же последовательности):

Кошелек продавца (LMI_PAYEE_PURSE);

Сумма платежа (LMI_PAYMENT_AMOUNT);

Внутренний номер платежа (LMI_PAYMENT_NO);

Флаг тестового режима (LMI_MODE);

Внутренний номер счета в системе WebMoney Transfer (LMI_SYS_INVS_NO);

Внутренний номер платежа в системе WebMoney Transfer (LMI_SYS_TRANS_NO);

Дата и время выполнения платежа (LMI_SYS_TRANS_DATE);

Secret Key (LMI_SECRET_KEY);

Кошелек покупателя (LMI_PAYER_PURSE);

WMId покупателя (LMI_PAYER_WM).

Далее система применят шифрование md5, и получает 32 значный шифр данной строки, и высылает его нам вместе с формой оповещения о платеже.

Теперь, для того что бы полностью защитить наш платеж от подмены данных – мы должны сами получить данную зашифрованную строку, и сравнить ее с той, что прислал нам сервис.

Посмотрите внимательно, практически все данные присылает нам сервис Merchant WebMoney Transfer, за исключением секретной строки LMI_SECRET_KEY. Данную строку Вы указывали при настройках Вашего кошелька. То есть другими словами, если злоумышленник, каким то образом узнает путь к странице RESUL URL, и подменит данные, то он ни как не узнает о секретной строке. Данную строчку знаем только мы и сервис Merchant WebMoney Transfer.

Поэтому теперь наши действия следующие – формируем строку из выше перечисленных данных, шифруем ее при помощи однонаправленного шифрования md5. И сравниваем с строкой, которую присылает нам сервис Merchant WebMoney Transfer, в поле LMI_SECRET_KEY.

Если значения совпадают, то данные платежа верны. Далее, Вам можно связаться с базой данных и отметить, что платеж по заказу выполнен, также можно отправить покупателю сообщение о том, что заказ оплачен.

Замете, когда сервис Merchant WebMoney Transfer присылает форму оповещения о платеже, то при этом он не ждет от Вас ответа, так как платеж уже совершен и деньги сняты с кошелька покупателя.

Ваша задача при этом — проверить правильность платежа и поставить заказу статус — оплачен, для дальнейшей отправки покупателю.

Вот упрощенный пример, как необходимо формировать строку для проверки подписи платежа (страница RESULT URL):

Обратите внимание, если мы не получили значение поля LMI_PREREQUEST – значит пришла форма оповещения о платеже и необходимо проверить подпись платежа. Поэтому получаем данные о заказе по идентификатору, который содержится в поле LMI_PAYMENT_NO. Затем, если такой заказ найден, формируем строку, шифруем ее при помощи шифрования md5 и сравниваем с полем LMI_HASH. Если значения равны, то устанавливаем статус заказа – оплачен и отправляем покупателю сообщение на почту, о том, что оплата прошла.

Еще раз хочу напомнить — обязательно проверяйте цифровую подпись платежа!!!

6. Форма выполненного платежа

После оплаты пользователь будет перенаправлен на страницу продавца, которую он указал в поле Success URL. Так же на данную страницу отправляется форма выполненного платежа с данными по выполненному платежу:

Как Вы видите это все те же поля формы, что мы с Вами принимали раньше, а также дополнительные не обязательные поля, которые мы передавали в самом начале формирования платежа.

Значения данных полей Вы можете использовать по своему усмотрению, к примеру, для вывода пользователю квитанции о совершенном платеже и т.д.

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

7. Форма невыполненного платежа

В случае не выполнения платежа, по каким либо причинам, пользователь будет перенаправлен на страницу FAIL URL, которую Вы указали при настройках кошелька. При этом деньги у покупателя сняты не будут. Так же на данную страницу передается форма невыполненного платежа:

Опять же данные, которые передаются на данную страницу через форму, Вы можете использовать по своему усмотрению.

Вот таким вот образом и происходит процесс приема средств Webmoney. Как Вы видите, ничего сложного в этом нет, однако для обеспечения безопасности необходимо учитывать некоторые моменты и постоянно проверять данные по платежу.

На этом, сегодняшний урок можно завершать. Всего Вам доброго и до новых встреч.

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии (14)