Автоматический прием денег в e-gold с помощью SCI

форекс
 
Главное меню
Главная
Новости
Заработок без сайта
Заработок на сайте
Статьи
Задать вопрос
Контакты
Обучение
Карта сайта
Гостевая книга
Опросы
Вопрос-ответ
 
Чуть-чуть рекламы
Новости
Главная

Автоматический прием денег в e-gold с помощью SCI

18.10.2006 г.
Источник: Sb-money.ru
Автоматический ввод денег на внутренний счет или оплата товара, является важной частью систем электронной коммерции, САР, казино и т.п. В статье рассмотрены особенности ввода денег в системе e-gold с использованием ее сервиса SCI. Приведены детальные примеры создания html форм и php кода.

  • Введение
  • Ссылки для быстрой оплаты в E-Gold
  • Простая форма приема платежей E-Gold
  • Основные этапы автоматического приема e-gold
  • Форма для ввода суммы платежа и формирования заказа
  • Форма запроса платежа и отправки его e-gold SCI
  • Обработка оповещения о платеже
  • Обработка выполненного или невыполненного платежа Введение

    Существенным преимуществом 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://1809702.e-gold.com - окно перевода без суммы на счет 1809702
    • http://1809702-USD0.02.e-gold.com - перевод 2 центов e-gold
    • http://1809702-USD2.e-gold.com - перевод $2 e-gold
    • http://1809702-USD1.03-Silver.e-gold.com - перевод $1.03 e-silver
    • http://1809702-USD5-Palladium.e-gold.com - перевод $5 e-palladium

    Хороший пример приведен на официальном сайте (для его работы должен быть включен Java Script):

    Пример приема оплаты в e-gold по ссылкам через SCI
    Заполните поля формы (поставьте номер своего счета, сумму и т.п.), для генерации ссылки оплаты e-gold.
    Номер счета e-gold: Сумма в валюте: Тип металла:

    Полученные ссылки, скопируйте и вставьте на своем сайте:
    или используйте графическую кнопку:


    Показать полученные ссылки в всплывающем окне...


    При использовании этого SCI метода с ссылками, вы автоматически будете получать уведомление на email, каждый раз при получении платежей. Проверить подлинность отправителя писем можно на странице MD5 Hash Checker page, (или зайти в свой счет и проверить историю полученных платежей
    Пользователь будет направлен обратно на ваш сайт, после нажатия кнопок "Continue" или "Cancel" на странице приема платежей e-gold.

    Простая форма приема платежей 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="1809702">
    <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 формы, для отправки платежа и для вывода сообщений о удачном или неудачном завершении.

    Форма для ввода суммы платежа и формирования заказа

    Это обычная форма, которая у меня выглядит следующим образом:

    Валюта:
    Платежная система:
    Сумма: разделитель "."
    Примечание:
    <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. В случае успешного перевода, деньги автоматически зачислятся на Ваш счет в системе SB-MONEY.RU. Если деньги будут перечислены, но произойдет ошибка, то они будут зачислены вручную в течении 24 часов.
    <FORM action="https://www.e-gold.com/sci_asp/payments.asp" method="post">
    <input type="hidden" name="PAYEE_ACCOUNT" value="1809702">
    <input type="hidden" name="PAYEE_NAME" value="SB-MONEY.RU">
    <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://sb-money.ru/user_cash_res.php">
    <input type="hidden" name="PAYMENT_URL" value="http://sb-money.ru/user_cash_res.php?compl">
    <INPUT type="hidden" name="PAYMENT_URL_METHOD" value="POST">
    <input type="hidden" name="NOPAYMENT_URL" value="http://sb-money.ru/user_cash_res.php?err">
    <INPUT type="hidden" name="NOPAYMENT_URL_METHOD" value="POST">
    <input type="hidden" name="SUGGESTED_MEMO" value="Transfer into SB-MONEY.RU">
    <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
      //...
    
      //если не было ошибок, зачисляем деньги или отправляем товар
      //...
    }
    
    Нужно проверять следующие данные, полученные через "Форму оповещения о платеже":
    1. Проверить, действительно ли данные переданы от сервиса e-gold SCI (Проверка источника данных)
    2. Проверить, не исказились ли данные в процессе передачи (Проверка целостности данных)
    3. Проверить сумму платежа
    4. Проверить кошелек продавца
    5. Проверить не выполнялся ли платеж ранее
    6. Проверьте время платежа
    Большая часть этих проверок достаточна проста в реализации. Проверка корректности ключа выполняется следующим образом:
    //константе 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 делают ее очень привлекательной для автоматического приема платежей.


  •  
    Случайная статья
    Популярное
     


    2006-2009, http://mdearn.org/