Интеграция Payumoney с Codeigniter

введите описание изображения здесь Я работаю над интеграцией CodeIgniter payUmoney. У меня есть регистрационная форма, из которой можно зарегистрироваться и получить оплату с помощью платежного шлюза payUmoney, и форма также содержит несколько полей выбора. Мне нужно использовать платежный шлюз payUmoney. Итак, пожалуйста, помогите мне, как мне вставить записи в базу данных после успешной транзакции в CodeIgniter.?

Собственно вот моя форма. Теперь, что я хочу отправить форму, но после успешной оплаты. Для меня небольшая проблема в том, где я буду хранить данные до успешной оплаты. Означает, что я хочу сохранить данные после успешной транзакции. Также есть несколько вариантов выбора, поэтому, пожалуйста, помогите мне, как сохранить данные в базе данных после транзакции с помощью payUmoney.


person PHP Geek    schedule 28.01.2017    source источник
comment
Я сделал проект Payumoney на CodeIgniter. Но я не понимаю, в чем именно твоя проблема. Просто измените статус транзакции с инициированной на успешную после того, как payumoney вернется к вашему методу успеха. Не забудьте проверить обратный хеш-код, чтобы избежать взлома.   -  person Geordy James    schedule 28.01.2017
comment
Спасибо Джеймсу за ваш feedbaxk. Но я использую тестовую учетную запись. И я хочу вставить записи после успешной оплаты, тогда в чем проблема, когда я заполняю форму и отправляю ее перенаправления на test.payu.ib / _payment. Но он показывает ошибку на странице payumoney на странице оплаты. А также, пожалуйста, скажите мне, как я могу вставить записи после успешной транзакции. Я имею в виду, что если транзакция прошла успешно, могу ли я вставить записи с помощью всего $ this- ›input-› post ..? Пожалуйста, помогите, у меня проблемы здесь .... Thnx   -  person PHP Geek    schedule 29.01.2017
comment
Вы получаете ошибку контрольной суммы или любую другую ошибку? пожалуйста уточни. Я считаю, что у вас есть таблица транзакций для записи всех транзакций с такими полями, как идентификатор транзакции, оплаченная сумма, статус и т. Д. После успешной транзакции обновите свой статус с помощью $ this- ›input-› post ('status'); который возвращается payumoney после проверки хэша возврата. print_r ($ _ ЗАПРОС); на вашем успешном методе поможет вам определить все доходы от payumoney.   -  person Geordy James    schedule 29.01.2017
comment
Спасибо за ваш ответ, актуальная проблема заключается в том, что когда он перенаправляется на страницу входа в pau, он показывает ошибку .... Ошибка на странице ничего не произошло.   -  person PHP Geek    schedule 29.01.2017
comment
Можете ли вы опубликовать изображение страницы ошибки с вашим вопросом для дальнейшего анализа и, пожалуйста, опубликуйте скрытую форму, на которую вы поднимаетесь.   -  person Geordy James    schedule 29.01.2017
comment
Привет, Джеймс, извини за поздний ответ. Теперь ошибка устранена, но я добавил изображение формы выше. Поэтому, пожалуйста, проверьте описание один раз, и, пожалуйста, помогите мне решить проблему. Пожалуйста, предложите мне лучший способ использования codeigniter. Спасибо   -  person PHP Geek    schedule 31.01.2017
comment
Рад слышать, что вы исправили ошибки на странице payumoney. Когда мы отправляем форму, мы также отправляем surl (Sucess url) и furl (Failure url) вместе с формой. Когда транзакция будет успешной, возврат денег будет возвращен на указанный вами адрес (ваш метод Codeigniter Sucess). Print_r ($ _ ЗАПРОС); выписка покажет все сообщения возврата от payumoney. Теперь мой вопрос: действительно ли вы достигли страницы успеха и работает ли инструкция print_r? Если работает, почему вы можете вставлять возвращаемые значения в таблицу?   -  person Geordy James    schedule 31.01.2017
comment
Привет, Джеймс, меня смущает одно. На самом деле я дам вам понять процесс, за которым я следую. Сначала я отправляю вышеуказанную форму со всеми обязательными полями, а затем размещаю все поля на другой странице, например payu / checkout.php, и сохраняю все поля в скрытых полях. но у меня есть ошибка с ошибкой контрольной суммы хэша при перенаправлении на платежный шлюз ... Не могли бы вы помочь.   -  person PHP Geek    schedule 05.02.2017


