Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: WebMoney - алгоритм формирования подписи на PHP
 
 автор: ElWhite2   (19.10.2007 в 14:42)   письмо автору
 
 

Здравствуйте.

Есть вопрос: для PHP алгоритм создания подписи квитанции о проведенной транзакции на https://merchant.webmoney.ru/conf/guide_pci.asp#validation не работает. Может ли кто-нибудь подсказать рабочий алгоритм для PHP?

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

   
 
 автор: mihdan   (19.10.2007 в 14:48)   письмо автору
 
   для: ElWhite2   (19.10.2007 в 14:42)
 

на сайте все расписано от и до, есть примеры(рабочие). В чем именно проблема

   
 
 автор: ElWhite2   (19.10.2007 в 15:50)   письмо автору
 
   для: mihdan   (19.10.2007 в 14:48)
 

На сайте webmoney.ru информация представлена очень скверно . Пока что-то нужное найдешь - уходит слишком много времени. Многие ссылки ведут на удаленные страницы. Ощущение такое, что роешься в сундуке с как попало набросанными вещами.

Я ищу пример реализации построения подписи квитанции для PHP. Вы можете поделиться таким?

   
 
 автор: kak   (19.10.2007 в 17:11)   письмо автору
 
   для: ElWhite2   (19.10.2007 в 15:50)
 

>Ощущение такое, что роешься в сундуке с как попало набросанными вещами.
У меня о сайте webmoney.ru такое же впечатление складывается :)

   
 
 автор: mihdan   (20.10.2007 в 20:19)   письмо автору
 
   для: kak   (19.10.2007 в 17:11)
 

Я с вами согласен ... яндекс поможет ;)Я нашел, а вы ....

   
 
 автор: ElWhite2   (22.10.2007 в 13:12)   письмо автору
 
   для: mihdan   (20.10.2007 в 20:19)
 

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

Я отправлял в WebMoney число, обработанное через number_format:
 
$sum = number_format($sum, 2, '.', ''); 

То есть, если сумма была без дробной части, она все равно уходила с двумя нулями в дроби. Этого делать не надо, т.к. не смотря на то, что кипер показывает отправляемую сумму платежа с нулями в пустой дробной части, WebMoney возвращает в квитанции сумму без нулей в дроби если дробной части нет. В результате подпись не будет совпадать с эталонной подписью, т.к. строго говоря отправленное число суммы было одним, а получено - другое. Например, отправлено 23.00, а получено - 23
Потому отправленное число суммы лучше пропускать через round:

$value = round($value, 2);

Ну а функцию для обработки исходящей и входящей суммы можно прописать примерно так:

 function strictMoney($value)
 {
  $value = preg_replace('/-/', null, $value);
  $value = preg_replace('/,/', '.', $value);
  return round($value, 2);
 }

   
 
 автор: ElWhite2   (22.10.2007 в 13:14)   письмо автору
 
   для: ElWhite2   (19.10.2007 в 14:42)
 

Извините за ошибку при форматировании, повторюсь:

Я отправлял в WebMoney число, обработанное через number_format:
 
$sum = number_format($sum, 2, '.', ''); 

То есть, если сумма была без дробной части, она все равно уходила с двумя нулями в дроби. Этого делать не надо, т.к. не смотря на то, что кипер показывает отправляемую сумму платежа с нулями в пустой дробной части, WebMoney возвращает в квитанции сумму без нулей в дроби если дробной части нет. В результате подпись не будет совпадать с эталонной подписью, т.к. строго говоря отправленное число суммы было одним, а получено - другое. Например, отправлено 23.00, а получено - 23
Потому отправленное число суммы лучше пропускать через round:

$value = round($value, 2);

Ну а функцию для обработки исходящей и входящей суммы можно прописать примерно так:

 function strictMoney($value)
 {
  $value = preg_replace('/-/', null, $value);
  $value = preg_replace('/,/', '.', $value);
  return round($value, 2);
 }

   
 
 автор: mihdan   (22.10.2007 в 13:16)   письмо автору
 
   для: ElWhite2   (22.10.2007 в 13:14)
 

Всё оказалось куда проще, чем предполагалось !

   
 
 автор: ElWhite2   (22.10.2007 в 13:42)   письмо автору
 
   для: mihdan   (22.10.2007 в 13:16)
 

Ну, как обычно :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования