wake-up-neo.net

Beim Integrieren des PayUMoney Payment Gateway in den Testmodus ist leider ein Fehler aufgetreten

Ich versuche, PayUMoney Payment Gateway in meine Client-Site zu integrieren. Mein Kunde gab mir die Zugangsdaten von PayUMoney . Ich konnte den Merchant Key finden, konnte aber keine der beiden finden:

  1. Kaufmannssalz
  2. Entwicklerseite, auf der ich ein Testkonto erstellen und Sandbox testen kann

PayUMoney hat mir ein Formular mit einem Standardwert zur Verfügung gestellt, aber beim Testen wird die Meldung angezeigt: Es ist ein Fehler aufgetreten.

Hier ist das Formular:

<?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>
16
Ashutosh

Schließlich erfuhr ich, dass sie den Testaccount nicht aktiviert haben.

5
Ashutosh

Dies ist für die ersten Zeiten verwirrend. Die Standardeinstellungen key und salt funktionieren nicht sofort. 

Um das Gateway mit einem Testschlüssel und einem Salt zu testen, gehen Sie bitte folgendermaßen vor:

  1. Gehen Sie auf test.payumoney.com 
  2. Melden Sie sich als Händler an - verwenden Sie einen der Ihre gültigen E-Mail-IDs - bitte verwenden Sie keine zufällige E-Mail-ID. 
  3. Füllen Sie die "Geschäftsdetails" aus - Sie können PAN Nr. Verwenden. ABCDE1234F und Geb .: 01/04/1990 
  4. Füllen Sie "Bankkontodetails" aus (Sie können IFSC-ALLA0212632 verwenden) 
  5. Sie müssen sich nicht um den Banküberprüfungsschritt oder einen anderen Schritt danach kümmern.
  6. Gehen Sie zum unten genannten Ort, um den Test zu erhalten Händler-ID: Verkäufer-Dashboard -> Einstellungen -> Mein Konto -> Profil die Einstellungen

  7. Senden Sie anschließend Ihre Test-Händler-ID an das technische Team. Verwenden Sie dazu das contact us form-Formular, um sie zu bestätigen.

  8. Nach der Bestätigung finden Sie Ihren Testschlüssel und Ihr Salz unter: Verkäufer-Dashboard -> Einstellungen -> Mein Konto -> Händlerschlüssel - Salz.
  9. Ersetzen Sie die Standardwerte key und salt durch den neu generierten Test key und salt. Danach sollten Sie keinen Fehler sehen, Sorry, ein Problem ist aufgetreten.

Ich hoffe das hilft.

30
pinkal vansia

Der von payumoney zur Verfügung gestellte Schlüssel und Salz ist ungültig. Verwenden Sie Folgendes zum Testen:

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

// Merchant Salt as provided by Payu
$SALT = "eCwWELxi";

Lassen Sie das Feld des Serviceanbieters leer.

11

Es gibt ein Feld "Service Provider" im Formular (param name ist - service_provider). Der Wert dieses Feldes sollte 'payu_paisa' sein. Wenn Sie in diesem Feld etwas anderes in das Formular eingeben, wird eine Fehlermeldung angezeigt.

Lassen Sie das Feld Service Provider leer. Das sollte funktionieren.

7
Aravind NC

Payumoney hat seinen TEST KEY und TEST SALT geändert

damit der Testmodus funktioniert, verwenden Sie diese Anmeldeinformationen mit der Test-URL 

Test Key - rjQUPktU 
Test Salt - e5iIg1jwi8

Treten weiterhin Probleme auf, versuchen Sie dann, die folgenden Schritte auszuführen 

Verwenden Sie den richtigen Händlerschlüssel? In vielen Einkaufswagen wird der Feldname "Händler-ID" anstelle des Händlerschlüssels falsch verwendet. Was jedoch tatsächlich eingegeben werden muss, ist der von PayUmoney gelieferte "Merchant Key". Bitte beachten Sie, dass wir Ihnen eine E-Mail mit den folgenden 3 Details senden: 

(1) Händler-ID 
(2) Händlerschlüssel 
(3) Händlersalz 

Die von PayUmoney verschickte Händler-ID ist für die PayUmoney-Integration in Ihre Website nicht erforderlich. Es ist nur Ihre Registrierungsnummer bei PayUmoney. Daher sind die einzigen zwei Informationen, die bei der Integration verwendet werden, Merchant Key & Merchant Salt . Verwenden Sie Testanmeldeinformationen im Live-Modus oder Live-Anmeldeinformationen im Testmodus? Wenn ja, stellen Sie sicher, dass Sie Testanmeldeinformationen im Testmodus und Live-Anmeldeinformationen im Live-Modus verwenden. Stellen Sie sicher, dass Sie im Testmodus nur die unten angegebenen Testanmeldeinformationen verwenden. 

Testschlüssel - rjQUPktU 
Testsalz - e5iIg1jwi8

Hast du alle Genehmigungen? 

Wenn Ihre Genehmigungen noch ausstehen, wird dieser Fehler möglicherweise angezeigt, obwohl Sie alles richtig machen. Wenden Sie sich an den Support, um Unterstützung zu erhalten, indem Sie einen Anruf über den folgenden Link planen:. https://calendly.com/payumoney-integration/30_minutes

1
Rishabh Gusain

Es verursacht auch Probleme, wenn Sie das Standardformular verwenden und nach Product Info gefragt werden. In ihrem PDF Dokument haben sie ein json-Format für Produktinformationen wie diese gegeben -

{“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"
}]}

Wenn Sie diesen Json in den Product Info-Textbereich einfügen, können Sie möglicherweise das Problem lösen.

1
Swaps

Versuche dies:

<?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' => '[email protected]', 'phone' => '1234567890','productinfo' => 'This is shit', 'surl' => 'payment_success', 'furl' => 'payment_failure'), '200' );

?>
1
satyandera

Kürzlich hat PayUMoney einige Änderungen in der Testumgebung vorgenommen, aufgrund derer der Testschlüssel-JBZaLc und das Salt-GQs7yium nicht mehr funktionieren.

Um das Gateway mit einem Testschlüssel und einem Salt zu testen, müssen Sie Gehen Sie auf test.payumoney.com und melden Sie sich als Händler an. So erhalten Sie die Händler-ID und die Salz-ID.

0
Jumper Pot