Ответы (1)


Ответ на ваш последний комментарий. Ошибка контрольной суммы возникает из-за несоответствия хэша. после того, как вы отправите форму на payu / checkout.php, checkout.php отправит форму на https://test.payu.in/_payment (тестовый URL).

Внутри вашего payu / checkout.php

function checkout() {

        $MERCHANT_KEY = "enter your test merchant key here";
        $SALT = "enter your test salt here";

        $txnid = substr(hash('sha256', mt_rand() . microtime()), 0, 20);

        $udf1='';
        $udf2='';
        $udf3='';
        $udf4='';
        $udf5='';

        $hashstring = $MERCHANT_KEY . '|' . $txnid . '|' . $grandtotal . '|' . $productinfo . '|'. $fname . '|' . $email .'|'.$udf1.'|' .$udf2.'|' .$udf3.'|'.$udf4.'|'.$udf5.'||||||'. $SALT;

        $hash = strtolower(hash('sha512', $hashstring));
        $data['hash'] = $hash;

        //Loading checkout view
        $this->load->view('checkout.php');
}

В checkout.php вы должны отправить форму на https://test.payu.in/_payment. со всеми полями, которые я использовал при генерации хэша, кроме соли. Хеш-поле также находится в этой форме.

<form method="post" name="payuForm" action="https://test.payu.in/_payment">

        <input name="key" type="hidden" value="<?php echo $mkey ?>" />
        <input name="txnid" type="hidden"  value="<?php echo $tid ?>" />
        <input type="hidden" name="hash" value="<?php echo $hash ?>"/>

        <input name="amount" type="hidden" value="<?php echo $grandtotal; ?>" />

        <input name="productinfo" type="hidden" value="<?php echo $pinfo;?>">

        <input type="hidden" name="service_provider" value="payu_paisa" size="64" />
        <input name="udf1" type="hidden" value="">
        <input name="udf2" type="hidden" value="">
        <input name="udf3" type="hidden" value="">
        <input name="udf4" type="hidden" value="">
        <input name="udf5" type="hidden" value="">

        <input name="firstname" id="firstname" type="hidden" value="<?php  echo $name; ?>"/>

        <input name="email" id="email"  type="hidden"  value='<?php echo $mailid;?>'>

        <input name="phone"   type="hidden"  value="<?php echo $phoneno; ?>">
        <input name="surl" type="hidden" value="<?php echo base_url('payu/success'); ?>" size="64" />
        <input name="furl" type="hidden" value="<?php echo base_url('payu/fail'); ?>" size="64" />
        <input name="curl" type="hidden" value="<?php echo base_url('payu/cancel'); ?>" />

        <?php
        }
        ?>
        <input type="submit" name="submit_form" value="Click Here for Payment" class="btn btn-info btn-block" >
    </form>

Для получения дополнительной информации не забудьте создать таблицу транзакций с такими полями, как идентификатор транзакции, сумма, временная метка, статус и все поля информации о пользователе. Перед тем, как транзакция начнется, то есть в функции payu / checkout, вам необходимо вставить эту таблицу со статусом инициирован. После успешной транзакции обновите поле статуса этой транзакции до успеха после проверки возвращаемого хеша, если вы заботитесь о взломе (я проверяю обратный хеш, потому что я взломал сайт payumoney для тестирования, и выясняю, что, если я не проверю обратный хеш, моя поддельная транзакция будет быть успешным. )

