Платежные системы в Joomla!: Paypal и Webmoney

Вы хотели внедрить в компонент, использующий платежную систему Paypal еще и Webmoney? Эта статья поможет вам!

В данной статье мы рассмотрим простейшую систему внедрения платежей на сайт, аналоги которой есть как у Paypal, так и у Webmoney.

ВЗАИМОДЕЙСТВИЕ САЙТ——>СЕРВИС

Как это работает?

В нужное место компонента, где нужно чтобы человек совершил оплату вставляется html форма, при использовании которой человека перебрасывает на страницу оплаты сервиса Paypal или Webmany. В через html форму с помощью переменных компонента вставляются платежные данные. Это: сумма платежа, описание платежа, номер счета, внутренний номер покупки и еще некоторые. Эта информация передается на страницу оплаты сервиса. Покупатель попадая на эту страницу выбирает способ оплаты и получает возможность оплатить то что он выбрал на сайте (а информация об этом была передана через форму).

После оплаты владельцу счета куда была произведена оплата приходит email с отчетом( также например в Webmoney в комментариях к счету можно использовать переменные- то есть в комментарии можно указать номер счета, сумма которую должны были заплатить или еще какие-либо данные из переменных компонента) .

Внимание! Данная система является полуавтоматической! То есть есть взаимодействие:

сайт——> сервис (передача информации о платеже который будет совершен)

Но нет обратного взаимодействия:

сервис——> сайт (передача информации о платеже который был совершен)

Эта схема является наиболее безопасной! (в случае с передачей информации о совершенном платеже скрипту возможна подмена информации, взлом итп).

Взаимодействию сервис——> сайт посвящена вторая часть нашей статьи.

Рассматриваемые сервисы:

Web Merchant Interface — интерфейс позволяющий быстро и с минимальными затратами дополнить свой веб-сайт или домашнюю страничку всем необходимым для того, чтобы начать принимать WM за предоставляемые вами товары или услуги.

PayPal Shopping Cart — use basic HTML to accept credit card, bank account, and PayPal payments with the Buy Now Buttons, Donations, Subscriptions, PayPal Shopping Cart, Cart Upload

Работа с системой заключается в оперировании с html формами. Основными, на которых можно понять логику системы и наиболее распространеными являются:

Webmoney: Форма запроса платежа

Генерируется веб-сайтом продавца для формирования запроса на проведение платежа в сервисе Web Merchant Interface и передачи его через веб-браузер покупателя.

Пример кода формы:

 
<form method="POST" action="https://merchant.webmoney.ru/lmi/payment.asp"> 
<input type="hidden" name="LMI_PAYMENT_AMOUNT" value="12.08">
<input type="hidden" name="LMI_PAYMENT_DESC" value="платеж по счету"> 
<input type="hidden" name="LMI_PAYMENT_NO" value="1234">
<input type="hidden" name="LMI_PAYEE_PURSE" value="Z145179295679"> 
<input type="hidden" name="LMI_SIM_MODE" value="0">
<input type="hidden" name="FIELD_1" value="VALUE_1"> 
<input type="hidden" name="FIELD_2" value="VALUE_2"> 
...
<input type="hidden" name="FIELD_N" value="VALUE_N"> 
...
</form>

Paypal: PayPal Shopping Cart

PayPal offers a hosted shopping cart that supports adding multiple items to a purchase before checkout.

When a customer clicks the button, the item is added to their shopping cart. They are given the option to return to your website to continue shopping or to proceed to checkout where they will pay with their PayPal account. Create an Add to Cart button for each item on your website.

Important: To protect against malicious users tampering with the button code and submitting an incorrect charge, see Securing Your Website Payment Standard Buttons. Merchants with significant payment volume are required by the PayPal user agreement to take precautions on securing Website Payment Standard Buttons.

You can modify the following code to create your Add to Cart button.

Пример кода формы: 

 
<form target="paypal"
action="https://www.paypal.com/cgi-bin/webscr"
method="post">
<input type="image" src="https://www.sandbox.paypal.com/
en_US/i/btn/x-click-but22.gif" 
border="0" name="submit" alt="Make payments with PayPal - 
it's fast, free and secure!">
<img alt="" border="0"
src="https://www.paypal.com/en_US/i/scr/pixel.gif
width="1" height="1">
<input type="hidden" name="add" value="1">
<input type="hidden" name="cmd" value="_cart">
<input type="hidden" name="business"
value="  <a href="mailto:электронная почта">электорнная почта</a> "> 
<input type="hidden" name="item_name" value="Store Item 1"> 
<input type="hidden" name="amount" value="50.00"> 
<input type="hidden" name="no_shipping" value="2"> 
<input type="hidden" name="no_note" value="1"> 
<input type="hidden" name="currency_code" value="USD"> 
<input type="hidden" name="tax" value="0"> 
<input type="hidden" name="bn" value="IC_Sample"> 
</form> 

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

Основные отправляемые данные форм в Paypal и Webmoney по типу одни и те же (то есть если вы добавляете один из видов оплаты, можно взять уже используемые переменные компонента из существующего способа оплаты).

