Intereting Posts
Вычисление среднего увеличения из значений массива в PHP Расширения Twig для сокращения текста? Получение результатов заявления Получить идентификатор текущей категории активной страницы API Google Кошелька и PHP, обработка почтовых сообщений Каков алгоритм, лежащий в основе вложенных комментариев? Дизайн дизайна реестра … хороший или плохой? Что означает «безопасный» параметр для функции session_set_cookie_params ()? Структурная структура ООП по иерархии PHP PHP Неустранимая ошибка: не очистить PDOException: не удалось найти драйвер Геометрический поиск Каков самый быстрый и эффективный способ хранения и получения изображений, когда у вас есть миллионы пользователей на сервере LAMP? Получить элемент по ClassName с помощью метода DOMdocument () Uncaught OAuthException: Неизвестная ошибка произошла с PHP API PHP Как читать изображения из базы данных MySQL с помощью PHP?

«извините, что произошла ошибка» при интеграции платежного шлюза PayUMoney в тестовом режиме

Я пытаюсь интегрировать платежный шлюз PayUMoney на моем клиентском сайте. Мой клиент предоставил мне регистрационные данные Payumoney . Я смог найти ключ продавца, но не могу найти ни одного из двух:

  1. Торговая соль
  2. Сайт разработчика, на котором я могу создать тестовую учетную запись и протестировать тестовую среду

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

Вот форма:

