Существенным преимуществом e-gold является отсутствие аттестации участников и связанных с ними ограничений на операции. Таким образом, открыв e-gold счет, можно сразу пользоваться всеми возможностями системы по автоматизации приема платежей. e-gold предлагает два интерфейса для программистов: - e-gold Shopping Cart Interface (SCI) - дает возможность принимать платежи, в том числе и автоматически. Именно этот интерфейс используется в большинстве случаев и будет рассматриваться в этой статье.
- e-gold Automation Interface - данные методы позволяют программистам выполнять любые действия со счетом e-gold: перевод средств, просмотр баланса и истории платежей, баланса по счету...) из своих программ.
Два интерфейса аналогичны применяемым в WebMoney Merhant (для приема платежей) и WM HTTPS-interface (позволяет получать информацию о счетах и автоматически выплачивать деньги). В большинстве случаев (магазины, прием оплаты за услуги, САР системы и т.п.) наиболее актуален прием платежей. Также нужно учитывать, что использование автоматического вывода денег (Automation Interface) требует значительного снижения настроек безопасности счета и хранения пароля на сервере. Поэтому чаще всего ввод осуществляется в автоматическом режиме, а вывод в ручном. Ссылки для быстрой оплаты в e-gold В самом простом случае покупателю открывается заполненное окно платежа e-gold, с подставленными значениями суммы, валюты, получателя и т.п., а автоматическая обработка не производится. Это единственный вариант, если ваш хостинг не поддерживает серверных языков программирования (в наличии только html). Наиболеее простой метод заключается в создании специальной ссылки, содержащий все данные, вот несколько примеров: - http://1104931.e-gold.com - окно перевода без суммы на счет 1104931
- http://1104931-USD0.02.e-gold.com - перевод 2 центов e-gold
- http://1104931-USD2.e-gold.com - перевод $2 e-gold
- http://1104931-USD1.03-Silver.e-gold.com - перевод $1.03 e-silver
- http://1104931-USD5-Palladium.e-gold.com - перевод $5 e-palladium
Простая форма приема платежей e-gold Если вы нуждайтесь в большем количестве вариантов, чем метод ссылок, то в нижеприведенной HTML форме, настройте параметры, выделенные красным цветом. Пример взят с сайта e-gold. <form action="https://www.e-gold.com/sci_asp/payments.asp" method="POST" target=_top> <div align="center"> <input type="hidden" name="PAYEE_ACCOUNT" value="1104931"> <input type="hidden" name="PAYEE_NAME" value="Название организации"> Введите сумму оплаты:<br> <input type=text name="PAYMENT_AMOUNT" size=4> <input type=hidden name="PAYMENT_UNITS" value=1> USD worth of e-gold <input type=hidden name="PAYMENT_METAL_ID" value=1> <input type="hidden" name="STATUS_URL" value="mailto:YourEmailAddress@YourDomain"> <input type="hidden" name="NOPAYMENT_URL" value="ссылка на страницу с сообщением о ошибке/отказе от оплаты"> <input type="hidden" name="NOPAYMENT_URL_METHOD" value="LINK"> <input type="hidden" name="PAYMENT_URL" value="ссылка на страницу успешной оплаты"> <input type="hidden" name="PAYMENT_URL_METHOD" value="LINK"> <input type="hidden" name="BAGGAGE_FIELDS" value="CUSTOMERID"> <input type="hidden" name="CUSTOMERID" value="0"> <input type="hidden" name="SUGGESTED_MEMO" value='Примечание к платежу'> <br> <input type="submit" name="PAYMENT_METHOD" value="Оплатить сейчас"> </div></form> Подробное описание параметров формы можно найти на официальном сайте, также они будут рассмотрены далее в статье. Наиболее важные из них: - PAYEE_ACCOUNT - счет получателя платежа;
- PAYMENT_AMOUNT - сумма платежа в выбранной валюте/металле;
- PAYMENT_UNITS - валюта, эквивалент металла которой переводится, как правило, имеет значение 1 = USD;
- PAYMENT_METAL_ID - металл, которой реально переводится, как правило, имеет значение 1 = Gold;
- STATUS_URL - в этом примере, email адрес, на который будет высылаться уведомление о платеже, может задаваться http или https страница сайта, которой будут переданы параметры для проверки платежа;
- SUGGESTED_MEMO - примечание платежа, если его не заполнять, то у покупателя будет возможность ввести текст самостоятельно.
Основные этапы автоматического приема e-gold Если вы уже сталкивались с интерфейсами других платежных систем (например, WebMoney), то найдете много общего, поэтому последующее изложение материала по своей структуре сильно похоже на схожую статью о WebMoney. Можно сказать, что e-gold предлагает предельно простой вариант, без различных дополнительных возможностей (например, WebMoney имеет тестовые платежи и форму предварительного запроса). Вот основные шаги, которые потребуется реализовать: - задать на сайте e-gold специальный пароль для приема платежей (Alternate password) и получить его md5-код;
- Форма для ввода суммы платежа и формирования заказа - служит для фиксации заказа в базе данных, который будет использоваться для проверки платежа и зачисления денег покупателю на его внутренний счет;
- Форма запроса платежа и отправки его SCI - генерируется веб-сайтом продавца для формирования запроса на проведение платежа в сервисе SCI и передачи его через веб-браузер покупателя;
- Обработка оповещения о платеже - генерируется сервисом e-gold SCI для передачи оповещения о платеже на веб-сайт продавца. Оповещение передается без использования веб-браузера покупателя;
- Обработка выполненного или невыполненного платежа - генерируется сервисом e-gold SCI в случае успешного (неуспешного) выполнения платежа и передается на веб-сайт продавца через веб-браузер покупателя.
Обратите внимание, что вам нужно будет реализовать только две html формы для ввода суммы и для запроса платежа и отправки в e-gold SCI. В остальных случаях будет вызываться ваша специальная страница, в которую методами GET или POST будут передаваться параметры платежа, указанные на сайте e-gold. Удобно использовать одну динамическую страницу, которая по переданным ей параметрам будет определять, что именно от нее требуется. Если же Ваш хостинг не поддерживает серверных скриптов (php, perl, asp и т.п.), то зачисление денег сделать будет нельзя. Надо будет реализовать, как показано в простом примере на сайте e-gold 3 html формы, для отправки платежа и для вывода сообщений о удачном или неудачном завершении. Форма для ввода суммы платежа и формирования заказа Это обычная форма, которая может выглядеть следующим образом: Валюта: | USDRUR | Платежная система: | WebMoneye-gold | Сумма: | разделитель "." | Примечание: | | | |
<FORM action=Ваш_скрипт.php method=post> <TABLE width=500 align=center border=0> <TD>Валюта:</TD> <TD><SELECT size=1 name=CurrencyId> <OPTION value=1 selected>USD</OPTION> <OPTION value=2>RUR</OPTION></SELECT></TD></TR> <TR> <TD>Платежная система:</TD> <TD><SELECT size=1 name=mk> <OPTION value=1 selected>WebMoney</OPTION> <OPTION value=2>e-gold</OPTION></SELECT></TD> </TR> <TR> <TD>Сумма:</TD> <TD><INPUT maxLength=6 size=10 value=0 name=Sum> разделитель "."</TD></TR> <TR> <TD>Примечание:</TD> <TD><INPUT maxLength=100 size=50 name=Note></TD></TR> <TR> <TD></TD> <TD><INPUT type=submit value=Выполнить name=Submit></TD></TR> </TABLE> </FORM> Как вы видите, в этой универсальной форме предусмотрен выбор платежной системы, валюты, суммы и назначения платежа. В своем скрипте следует сохранить в базу данных или текстовый файл все эти данные и сгенерировать уникальный идентификатор платежа (PayID), по которому далее будет выполняться проверка. Если выбрана платежная система e-gold, то нужно показать форму запроса платежа. Форма запроса платежа и отправки его e-gold SCI Эта форма должна генерироваться скриптом из предыдущего раздела, ее поля подробно описаны в инструкции SCI. И она может выглядеть следующим образом: Оплатить в e-gold | Cумма: | 0.55 | | |
После нажатия кнопки Выполнить, перед Вами откроется стандартное окно выполнения переводов e-gold. В случае успешного перевода, деньги автоматически зачислятся на Ваш счет в InetBest. Если деньги будут перечислены, но произойдет ошибка, то они будут зачислены вручную в течении 24 часов. <FORM action="https://www.e-gold.com/sci_asp/payments.asp" method="post"> <input type="hidden" name="PAYEE_ACCOUNT" value="1104931"> <input type="hidden" name="PAYEE_NAME" value="InetBest"> <input type="hidden" name="PAYMENT_AMOUNT" value="0.55"> ><input type="hidden" name="PAYMENT_UNITS" value="1"> <input type="hidden" name="PAYMENT_METAL_ID" value="1"> <input type="hidden" name="PAYMENT_ID" value="433"> <input type="hidden" name="STATUS_URL" value="http://inetbest.com/user_cash_res.php"> <input type="hidden" name="PAYMENT_URL" value="http://inetbest.com/user_cash_res.php?compl"> <INPUT type="hidden" name="PAYMENT_URL_METHOD" value="POST"> <input type="hidden" name="NOPAYMENT_URL" value="http://inetbest.com/user_cash_res.php?err"> <INPUT type="hidden" name="NOPAYMENT_URL_METHOD" value="POST"> <input type="hidden" name="SUGGESTED_MEMO" value="Transfer into InetBest"> <input type="hidden" name="BAGGAGE_FIELDS" value=""> </FORM> В данном примере значение суммы, назначение платежа, PAYMENT_ID (433) генерируются автоматически в предыдущей форме. Естественно эту форму можно подделать и передать e-gold другие параметры, поэтому на последующих этапах будет проводить проверка. На этом этапе проверку сделать нельзя т.к. управление из этой форму передается SCI. При генерации основания платежа SUGGESTED_MEMO, старайтесь включать в него необходимые для идентификации покупателя данные. Как вы видите здесь явно передается url страниц с сообщениями о результатах платежа (PAYMENT_URL, NOPAYMENT_URL) и подтверждения платежа (STATUS_URL). По умолчанию используется передача параметров методом POST и его можно явно не указывать. Номера платежа (PAYMENT_ID) и сохраненной в базе данных продавца информации достаточно для идентификации оплаты и надежной защиты от взлома. Дополнительные поля несут косметическую цель и не их использование не требуется в практических задачах. Неудобно, что при отсутствии пользовательских полей все равно нужно передавать пустой параметр BAGGAGE_FIELDS. Во многих скриптах в этом поле передается id участника. Обработка оповещения о платеже Оповещение отправляется e-gold SCI сайту продавца (страница STATUS_URL) без участия браузера клиента, после выполнения платежа. Необходимо проверить правильность выполнения платежа и при его корректности зачислить деньги на внутренний счет или, например, отправить оплаченный товар почтой. Если сайт продавца будет недоступен, то сообщение отправляется повторно через некоторый интервал времени. В качестве страницы получающей уведомление могут указываться только "mailto:", "http://", and "https://" - нестандартные порты не поддерживаются. Проверить, является ли вызов предварительным можно по параметру V2_HASH, который передается только в форме оповещения: if (isset($_POST['V2_HASH'])){ //ваши действия по проверке платежа, при ошибки просто выходим по exit //... //если не было ошибок, зачисляем деньги или отправляем товар //... } Нужно проверять следующие данные, полученные через "Форму оповещения о платеже": - Проверить, действительно ли данные переданы от сервиса e-gold SCI (Проверка источника данных)
- Проверить, не исказились ли данные в процессе передачи (Проверка целостности данных)
- Проверить сумму платежа
- Проверить кошелек продавца
- Проверить не выполнялся ли платеж ранее
- Проверьте время платежа
Большая часть этих проверок достаточна проста в реализации. Проверка корректности ключа выполняется следующим образом:
//константе EG_ALTERNATE - присвойте значение вашего Alternate пароля $PAYEE_ACCOUNT = isset($_POST['PAYEE_ACCOUNT']) ? (string)$_POST['PAYEE_ACCOUNT'] : ''; //загружаем остальные параметры аналогичным образом $code = md5($PAYMENT_ID.':'.$PAYEE_ACCOUNT.':' .$PAYMENT_AMOUNT.':'.$PAYMENT_UNITS.':'. $PAYMENT_METAL_ID.':'.$PAYMENT_BATCH_NUM.':'.$PAYER_ACCOUNT.':'. strtoupper(md5(EG_ALTERNATE)).':'.$ACTUAL_PAYMENT_OUNCES.':'. $USD_PER_OUNCE.':'.$FEEWEIGHT.':'.$TIMESTAMPGMT); if ($code != strtolower($V2_HASH)){ exit; //неверный хеш-код } Обязательно проверьте валюту, в эквиваленте которой вам перевели сумму (PAYMENT_AMOUNT). Обратите внимание на двойное использование strtolower. Дело в том, что md5 в php (и ее аналог в perl), возвращают текст в нижнем регистре, а SCI (как и WebMoney Merhant) возвращает хэш код в верхнем регистре. Безопасность обеспечивается передачей хэш кода, в котором принимает участие md5 секретного ключа. Обязательно используйте секретный ключ максимальной длины. Особенное внимание надо обратить внимание на файл, в котором хранится константа с ключом. Лучше всего его держать за пределами расшаренной папки public_html (или просто html) и выставить на него соответствующие права доступа. Проверку сайта e-gold рекомендует выполнять по ip адресу - 63.240.230.x Время платежа можно проверить по полю TIMESTAMPGMT. Нужно поставить два ограничения: не принимать платежи из будущего и разумно ограничить прошедшие платежи, например, сроком в 1 день. Для отслеживания попыток атаки, желательно протоколировать ошибки в файле на хостинге, который регулярно просматривать. Можно сразу посылать письмо, но при большом количестве транзакций это не эффективно. Также желательно фиксировать факт предварительного вызова и при обработке оповещения проверять был ли предварительный вызов. Интересной особенностью является то, что STATUS_URL передаются только POST параметры, если вы зададите параметры в адресе, то они будут отброшены платежной системой. Достаточно интересным вопросом является учет (вычет) комисии, которая берется в продавца (получателя средств). Во многих случаях ею пренебрегают, хотя для небольших платежей она достигает до 40% от суммы перевода. Вот пример расчета реально полученной суммы (с вычетом комиссии), округленной до центов: $ACTUAL_AMOUNT = floor(100 * ((float)$USD_PER_OUNCE) * ((float)$ACTUAL_PAYMENT_OUNCES - (float)$FEEWEIGHT)) / 100; Обработка выполненного или невыполненного платежа Удобно использовать ту же страницу для этих целей. Тип вызова может определяться по значению переданного GET параметра res. Здесь обычно просто выводится сообщение пользователю о завершении операции. Можно также выдать ее детали, которые можно извлечь из полученных POST параметров. Нередко здесь сразу показывается страница с балансом счета пользователя или через некоторое время происходит автоматический редирект на нее. У e-gold нет режима тестирования приема переводов, для отладки следует выполнять переводы со своего счета на свой же счет минимальными суммами (например, $0.01). В заключение отмечу, что все это достаточно просто в реализации, а отсутствие особых требований и аттестации со стороны платежной системы e-gold делают ее очень привлекательной для автоматического приема платежей.
|