- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте. Помогите пожалуйста уже голову сломал. Как сделать правильную контрольную сумму MD5. Переделываю уже существующий модуль оплаты Пайпал на Робокассу.
Вот такой код используется
<?php defined('InShopNC') or exit('Access Invalid!');
class robokassa{
private $alipay_gateway_new = 'http://test.robokassa.ru/Index.aspx?';
private $code = 'robokassa';
private $payment;
private $order;
private $parameter;
private $order_type;
public function __construct($payment_info=array(),$order_info=array()){
if (!extension_loaded('openssl')) $this->alipay_verify_url = 'http://test.robokassa.ru/Index.aspx?';
if(!empty($payment_info) and !empty($order_info)){
$this->payment = $payment_info;
$this->order = $order_info;
}
}
/**
* Запросы для получения оплаты интерфейс
*
* @return string
*/
public function get_payurl(){
$this->parameter = array(
'mrh_pass1' => $this->payment['payment_config']['mrh_pass1'],
'Encoding' => CHARSET, //Сайт Кодирование
'sign_type' => 'MD5', //Подпись способ
'Desc' => 'ROBOKASSA Advanced User Guide', //Наименование
'MrchLogin' => $this->payment['payment_config']['mrh_login'], //Партнер ID
'InvId' => 0, //Внешний номер транзакции
'IncCurrLabel' => '', //типы оплаты
'Shp_item' => 1, //типы оплаты
'Culture' => 'ru', //типы оплаты
'OutSum' => $this->order['pay_amount'],//общая стоимость заказа
//'notify_url' => SHOP_SITE_URL."/api/payment/robokassa/notify_url.php", //URL Уведомление
//'return_url' => SHOP_SITE_URL."/api/payment/robokassa/return_url.php", //Вернуться URL
//'extra_common_param'=> $this->order['order_type'],//покупка продукт product_buy, predeposit предварительно пополнение счета
//'body' => $this->order['pay_sn'], //Описание продукта
//'logistics_type' => 'EXPRESS', //Логистика и методы распределения: POST (поверхность), EMS (EMS), Express (другой экспресс)
//'logistics_payment' => 'BUYER_PAY', //Логистика Оплата: SELLER_PAY (продавец платить), BUYER_PAY (покупатель платит), BUYER_PAY_AFTER_RECEIVE (наложенный платеж)
//'receive_name' => $_SESSION['member_name'],//Грузополучатель название
//'receive_address' => 'N', //приемник Адрес
//'receive_zip' => 'N', //Грузополучатель Почтовый
//'receive_phone' => 'N',//приемник Телефон
//'receive_mobile' => 'N',//Грузополучатель телефон
//'seller_email' => $this->payment['payment_config']['alipay_account'], //Электронная почта продавец
//'quantity' => 1,//количество
//'total_fee' => 0,//Логистика и издержки обращения
//'extend_param' => "isv^sh32",
);
$this->parameter['sign'] = $this->sign($this->parameter);
return $this->create_url();
}
/**
* Уведомление о проверки адреса
*
* @return bool
*/
public function notify_verify() {
$param = $_POST;
$param['mrh_pass1'] = $this->payment['payment_config']['mrh_pass1'];
$veryfy_url = $this->alipay_verify_url. "mrh_login=" .$this->payment['payment_config']['mrh_login']. "¬ify_id=".$param["notify_id"];
$veryfy_result = $this->getHttpResponse($veryfy_url);
$mysign = $this->sign($param);
if (preg_match("/true$/i",$veryfy_result) && $mysign == $param["sign"]) {
$this->order_type = $param['extra_common_param'];
return true;
} else {
return false;
}
}
/**
* Вернуться Address Verification
*
* @return bool
*/
public function return_verify() {
$param = $_GET;
$param['act'] = "";//Пустые контроля параметров системы, потому что зашифрованные аутентификации для предотвращения ошибок
$param['op'] = "";
$param['mrh_pass1'] = $this->payment['payment_config']['mrh_pass1'];
$veryfy_url = $this->alipay_verify_url. "mrh_login=" .$this->payment['payment_config']['mrh_login']. "¬ify_id=".$param["notify_id"];
$veryfy_result = $this->getHttpResponse($veryfy_url);
$mysign = $this->sign($param);
if (preg_match("/true$/i",$veryfy_result) && $mysign == $param["sign"]) {
$this->order_type = $param['extra_common_param'];
return true;
} else {
return false;
}
}
/**
*
* Заказы, сделанные статус платежа, успех или неудача
* @param array $param
* @return array
*/
public function getPayResult($param){
return $param['trade_status'] == 'TRADE_SUCCESS';
}
/**
*
*
* @param string $name
* @return
*/
public function __get($name){
return $this->$name;
}
/**
* Удаленный доступ к данным
* $ Адрес указать полный адрес URL путь
* @ Парам $ time_out тайм-аут. По умолчанию: 60
* Вернуться данных дистанционного выходных
*/
private function getHttpResponse($url,$time_out = "60") {
$urlarr = parse_url($url);
$errno = "";
$errstr = "";
$transports = "";
$responseText = "";
if($urlarr["scheme"] == "https") {
$transports = "ssl://";
$urlarr["port"] = "443";
} else {
$transports = "tcp://";
$urlarr["port"] = "80";
}
$fp=@fsockopen($transports . $urlarr['host'],$urlarr['port'],$errno,$errstr,$time_out);
if(!$fp) {
die("ERROR: $errno - $errstr<br />\n");
} else {
if (trim(CHARSET) == '') {
fputs($fp, "POST ".$urlarr["path"]." HTTP/1.1\r\n");
} else {
fputs($fp, "POST ".$urlarr["path"].'?encoding='.CHARSET." HTTP/1.1\r\n");
}
fputs($fp, "Host: ".$urlarr["host"]."\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ".strlen($urlarr["query"])."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $urlarr["query"] . "\r\n\r\n");
while(!feof($fp)) {
$responseText .= @fgets($fp, 1024);
}
fclose($fp);
$responseText = trim(stristr($responseText,"\r\n\r\n"),"\r\n");
return $responseText;
}
}
/**
* Оформление платежных требований адрес интерфейса
*
* @return string
*/
private function create_url() {
$url = $this->alipay_gateway_new;
$filtered_array = $this->para_filter($this->parameter);
$sort_array = $this->arg_sort($filtered_array);
$arg = "";
while (list ($mrh_pass1, $val) = each ($sort_array)) {
$arg.=$mrh_pass1."=".urlencode($val)."&";
}
$url.= $arg."SignatureValue=" .$this->parameter['sign'];
return $url;
}
/**
* Alipay для получения подписи
*
* @return string
*/
private function sign($parameter) {
$mysign = "";
$filtered_array = $this->para_filter($parameter);
$sort_array = $this->arg_sort($filtered_array);
$arg = "";
while (list ($mrh_pass1, $val) = each ($sort_array)) {
$arg .= $mrh_pass1."=".$this->charset_encode($val,(empty($parameter['encoding'])?"utf-8":$parameter['encoding']),(empty($parameter['encoding'])?"utf-8":$parameter['encoding']))."&";
}
$prestr = substr($arg,0,-1); //Удалите последнюю амперсанд
$prestr .= $parameter['mrh_pass1'];
if($parameter['sign_type'] == 'MD5') {
$mysign = md5($prestr);
}elseif($parameter['sign_type'] =='DSA') {
//DSA Метод Подпись быть последующие развитие
die("Сигнатура метода DSA быть последующие развития, пожалуйста, использовать подпись путь MD5");
}else {
die("Paypal браузер не поддерживает".$parameter['sign_type']."Тип подписи образом");
}
return $mysign;
}
/**
* Снимите шаблон массив нулями и подпись
*
* @param array $parameter
* @return array
*/
private function para_filter($parameter) {
$para = array();
while (list ($mrh_pass1, $val) = each ($parameter)) {
if($mrh_pass1 == "sign" || $mrh_pass1 == "sign_type" || $mrh_pass1 == "mrh_pass1" || $val == "")continue;
else $para[$mrh_pass1] = $parameter[$mrh_pass1];
}
return $para;
}
/**
* Изменение порядка массив параметров
*
* @param array $array
* @return array
*/
private function arg_sort($array) {
ksort($array);
reset($array);
return $array;
}
/**
* Достижение разнообразные кодировки символов
*/
private function charset_encode($input,$_output_charset,$encoding="utf-8") {
$output = "";
if(!isset($_output_charset))$_output_charset = $this->parameter['encoding'];
if($encoding == $_output_charset || $input == null) {
$output = $input;
} elseif (function_exists("mb_convert_encoding")){
$output = mb_convert_encoding($input,$_output_charset,$encoding);
} elseif(function_exists("iconv")) {
$output = iconv($encoding,$_output_charset,$input);
} else die("sorry, you have no libs support for charset change.");
return $output;
}
}
Вот скриншет ошибки на робокассе при оплате
http://floomby.ru/s1/eW9Dd5
Это оригинальный MD5 робокассы
// формирование подписи
// generate signature
$crc = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item");Эта тема тысячу раз мусолилась. У них плохо описана процедура. Сам намучился с этим. Где-то нашёл решение. К сожалению не помню точно. Кажется что-то с выбором к какому серверу вы подключаетесь, к тестовому или к рабочему.
На сайте робокассы есть рабочие примеры для php. Я когда настраивал, проблем не возникало.