<?php // Merchant key here as provided by Payu $MERCHANT_KEY = "JBZaLc"; // Merchant Salt as provided by Payu $SALT = "GQs7yium"; // End point - change to https://secure.payu.in for LIVE mode $PAYU_BASE_URL = "https://test.payu.in"; $action = ''; $posted = array(); if(!empty($_POST)) { //print_r($_POST); foreach($_POST as $key => $value) { $posted[$key] = $value; } } $formError = 0; if(empty($posted['txnid'])) { // Generate random transaction id $txnid = substr(hash('sha256', mt_rand() . microtime()), 0, 20); } else { $txnid = $posted['txnid']; } $hash = ''; // Hash Sequence $hashSequence = "key|txnid|amount|productinfo|firstname|email|udf1|udf2|udf3|udf4|udf5|udf6|udf7|udf8|udf9|udf10"; if(empty($posted['hash']) && sizeof($posted) > 0) { if( empty($posted['key']) || empty($posted['txnid']) || empty($posted['amount']) || empty($posted['firstname']) || empty($posted['email']) || empty($posted['phone']) || empty($posted['productinfo']) || empty($posted['surl']) || empty($posted['furl']) || empty($posted['service_provider']) ) { $formError = 1; } else { //$posted['productinfo'] = json_encode(json_decode('[{"name":"tutionfee","description":"","value":"500","isRequired":"false"},{"name":"developmentfee","description":"monthly tution fee","value":"1500","isRequired":"false"}]')); $hashVarsSeq = explode('|', $hashSequence); $hash_string = ''; foreach($hashVarsSeq as $hash_var) { $hash_string .= isset($posted[$hash_var]) ? $posted[$hash_var] : ''; $hash_string .= '|'; } $hash_string .= $SALT; $hash = strtolower(hash('sha512', $hash_string)); $action = $PAYU_BASE_URL . '/_payment'; } } elseif(!empty($posted['hash'])) { $hash = $posted['hash']; $action = $PAYU_BASE_URL . '/_payment'; } ?> <html> <head> <script> var hash = '<?php echo $hash ?>'; function submitPayuForm() { if(hash == '') { return; } var payuForm = document.forms.payuForm; payuForm.submit(); } </script> </head> <body onLoad="submitPayuForm()"> <h2>PayU Form</h2> <br/> <?php if($formError) { ?> <span style="color:red">Please fill all mandatory fields.</span> <br/> <br/> <?php } ?> <form action="<?php echo $action; ?>" method="post" name="payuForm"> <input type="hidden" name="key" value="<?php echo $MERCHANT_KEY ?>" /> <input type="hidden" name="hash" value="<?php echo $hash ?>"/> <input type="hidden" name="txnid" value="<?php echo $txnid ?>" /> <table> <tr> <td><b>Mandatory Parameters</b></td> </tr> <tr> <td>Amount: </td> <td><input name="amount" value="<?php echo (empty($posted['amount'])) ? '' : $posted['amount'] ?>" /></td> <td>First Name: </td> <td><input name="firstname" id="firstname" value="<?php echo (empty($posted['firstname'])) ? '' : $posted['firstname']; ?>" /></td> </tr> <tr> <td>Email: </td> <td><input name="email" id="email" value="<?php echo (empty($posted['email'])) ? '' : $posted['email']; ?>" /></td> <td>Phone: </td> <td><input name="phone" value="<?php echo (empty($posted['phone'])) ? '' : $posted['phone']; ?>" /></td> </tr> <tr> <td>Product Info: </td> <td colspan="3"><textarea name="productinfo"><?php echo (empty($posted['productinfo'])) ? '' : $posted['productinfo'] ?></textarea></td> </tr> <tr> <td>Success URI: </td> <td colspan="3"><input name="surl" value="<?php echo (empty($posted['surl'])) ? '' : $posted['surl'] ?>" size="64" /></td> </tr> <tr> <td>Failure URI: </td> <td colspan="3"><input name="furl" value="<?php echo (empty($posted['furl'])) ? '' : $posted['furl'] ?>" size="64" /></td> </tr> <tr> <td>Service Provider: </td> <td colspan="3"><input name="service_provider" value="<?php echo (empty($posted['service_provider'])) ? '' : $posted['service_provider'] ?>" size="64" /></td> </tr> <tr> <td><b>Optional Parameters</b></td> </tr> <tr> <td>Last Name: </td> <td><input name="lastname" id="lastname" value="<?php echo (empty($posted['lastname'])) ? '' : $posted['lastname']; ?>" /></td> <td>Cancel URI: </td> <td><input name="curl" value="" /></td> </tr> <tr> <td>Address1: </td> <td><input name="address1" value="<?php echo (empty($posted['address1'])) ? '' : $posted['address1']; ?>" /></td> <td>Address2: </td> <td><input name="address2" value="<?php echo (empty($posted['address2'])) ? '' : $posted['address2']; ?>" /></td> </tr> <tr> <td>City: </td> <td><input name="city" value="<?php echo (empty($posted['city'])) ? '' : $posted['city']; ?>" /></td> <td>State: </td> <td><input name="state" value="<?php echo (empty($posted['state'])) ? '' : $posted['state']; ?>" /></td> </tr> <tr> <td>Country: </td> <td><input name="country" value="<?php echo (empty($posted['country'])) ? '' : $posted['country']; ?>" /></td> <td>Zipcode: </td> <td><input name="zipcode" value="<?php echo (empty($posted['zipcode'])) ? '' : $posted['zipcode']; ?>" /></td> </tr> <tr> <td>UDF1: </td> <td><input name="udf1" value="<?php echo (empty($posted['udf1'])) ? '' : $posted['udf1']; ?>" /></td> <td>UDF2: </td> <td><input name="udf2" value="<?php echo (empty($posted['udf2'])) ? '' : $posted['udf2']; ?>" /></td> </tr> <tr> <td>UDF3: </td> <td><input name="udf3" value="<?php echo (empty($posted['udf3'])) ? '' : $posted['udf3']; ?>" /></td> <td>UDF4: </td> <td><input name="udf4" value="<?php echo (empty($posted['udf4'])) ? '' : $posted['udf4']; ?>" /></td> </tr> <tr> <td>UDF5: </td> <td><input name="udf5" value="<?php echo (empty($posted['udf5'])) ? '' : $posted['udf5']; ?>" /></td> <td>PG: </td> <td><input name="pg" value="<?php echo (empty($posted['pg'])) ? '' : $posted['pg']; ?>" /></td> </tr> <tr> <?php if(!$hash) { ?> <td colspan="4"><input type="submit" value="Submit" /></td> <?php } ?> </tr> </table> </form> </body> </html> 

Solutions Collecting From Web of "«извините, что произошла ошибка» при интеграции платежного шлюза PayUMoney в тестовом режиме"

Это вводит в заблуждение для первых таймеров. Поставляемый key умолчанию и salt не будут работать сразу.

