Создание механизма мгновенной покупки WebMoney Click and Buy на PHP.

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

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

Одним из таких интерфейсов, для популярной платежной системы WebMoney, является интерфейс Click and Buy.

Но разработчки на PHP часто сталкиваются с проблемами в его реализации, т.к. не учитывают некоторых вещей:

* Принимать платежи в реальном режиме может только участник WebMoney с персональным аттестатом (и выше).
* Все MD5-хэши должны быть в верхнем регистре (а не только результирующий).
* В desc лучше использовать индекс товара (несколько больших букв), чем описание с различными буквами в разных языках. Приступать к экспериментам с буквами следует уже после того, как все остальное работает. Пробелы и спецсимволы лучше сразу тоже не использовать.
* Информация в ссылках и в обработчике квитанций должна быть одинаковой, руководство на странице https://merchant.webmoney.ru/ должно быть внимательно прочитано.

Пример генерации проверки pci_marker:

> #должны быть установлены # $url - url перехода # $purse - Ваш webmoney кошелек # $amount - сумма платежа (смотри условия на сайте Click and Buy!) # $desc - описание платежа (смотри рекомендации выше)
> $strhash=strtoupper($url.$purse.$amount.$desc.$mode);
> $md5p=md5("mypassword");
> #md5 пароля безопаснее вычислить заранее, и потом использовать уже его.
> $md5p=strtoupper($md5p);
> $strhash=md5($strhash);
> $strhash=strtoupper($md5p);
> $x1=$pci_wmtid.$WMID.$strhash.$pci_pursesrc.$pci_pursedest.$pci_amount.$pci_desc.$pci_datecrt.$mode;
> $mysign=md5($x1.$md5p);
> $mysign=strtoupper($mysign);
> $accept=0;
> if ($pci_marker==$mysign) { $accept=1; }

Пример проверки данных:

> if ($pci_pursedest!="R000000000000") { $accept==0; } $p1=intval($pci_amount); $p2=intval($amount); if ($p1!=$p2) { $accept==0; } if (($accept==1) and ($pci_mode="test")) { $accept=2; }
> #$accept - 1 ок, 0 - неверно, 2 - тест-режим

(c)2004, 1134.moveax.ru