Paypal Webmoney Описание поля
business LMI_PAYEE_PURSE Номер счета на который поступят деньги. В paypal это email, в webmoney цифровой номер с префиксом в начале, указывающим валюту: Z, R, E.
item_name LMI_PAYMENT_DESC Текстовое описание услуги или товара. В paypal это название товара, в webmoney его описание.
item_number LMI_PAYMENT_NO Внутренний номер покупки продавца
amount LMI_PAYMENT_AMOUNT Сумма платежа

Примеры (Исключительно формы оплаты, без объявления переменных, использованных в них):

Форма оплаты в SOBI :

Paypal  

 
<form action="<?php echo $config->payPalUrl;?>" method="post">
<input name="cmd" value="_xclick" type="hidden">
<input name="business" value="<?php echo $config->payPalMail;?>" type="hidden">
<input name="item_name" value="<?php echo $title;?>" type="hidden">
<input name="item_number" value="<?php echo $this->sobi2Id;?>" type="hidden">
<input name="no_shipping" value="1" type="hidden">
<input name="return" value="<?php echo $config->payPalReturnUrl ;?>"
type="hidden">
<input name="no_note" value="1" type="hidden">
<input name="currency_code" value="<?php echo $config->payPalCurrency;?>" type="hidden">
<input name="tax" value="0" type="hidden">
<input name="bn" value="<?php echo $title;?>" type="hidden">
<input name="charset" value="<?php echo $charset;?>" type="hidden">
<input name="amount" value="<?php echo $this->total;?>" type="hidden">
<input src="<?php echo $config->liveSite;?>/components/com_sobi2/images/paypal.jpg"
name="submit" alt="<?php echo _SOBI2_PAY_WITH_PAYPAL;?>" border="0" type="image">
</form>
 

Webmoney 

 
<form id=pay name=pay method="POST" action="https://merchant.webmoney.ru/lmi/payment.asp">
<table width="99%" align="center" cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="100%" align="center">
<input name="LMI_PAYMENT_AMOUNT" type="text" size="3" value="<?php echo $this->total;?>">
<input type="hidden" name="LMI_PAYMENT_DESC" value="Оплата платных полей каталога,
номер заказа <?php echo $this->sobi2Id;?>">
<input type="hidden" name="LMI_PAYMENT_NO" value="="<?php echo $this->sobi2Id;?>"">
<input type="hidden" name="LMI_SIM_MODE" value="0">
<input type="hidden" name="LMI_SUCCESS_URL" 
value="http://estate-real.spb.ru/index.php?option=com_sobi2&amp;Itemid=28">
<input type="hidden" name="LMI_SUCCESS_METHOD" value="2">
<input type="hidden" name="LMI_FAIL_URL" 
value="http://estate-real.spb.ru/index.php?option=com_sobi2&amp;Itemid=28">
<input type="hidden" name="LMI_FAIL_METHOD" value="2">
<select name="LMI_PAYEE_PURSE" style="min-width:30px;">
<option value="R265873850459">WMR</option>
</select>
</td>
</tr>
<tr>
<td width="100%" align="center">
<br>
<input type="submit" class="button" value="Оплатить">
</td>
</tr>
</table>
</form> 
 

Форма оплаты в EZ reality

Paypal 

 
<form action="https://<?php echo "$domain";?>/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick" />
<input type="hidden" name="bn" value="Raptor Services EZ Realty" />
<input type="hidden" name="business" value="<?php echo $paypal_email;?>" />
<input type="hidden" name="item_name" value="<?php echo stripslashes( $premium_name );?>" />
<input type="hidden" name="item_number" value="<?php echo $row->id;?>" />
<input type="hidden" name="amount" value="<?php echo $premium_cost;?>" />
<input type="hidden" name="no_shipping" value="1" />
<input type="hidden" name="return" value="<?php echo $mosConfig_live_site; ?>
/index.php?option=com_ezrealty&amp;Itemid=<?php echo $Itemid;?>&amp;task=success" />
<input type="hidden" name="cancel_return" value="<?php echo $mosConfig_live_site; ?>
/index.php?option=com_ezrealty&amp;Itemid=<?php echo $Itemid;?>&amp;task=cancel" />
<input type="hidden" name="no_note" value="1" />
<input type="hidden" name="notify_url" value="<?php echo $mosConfig_live_site; ?>
/components/com_ezrealty/upgrade2.ezrealty.ipn.php" />
<input type="hidden" name="currency_code" value="<?php echo $currency;?>" />
<input type="image" src="components/com_ezrealty/images/<?php echo $button_image;?>" 
name="submit" alt="Make payments with PayPal - it's fast, free and secure!" />
<input type="hidden" name="on0" value="Listing Owner" />
<input type="hidden" name="os0" value="<?php echo $my->id;?>" />
</form>

Форма оплаты в Adeptus donate module

Webmoney 

 <form id=pay name=pay method="POST" action="https://merchant.webmoney.ru/lmi/payment.asp"><table width="99%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td width="100%" align="center"><?phpif ($showlogo == 1) echo '<img src="'.$logo.'" alt="'.$wltxt.'" title="'.$wltxt.'" /><br/>';if ($wltxt != '' && $wltxt != NULL)    echo $wltxt;?></td></tr><tr><td width="100%" align="center"><input name="LMI_PAYMENT_AMOUNT" type="text" size="3" value="<?php echo $summ;?>"><input type="hidden" name="LMI_PAYMENT_DESC" value="<?php echo $descpay;?>"><input type="hidden" name="LMI_PAYMENT_NO" value="1"><input type="hidden" name="LMI_SIM_MODE" value="0"><input type="hidden" name="LMI_SUCCESS_URL" value="<?php echo $successurl;?>"><input type="hidden" name="LMI_SUCCESS_METHOD" value="2"><input type="hidden" name="LMI_FAIL_URL" value="<?php echo $errorurl;?>"><input type="hidden" name="LMI_FAIL_METHOD" value="2"><select name="LMI_PAYEE_PURSE" style="min-width:30px;"><option value="<?php echo $wmnum1;?>"><?php echo $wmtype1;?></option><option value="<?php echo $wmnum2;?>"><?php echo $wmtype2;?></option><option value="<?php echo $wmnum3;?>"><?php echo $wmtype3;?></option></select></td></tr><tr><td width="100%" align="center"><br><input type="submit" class="button" value="<?php echo $btntxt;?>"></td></tr></table></form>

Варианты для кнопки Оплатить:

В Paypal чаще всего можно увидетьв качестве кнопки оплаты баннер, при нажатии на который вы попадаете на страницу оплаты Paypal: 

 <input type="image" src="https://www.sandbox.paypal.com/en_US/i/btn/x-click-but22.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!"><img alt="" border="0"src="https://www.paypal.com/en_US/i/scr/pixel.gifwidth="1" height="1"><input type="image" src="components/com_ezrealty/images/<?php echo $button_image;?>" name="submit" alt="Make payments with PayPal - it's fast, free and secure!" /> 

Тоже самое можно сделать для Webmoney, используя логотипы фирменного стиля : 

 
<input type="image" src="http://www.webmoney.ru/img/banner/8831_2.gif" name="submit" 
alt="Оплатить через Webmoney" />

Или выпадающую форму оплаты с возможностью оплаты по нескольким счетам, как у Adeptusa (adeptsite.info) 

 
<select name="LMI_PAYEE_PURSE" style="min-width:30px;">
<option value="Номер счета">Название выпадающего списка</option>
<option value="Номер счета">Название выпадающего списка</option>
<option value="Номер счета">Название выпадающего списка</option>
</select>
</td>
</tr>
<tr>
<td width="100%" align="center">
<br>
<input type="submit" class="button" value="Оплатить">
</td>
</tr>
 

ВЗАИМОДЕЙСТВИЕ СЕРВИС——>САЙТ

Первая схема не обеспечивает полную автоматизацию. Сайт (скрипт) продавца не получает автоматически информацию о полученном платеже. При большом количестве обращений работать становится весьма затруднительно.

Webmoney: ФОРМЫ HTML для передачи информации на сайт

Для передачи информации между веб-сайтом продавца и сервисом Web Merchant Interface используютcя пять основных HTML-формы. Первую мы уже рассмотрели, она посылает информацию на сервис. Остальные четыре- это взаимодействие:

сервис—->сайт

  • Форма предварительного запроса — генерируется сервисом Web Merchant Interface для передачи параметров предварительного запроса на выполнение платежа на веб-сайт продавца, если установлен флаг Передавать параметры в предварительном запросе. Если флаг не установлен — не используется (запрос выполняется без параметров). Запрос передается без использования веб-браузера покупателя.
  • Форма оповещения о платеже — генерируется сервисом Web Merchant Interface для передачи оповещения о платеже на веб-сайт продавца. Оповещение передается без использования веб-браузера покупателя.
  • Форма выполненного платежа — генерируется сервисом Web Merchant Interface в случае успешного выполнения платежа и передается на веб-сайт продавца через веб-браузер покупателя.
  • Форма невыполненного платежа — генерируется сервисом Web Merchant Interface в случае невыполнения платежа и передается на веб-сайт продавца через веб-браузер покупателя.

Paypal: Instant Payment Notification

IPN/PDT Variable Reference

This page is the complete list of possible variables that can be included in the Instant Payment Notification (IPN) or Payment Data Transfer (PDT) post that PayPal sends to your server.

Unless otherwise indicated in the table column labeled Possible Values, the value of a variable is always specific to the transaction whose information is being posted.

In the Sandbox environment, Instant Payment Notification includes the additional variable test_ipn with a value of 1 (one). The purpose of test_ipn is to provide testing programs a means to differentiate between Sandbox IPN and live IPN.

The value of the notify_version variable is the version number of Instant Payment Notification that makes the post. The value notify_version is a means for PayPal to track versions of IPN. There is no need for your programs to store this value or query it.

The value of verify_sign is an encrypted string used to validate the authenticity of the transaction.

Информация о формах

Ярким примером использования данных форм как в Paypal, так и Webmoney является компонент интернет-магазина VirtueMart. В сборке RE можно посмотреть модуль Webmoney.

В данный момент я не имею достаточно информации об организации оплаты таким образом.