Чтобы проверить шлюз с помощью тестового ключа и соли, выполните следующие действия:

  1. Перейти на test.payumoney.com
  2. Зарегистрируйтесь как торговец – используйте любые ваши действительные идентификаторы электронной почты – любезно не используйте случайный идентификатор электронной почты.
  3. Заполните «Бизнес-сведения» – вы можете использовать PAN no. ABCDE1234F и DOB – 01/04/1990
  4. Заполните «Сведения о банковской учетной записи» (вы можете использовать IFSC-ALLA0212632)
  5. Вам не нужно беспокоиться о шаге банковской проверки или о любом другом шаге после этого.
  6. Перейдите в указанное ниже место, чтобы получить идентификатор торгового продавца: Панель управления продавцом -> Настройки -> Моя учетная запись -> Настройки профиля

  7. После этого отправьте свой идентификатор торговца в техническую команду, используя форму для связи с нами, и они одобрят.

  8. После утверждения вы можете найти свой тестовый ключ и соль в: Торговой панели -> Настройки -> Моя учетная запись -> Торговый ключ – Соль.
  9. Замените key умолчанию и salt с помощью нового тестового key и salt . После этого вы не должны видеть ошибку, извините, возникла какая-то проблема.

Надеюсь, это поможет.

В форме есть поле «Поставщик услуг» (имя параметра – service_provider). Значение этого поля должно быть «payu_paisa». Если вы заполните что-либо еще в этом поле в форме, вы получите сообщение об ошибке.

Ключ и соль, предоставленные payumoney, недействительны для тестирования:

 // Merchant key here as provided by Payu $MERCHANT_KEY = "gtKFFx"; // Merchant Salt as provided by Payu $SALT = "eCwWELxi"; 

Не забудьте оставить поле поставщика услуг пустым.

Оставьте поле поставщика услуг пустым. Это должно сработать.

Наконец, я узнал, что они не активировали тестовую учетную запись.