public function success()
{
    //print_r($_REQUEST);

    $status= $this->input->post('status');

    if($status =='success')
    {
        $txnid = $this->input->post('txnid');
        $amount = $this->input->post('amount');
        $productinfo = $this->input->post('productinfo');
        $firstname = $this->input->post('firstname');
        $hash = $this->input->post('hash');
        $email = $this->input->post('email');
        $udf1 = $this->input->post('udf1');
        $udf2 = $this->input->post('udf2');
        $udf3 = $this->input->post('udf3');
        $udf4 = $this->input->post('udf4');
        $udf5 = $this->input->post('udf5');
        $key = $this->input->post('key');



        $SALT ="Your salt";


        If (isset($_POST["additionalCharges"])) 
        {
            $additionalCharges=$_POST["additionalCharges"];
            $retHashSeq = $additionalCharges.'|'.$SALT . '|' . $status . '|||||||||||' . $email . '|' . $firstname . '|' . $productinfo . '|' . $amount . '|' . $txnid . '|' . $key;
        }else{
            $retHashSeq = $SALT . '|' . $status . '|||||||||||' .$udf5.'|'.$udf4.'|'.$udf3.'|'.$udf2.'|'.$udf1.'|'. $email . '|' . $firstname . '|' . $productinfo . '|' . $amount . '|' . $txnid . '|' . $key;

        }

        $rethash = hash("sha512", $retHashSeq);


        if ($rethash != $hash)
        {
            $data['errmsg'] = " Invalid Transaction . Error Occured";
            //echo "Return Hash failed";
           redirect('payu/err',$data);
        }

       // now begin your custome code if a transaction is success 

    }
person Geordy James    schedule 05.02.2017
comment
Да, Джеймс. Спасибо за вашу поддержку. Я уже сделал это и отправил все значения элемента управления формы из последней формы, но когда оплата прошла успешно, я получил только несколько значений, таких как имя, сумма, адрес электронной почты и телефон. Но у меня тоже много значений в скрытых полях .. Что делать. - person PHP Geek; 05.02.2017
comment
Вы говорите, что ваш платеж прошел успешно, тогда когда вы получаете ошибку контрольной суммы? то есть, если возникает ошибка контрольной суммы, то как сделать платеж успешным. - person Geordy James; 05.02.2017
comment
Нет, я решил эту проблему самостоятельно с вашей постоянной поддержкой. Но теперь я добился успеха, но не смог получить все значение сообщения из скрытой формы. Должен ли я передать все поля в хеш или что-нибудь еще ?? - person PHP Geek; 05.02.2017
comment
На самом деле я не могу получить контрольные значения формы, такие как пароль, город практики и некоторые другие поля. Каким будет точное решение для получения всех полей? Я получаю только такие значения, как имя, адрес электронной почты, контактный номер и информацию о продукте, а также другие учетные данные для оплаты. - person PHP Geek; 05.02.2017
comment
@PHPGeek payumoney не вернет пароль или город практики и т. Д. Вам необходимо сохранить эту информацию перед тем, как начать транзакцию. print_r ($ _ ЗАПРОС); покажет вам возвращенные параметры. Для получения дополнительной информации о возвращаемых параметрах посетите страницы 7 и 8 нижеприведенного документа docdro.id/0UzhnFZ - person Geordy James; 05.02.2017
comment
Итак, где я должен хранить эти значения перед транзакцией, чтобы я мог вставить эти записи после успешной транзакции ... Я думаю, что это может быть не сеанс. - person PHP Geek; 05.02.2017
comment
@PHPGeek Я отредактировал ответ в соответствии с вашими потребностями. Надеюсь, что это поможет вам удовлетворить ваши потребности. - person Geordy James; 05.02.2017
comment
Спасибо за ответ. Но меня смущает то, что я хочу вставить и другие поля, которые находятся в регистрационной форме. - person PHP Geek; 06.02.2017
comment
Тогда где я должен хранить остальную информацию, такую ​​как пароли и страны ... Значит, мне нужно вставить их также после успешной оплаты. - person PHP Geek; 06.02.2017
comment
@PHPGeek Я думаю, вам нравится публиковать еще несколько значений, таких как пароль, город практики и т. Д., А затем сохранять эту информацию в udf1 - udf5 (функция, определяемая пользователем). Когда транзакция будет успешной, payumoney вернет эти значения из udf1 в udf5. Теперь для хранения вы можете сохранить эту информацию перед отправкой формы в payumoney или после того, как payumoey вернется на вашу страницу успеха по вашему выбору. - person Geordy James; 06.02.2017
comment
Спасибо, Джеймс, за ответ. Но я уже подумал об этой идее, но можно ли отправить пароль через udf, а также вернуть его на нашей странице успеха? - person PHP Geek; 06.02.2017
comment
@PHPGeek, да, это безопасно. Payumoney не сохранил ваш пароль или что-либо, что вы отправляете в формате udf. Если вас это беспокоит, вы можете сохранить эту информацию до начала транзакции. - person Geordy James; 06.02.2017
comment
И еще одна вещь, я должен передать их в хеш-строку, и если я их передам, не будет ли она отображать ошибку. - person PHP Geek; 06.02.2017
comment
@PHPGeek да, иначе возникнет ошибка, обратитесь к моему коду, чтобы узнать, как включить udf вместе с хешем. - person Geordy James; 06.02.2017
comment
Я включил значения полей в udf1 - udf8, но показывает ошибку контрольной суммы. - person PHP Geek; 06.02.2017
comment
Да, теперь готово. Спасибо за вашу поддержку ... Большое вам спасибо - person PHP Geek; 07.02.2017
comment
Привет, Джеймс. Возникает проблема, когда я использую постоянные значения в количестве fname и т. Д., Тогда он работает нормально и перенаправляет на шлюз payumoney. Но пока я использую $ this- ›input-› post (''), тогда отображается какая-то ошибка при перенаправлении на payumoney? какая именно проблема я не понимаю точную проблему .. спасибо - person PHP Geek; 11.02.2017
comment
@PHPGeek, можете ли вы опубликовать коды формы вместе со своим вопросом для дальнейшего анализа. Отправка формы блока payumoney с помощью ajax, curl и wget. Вы использовали какой-либо из этих методов? - person Geordy James; 11.02.2017
comment
Привет, @ GeordyJames, отличная работа, но я столкнулся с проблемой при проверке возвращенного хеша и старого хеша. $ retHashSeq = $ СОЛЬ. '|' . $ статус. '|||||||||||' . $ email. '|' . $ firstname. '|' . $ productinfo. '|' . Сумма $. '|' . $ txnid. '|' . $ key;} ($ rethash! = $ hash) ‹< оба не совпадают. Что я должен делать? - person Jaydeep Goswami; 26.06.2017
comment
и почему мы не добавляем $ udf1, $ udf2 и т. д. при вычислении хэша на странице успеха? - person Jaydeep Goswami; 26.06.2017
comment
@JaydeepGoswami udf - это функции, определяемые пользователем. Они используются для передачи дополнительной информации. Это необязательное поле, и обычно во всех моих случаях это просто пустая строка. - person Geordy James; 26.06.2017
comment
@JaydeepGoswami, вы должны добавить udf также при вычислении хэша возврата, если эти поля для вас не пусты. Возвращаемый хеш - это обратный порядок хеширования транзакции. - person Geordy James; 26.06.2017
comment
Я сделал это следующим образом: hashSequence = salt|status||||||udf5|udf4|udf3|udf2|udf1|email|firstname|productinfo|amount|txnid|key Это должно помочь людям в будущем. - person Jaydeep Goswami; 26.06.2017