Попробуй это:

 <?php /** * Returns the pay page url or the merchant js file. * * @param unknown $params * @param unknown $salt * @throws Exception * @return Ambigous <multitype:number string , multitype:number Ambigous <boolean, string> > */ function pay ( $params, $salt ) { if ( ! is_array( $params ) ) throw new Exception( 'Pay params is empty' ); if ( empty( $salt ) ) throw new Exception( 'Salt is empty' ); $payment = new Payment( $salt ); $result = $payment->pay( $params ); unset( $payment ); return $result; } /** * Displays the pay page. * * @param unknown $params * @param unknown $salt * @throws Exception */ function pay_page ( $params, $salt ) { if ( count( $_POST ) && isset( $_POST['mihpayid'] ) && ! empty( $_POST['mihpayid'] ) ) { $_POST['surl'] = $params['surl']; $_POST['furl'] = $params['furl']; $result = response( $_POST, $salt ); Misc::show_reponse( $result ); } else { $host = (isset( $_SERVER['https'] ) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; if ( isset( $_SERVER['REQUEST_URI'] ) && ! empty( $_SERVER['REQUEST_URI'] ) ) $params['surl'] = $host; if ( isset( $_SERVER['REQUEST_URI'] ) && ! empty( $_SERVER['REQUEST_URI'] ) ) $params['furl'] = $host; $result = pay( $params, $salt ); Misc::show_page( $result ); } } /** * Returns the response object. * * @param unknown $params * @param unknown $salt * @throws Exception * @return number */ function response ( $params, $salt ) { if ( ! is_array( $params ) ) throw new Exception( 'PayU response params is empty' ); if ( empty( $salt ) ) throw new Exception( 'Salt is empty' ); if ( empty( $params['status'] ) ) throw new Exception( 'Status is empty' ); $response = new Response( $salt ); $result = $response->get_response( $_POST ); unset( $response ); return $result; } /** * Basic autoloader * * @param classname $file * define( 'INCLUDE_PATH', dirname( __FILE__ ) . '/src/' ); function __autoload ( $file ) { require_once INCLUDE_PATH . $file . '.php'; } */ /* Should libcurl or curl.so be absent. */ if ( ! function_exists( 'curl_init' ) ) : define( 'CURLOPT_URL', 1 ); define( 'CURLOPT_USERAGENT', 2 ); define( 'CURLOPT_POST', 3 ); define( 'CURLOPT_POSTFIELDS', 4 ); define( 'CURLOPT_RETURNTRANSFER', 5 ); define( 'CURLOPT_REFERER', 6 ); define( 'CURLOPT_HEADER', 7 ); define( 'CURLOPT_TIMEOUT', 8 ); define( 'CURLOPT_CONNECTTIMEOUT', 9 ); define( 'CURLOPT_FOLLOWLOCATION', 10 ); define( 'CURLOPT_AUTOREFERER', 11 ); define( 'CURLOPT_PROXY', 12 ); define( 'CURLOPT_PORT', 13 ); define( 'CURLOPT_HTTPHEADER', 14 ); define( 'CURLOPT_SSL_VERIFYHOST', 15 ); define( 'CURLOPT_SSL_VERIFYPEER', 16 ); function curl_init ( $url = false ) { return new Curl( $url ); } function curl_setopt ( &$ch, $name, $value ) { $ch->setopt( $name, $value ); } function curl_exec ( $ch ) { return $ch->exec(); } function curl_close ( &$ch ) { unset( $ch ); } function curl_errno ( $ch ) { return $ch->error; } function curl_error ( $ch_error ) { return "Could not open socket"; } function curl_getinfo ( $ch, $opt = NULL ) { return $ch->info; } function curl_setopt_array ( &$ch, $opt ) { $ch->setoptArray( $opt ); } endif; class Curl { private $url = ""; private $user_agent = "libCurl"; private $return_result = false; private $referrer = false; private $cookies_on = false; private $proxy = array (); private $timeout = 30; private $cookies; private $headers; private $method = "GET"; private $httpHeader = "application/x-www-form-urlencoded"; public $error = 0; public $info = array (); function __construct ( $url = false ) { $this->cookies = new Cookies(); $this->url = $url; $this->info['total_time'] = time(); } function __destruct () {} private function getHost ( $url ) { $url = str_replace( array ( "http://", "https://" ), "", $url ); $tmp = explode( "/", $url ); return $tmp[0]; } private function getQuery ( $url ) { $url = str_replace( array ( "http://", "https://" ), "", $url ); $tmp = explode( "/", $url, 2 ); return "/" . $tmp[1]; } private function _parseRawData ( $rawData ) { $array = explode( "\r\n\r\n", $rawData, 2 ); $this->header_data = $array[0]; $this->content = $array[1]; $this->_parseHeaders( $array[0] ); } private function _parseHeaders ( $rawHeaders ) { $rawHeaders = trim( $rawHeaders ); $headers = explode( "\r\n", $rawHeaders ); foreach ( $headers as $header ) { if ( preg_match( "|http/1\.. (\d+)|i", $header, $match ) ) { $this->status_code = $match[1]; continue; } $headerArray = explode( ":", $header ); $headerName = trim( $headerArray[0] ); $headerValue = trim( $headerArray[1] ); if ( preg_match( "|set-cookie2?|i", $headerName ) ) $this->cookies->add( $headerValue ); if ( isset( $headerName ) ) $this->headers[strtolower( $headerName )] = $headerValue; } if ( isset( $this->headers["location"] ) ) { $this->url = $this->headers["location"]; $this->exec(); } } public function setopt ( $name, $value = false ) { switch ( $name ) { case CURLOPT_URL : $this->url = $value; $this->proxy["port"] = substr( $this->url, 0, 5 ) === 'https' ? 443 : 80; break; case CURLOPT_USERAGENT : $this->user_agent = $value; break; case CURLOPT_POST : $this->method = ($value == true) ? "POST" : "GET"; break; case CURLOPT_POSTFIELDS : $this->post_data = $value; break; case CURLOPT_RETURNTRANSFER : $this->return_result = ($value == true); break; case CURLOPT_REFERER : $this->referrer = $value; break; case CURLOPT_HEADER : $this->options["header"] = ($value == true); break; case CURLOPT_PROXY : list ( $this->proxy["host"], $this->proxy["port"] ) = explode( ":", $value ); break; case CURLOPT_CONNECTTIMEOUT : /* Fall through. */ case CURLOPT_TIMEOUT : $this->timeout = ($value >= 0) ? $value : 30; break; case CURLOPT_PORT : $this->proxy["port"] = $value ? $value : (substr( $this->url, 0, 5 ) === 'https' ? 443 : 80); break; case CURLOPT_HTTPHEADER : $this->httpHeader = substr( implode( ";", $value ), 0, - 1 ); break; } } public function setoptArray ( $options ) { foreach ( $options as $name => $value ) $this->setopt( $name, $value ); } public function exec () { $errno = false; $errstr = false; $url = $this->url; $host = $this->getHost( $url ); $query = $this->getQuery( $url ); $this->proxy["host"] = $host; if ( isset( $this->proxy["port"] ) ) { $this->proxy["host"] = (443 === $this->proxy["port"]) ? "ssl://$host" : $host; $fp = pfsockopen( $this->proxy["host"], $this->proxy["port"], $errno, $errstr, $this->timeout ); $request = $query; } else { $fp = pfsockopen( $host, 80, $errno, $errstr, $this->timeout ); $request = $query; } if ( ! $fp ) { /*trigger_error($errstr, E_WARNING);*/ $this->error = 1; return; } $headers = $this->method . " $request HTTP/1.0 \r\nHost: $host \r\n"; if ( $this->user_agent ) $headers .= "User-Agent: " . $this->user_agent . "\r\n"; if ( $this->referrer ) $headers .= "Referer: " . $this->referrer . "\r\n"; if ( $this->method == "POST" ) { $headers .= "Content-Type: " . $this->httpHeader . "\r\n"; $headers .= "Content-Length: " . strlen( $this->post_data ) . "\r\n"; } if ( $this->cookies_on ) $headers .= $this->cookies->createHeader(); $headers .= "Connection: Close\r\n\r\n"; if ( "POST" == $this->method ) $headers .= $this->post_data; $headers .= "\r\n\r\n"; fwrite( $fp, $headers ); $rawData = ""; while ( ! feof( $fp ) ) $rawData .= fread( $fp, 512 ); /* fclose($fp); /* Too lazy to read the docs.*/ $this->info['total_time'] = time() - $this->info['total_time']; $this->_parseRawData( $rawData ); if ( $this->options["header"] ) $this->content = $rawData; if ( $this->return_result ) return $this->content; echo $this->content; } } class Cookies { private $cookies; function __construct () {} function __destruct () {} public function add ( $cookie ) { list ( $data, $etc ) = explode( ";", $cookie, 2 ); list ( $name, $value ) = explode( "=", $data ); $this->cookies[trim( $name )] = trim( $value ); } public function createHeader () { if ( 0 == count( $this->cookies ) || ! is_array( $this->cookies ) ) return ""; $output = ""; foreach ( $this->cookies as $name => $value ) $output .= "$name=$value; "; return "Cookies: $output\r\n"; } } class Misc { const SUCCESS = 1; const FAILURE = 0; public static function get_hash ( $params, $salt ) { $posted = array (); if ( ! empty( $params ) ) foreach ( $params as $key => $value ) $posted[$key] = htmlentities( $value, ENT_QUOTES ); $hash_sequence = "key|txnid|amount|productinfo|firstname|email|udf1|udf2|udf3|udf4|udf5|udf6|udf7|udf8|udf9|udf10"; $hash_vars_seq = explode( '|', $hash_sequence ); $hash_string = null; foreach ( $hash_vars_seq as $hash_var ) { $hash_string .= isset( $posted[$hash_var] ) ? $posted[$hash_var] : ''; $hash_string .= '|'; } $hash_string .= $salt; return strtolower( hash( 'sha512', $hash_string ) ); } public static function reverse_hash ( $params, $salt, $status ) { $posted = array (); $hash_string = null; if ( ! empty( $params ) ) foreach ( $params as $key => $value ) $posted[$key] = htmlentities( $value, ENT_QUOTES ); $additional_hash_sequence = 'base_merchantid|base_payuid|miles|additional_charges'; $hash_vars_seq = explode( '|', $additional_hash_sequence ); foreach ( $hash_vars_seq as $hash_var ) $hash_string .= isset( $posted[$hash_var] ) ? $posted[$hash_var] . '|' : ''; $hash_sequence = "udf10|udf9|udf8|udf7|udf6|udf5|udf4|udf3|udf2|udf1|email|firstname|productinfo|amount|txnid|key"; $hash_vars_seq = explode( '|', $hash_sequence ); $hash_string .= $salt . '|' . $status; foreach ( $hash_vars_seq as $hash_var ) { $hash_string .= '|'; $hash_string .= isset( $posted[$hash_var] ) ? $posted[$hash_var] : ''; } return strtolower( hash( 'sha512', $hash_string ) ); } public static function curl_call ( $url, $data ) { $ch = curl_init(); curl_setopt_array( $ch, array ( CURLOPT_URL => $url, CURLOPT_POSTFIELDS => $data, CURLOPT_FOLLOWLOCATION => true, CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_USERAGENT => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36', CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0 ) ); $o = curl_exec( $ch ); if ( curl_errno( $ch ) ) { $c_error = curl_error( $ch ); if ( empty( $c_error ) ) $c_error = 'Server Error'; return array ( 'curl_status' => Misc::FAILURE, 'error' => $c_error ); } $o = trim( $o ); return array ( 'curl_status' => Misc::SUCCESS, 'result' => $o ); } public static function show_page ( $result ) { if ( $result['status'] === Misc::SUCCESS ) header( 'Location:' . $result['data'] ); else throw new Exception( $result['data'] ); } public static function show_reponse ( $result ) { if ( $result['status'] === Misc::SUCCESS ) $result['data'](); else return $result['data']; } } class Payment { private $url; private $salt; private $params = array (); public function __construct ( $salt, $env = 'test' ) { $this->salt = $salt; switch ( $env ) { case 'test' : $this->url = 'https://test.payu.in/'; break; case 'prod' : $this->url = 'https://secure.payu.in/'; break; default : $this->url = 'https://test.payu.in/'; } } public function __destruct () { unset( $this->url ); unset( $this->salt ); unset( $this->params ); } public function __set ( $key, $value ) { $this->params[$key] = $value; } public function __get ( $key ) { return $this->params[$key]; } public function pay ( $params = null ) { if ( is_array( $params ) ) foreach ( $params as $key => $value ) $this->params[$key] = $value; $error = $this->check_params(); if ( $error === true ) { $this->params['hash'] = Misc::get_hash( $this->params, $this->salt ); $result = Misc::curl_call( $this->url . '_payment?type=merchant_txn', http_build_query( $this->params ) ); $transaction_id = ($result['curl_status'] === Misc::SUCCESS) ? $result['result'] : null; if ( empty( $transaction_id ) ) return array ( 'status' => Misc::FAILURE, 'data' => $result['error'] ); return array ( 'status' => Misc::SUCCESS, 'data' => $this->url . '_payment_options?mihpayid=' . $transaction_id ); } else { return array ( 'status' => Misc::FAILURE, 'data' => $error ); } } private function check_params () { if ( empty( $this->params['key'] ) ) return $this->error( 'key' ); if ( empty( $this->params['txnid'] ) ) return $this->error( 'txnid' ); if ( empty( $this->params['amount'] ) ) return $this->error( 'amount' ); if ( empty( $this->params['firstname'] ) ) return $this->error( 'firstname' ); if ( empty( $this->params['email'] ) ) return $this->error( 'email' ); if ( empty( $this->params['phone'] ) ) return $this->error( 'phone' ); if ( empty( $this->params['productinfo'] ) ) return $this->error( 'productinfo' ); if ( empty( $this->params['surl'] ) ) return $this->error( 'surl' ); if ( empty( $this->params['furl'] ) ) return $this->error( 'furl' ); return true; } private function error ( $key ) { return 'Mandatory parameter ' . $key . ' is empty'; } } class Response { private $salt; private $params = array (); public function __construct ( $salt ) { $this->salt = $salt; } public function __destruct () { unset( $this->salt ); unset( $this->params ); } public function __set ( $key, $value ) { $this->params[$key] = $value; } public function __get ( $key ) { return $this->params[$key]; } public function get_response ( $params = null ) { $this->params = (is_array( $params ) && count( $params )) ? $params : $_POST; $error = $this->check_params(); if ( $error === true ) { if ( Misc::reverse_hash( $this->params, $this->salt, $this->params['status'] ) === $this->params['hash'] ) { switch ( $this->params['status'] ) { case 'success' : return array ( 'status' => Misc::SUCCESS, 'data' => $this->params['surl'] ); break; case 'failure' : return array ( 'status' => Misc::SUCCESS, 'data' => $this->params['furl'] ); break; default : return array ( 'status' => Misc::FAILURE, 'data' => 'Unmapped status' ); } } else { return array ( 'status' => Misc::FAILURE, 'data' => 'Hash Mismatch' ); } } else { return array ( 'status' => Misc::FAILURE, 'data' => $error ); } } private function check_params () { if ( empty( $this->params['key'] ) ) return $this->error( 'key' ); if ( empty( $this->params['txnid'] ) ) return $this->error( 'txnid' ); if ( empty( $this->params['amount'] ) ) return $this->error( 'amount' ); if ( empty( $this->params['firstname'] ) ) return $this->error( 'firstname' ); if ( empty( $this->params['email'] ) ) return $this->error( 'email' ); if ( empty( $this->params['phone'] ) ) return $this->error( 'phone' ); if ( empty( $this->params['productinfo'] ) ) return $this->error( 'productinfo' ); if ( empty( $this->params['surl'] ) ) return $this->error( 'surl' ); if ( empty( $this->params['furl'] ) ) return $this->error( 'furl' ); return true; } private function error ( $key ) { return 'Mandatory parameter ' . $key . ' is empty'; } } $txnid = uniqid(); $response = pay_page( array ('key' => 'tradus', 'txnid' => uniqid( 'animesh_' ), 'amount' => rand( 0, 100 ),'firstname' => 'animesh', 'email' => 'animesh.kundu@payu.in', 'phone' => '1234567890','productinfo' => 'This is shit', 'surl' => 'payment_success', 'furl' => 'payment_failure'), '200' ); ?> 

Это также вызывает проблемы, если вы используете форму по умолчанию, и она запрашивает информацию о Product Info . В своем PDF-документе они дали json-формат для информации о продукте, подобной этой,

 {“paymentParts”:[{ "name":"abc", "description":"abcd", "value":"500", "isRequired":"true", “settlementEvent” : “EmailConfirmation” }, { "name":"xyz", "description":"wxyz", "value":"1500", "isRequired":"false", “settlementEvent”: “EmailConfirmation” }], {“paymentIdentifiers”:[{ "field":"CompletionDate", }, { "value":"31/10/2012” "field":"TxnId", "value":"abced" }]} 

Недавно PayMoney внесла некоторые изменения в тестовую среду, из-за которой тестовый ключ-JBZaLc и salt-GQs7yium больше не будут работать.

Чтобы протестировать шлюз с помощью тестового ключа и соли, вам нужно перейти на test.payumoney.com и зарегистрироваться как продавец. Таким образом, вы получите идентификатор торговца и идентификатор соли.

Payumoney изменил свой ТЕСТИРОВАННЫЙ КЛЮЧ и ИСПЫТАТЕЛЬНЫЙ СОЛЬ

чтобы заставить тестовый режим работать, используйте эти учетные данные с тестовым URL-адресом

 Test Key - rjQUPktU Test Salt - e5iIg1jwi8 

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

Используете ли вы правильный ключ продавца? Во многих торговых тележках имя поля, используемое «Торговый идентификатор», используется неправильно вместо Merchant Key. Однако на самом деле нужно ввести «Торговый ключ», предоставляемый PayUmoney. Обратите внимание, что мы отправим вам электронное письмо со следующими тремя подробностями:

(1) Идентификатор продавца
(2) Ключ продавца
(3) Торговая соль

Идентификатор продавца, отправленный PayUmoney, не требуется в интеграции PayUmoney с вашим сайтом. Это только ваш регистрационный номер с PayUmoney. Таким образом, единственная информация, используемая при интеграции, – Merchant Key & Merchant Salt. Используете ли вы учетные данные Test в Live Mode или Live credentials в тестовом режиме? Если да, убедитесь, что вы используете тестовые учетные данные в тестовом режиме и учетных данных Live в режиме Live. Убедитесь, что в тестовом режиме вы используете только указанные тестовые учетные данные –

Ключ проверки – rjQUPktU
Испытательная соль – e5iIg1jwi8

У вас есть все одобрения?

Если ваши одобрения находятся на рассмотрении, вполне возможно, что вы получите эту ошибку, даже если делаете все правильно. Обратитесь в службу поддержки за помощью, планируя вызов по следующей ссылке: https://calendly.com/payumoney-integration/30_minutes