/** * Check for PayTpv IPN Response * */ function check_paytpv_resquest() { if (!isset($_REQUEST['tpvLstr'])) { return; } if (isset($_REQUEST['Order'])) { $datos_order = explode("_", $_REQUEST['Order']); // En los pagos de suscripcion viene {id_order}_{numpago} $ref = $datos_order[0]; $order = new WC_Order((int) substr($ref, 0, 8)); } if ($_REQUEST['tpvLstr'] == 'pay' && $order->status != 'completed') { //PAGO CON TARJETA GUARDADA $card = $_POST['card']; $saved_card = PayTPV::savedCard($order->user_id, $card); // Verificar contraseña usuario. if ($this->commerce_password && !$this->validPassword($order->user_id, $_POST['commerce_password'])) { if (!$this->validPassword($order->user_id, $_POST['commerce_password'])) { $url = add_query_arg('order', $order->id, add_query_arg('key', $order->order_key, get_permalink(woocommerce_get_page_id('pay')))); if (function_exists('wc_add_notice')) { wc_add_notice(__('Invalid commerce password', 'wc_paytpv'), 'error'); } else { // WC < 2.1 $woocommerce->add_error(__('Invalid commerce password', 'wc_paytpv')); $woocommerce->set_messages(); } wp_redirect($url, 303); exit; } } // Obtenemos el terminal para el pedido $arrTerminalData = $this->TerminalCurrency($order); $importe = $arrTerminalData["importe"]; $currency_iso_code = $arrTerminalData["currency_iso_code"]; $term = $arrTerminalData["term"]; $pass = $arrTerminalData["pass"]; $paytpv_order_ref = $order->id; $secure_pay = $this->isSecureTransaction($order, $arrTerminalData, $card, $saved_card["paytpv_iduser"]) ? 1 : 0; // PAGO SEGURO redireccionamos if ($secure_pay) { $URLOK = $this->get_return_url($order); $URLKO = $order->get_cancel_order_url(); $OPERATION = "109"; //exec_purchase_token $signature = md5($this->clientcode . $saved_card["paytpv_iduser"] . $saved_card["paytpv_tokenuser"] . $term . $OPERATION . $paytpv_order_ref . $importe . $currency_iso_code . md5($pass)); $fields = array('MERCHANT_MERCHANTCODE' => $this->clientcode, 'MERCHANT_TERMINAL' => $term, 'OPERATION' => $OPERATION, 'LANGUAGE' => $this->_getLanguange(), 'MERCHANT_MERCHANTSIGNATURE' => $signature, 'MERCHANT_ORDER' => $paytpv_order_ref, 'MERCHANT_AMOUNT' => $importe, 'MERCHANT_CURRENCY' => $currency_iso_code, 'IDUSER' => $saved_card["paytpv_iduser"], 'TOKEN_USER' => $saved_card["paytpv_tokenuser"], '3DSECURE' => $secure_pay, 'URLOK' => $URLOK, 'URLKO' => $URLKO); $query = http_build_query($fields); $salida = $this->getIframeUrl($secure_pay) . $query; header('Location: ' . $salida); exit; } // PAGO NO SEGURO -------------------------------------------------------------------------- // Test Mode if ($this->environment == 1) { $charge['DS_RESPONSE'] = 1; $order->add_order_note(__('PayTpv payment completed', 'woocommerce')); $_REQUEST['AuthCode'] = 'Test_mode'; $order->payment_complete($_REQUEST['AuthCode']); update_post_meta((int) $order->id, 'PayTPV_Referencia', __('Test Mode. Not Real Payment', 'wc_paytpv')); } else { $client = $this->get_client(); $charge = $client->execute_purchase($order, $saved_card["paytpv_iduser"], $saved_card["paytpv_tokenuser"], $term, $pass, $currency_iso_code, $importe, $paytpv_order_ref); } if ((int) $charge['DS_RESPONSE'] == 1) { // Se procesa en la notificacion /* $order->add_order_note( __( 'PayTpv payment completed', 'woocommerce' ) ); $order->payment_complete($charge[ 'DS_MERCHANT_AUTHCODE' ]); update_post_meta( ( int ) $order->id, 'PayTPV_Referencia', $charge[ 'DS_MERCHANT_ORDER' ]); */ update_post_meta((int) $order->id, 'PayTPV_IdUser', $saved_card["paytpv_iduser"]); update_post_meta((int) $order->id, 'PayTPV_TokenUser', $saved_card["paytpv_tokenuser"]); $url = $this->get_return_url($order); } else { $url = $order->get_cancel_order_url(); } wp_redirect($url, 303); } if ($_REQUEST['tpvLstr'] == 'notify' && isset($_POST["TransactionType"])) { //NOTIFICACIÓN switch ($_POST["TransactionType"]) { // add_User case 107: $terminal = $this->paytpv_terminals[0]; $term = $terminal["term"]; $pass = $terminal["pass"]; $user_id = $_POST["Order"]; $DateTime = isset($_POST['DateTime']) ? $_POST['DateTime'] : ""; $Signature = isset($_POST['Signature']) ? $_POST['Signature'] : ""; $SIGNATURE = md5($this->clientcode . $term . $_POST["TransactionType"] . $_POST['Order'] . $DateTime . md5($pass)); if ($_REQUEST['TransactionType'] == '107' && $_REQUEST['Response'] == 'OK' && ($Signature == $SIGNATURE || $this->environment == 1)) { if (isset($_REQUEST['IdUser'])) { // Save User Card $result = $this->saveCard(null, $user_id, $_REQUEST['IdUser'], $_REQUEST['TokenUser'], $_POST["TransactionType"]); } } // Modo Test if ($this->environment == 1) { $res["urlok"] = wc_get_page_permalink('myaccount'); print json_encode($res); exit; } print "Notificacion Procesada"; exit; break; // execute_purchase // execute_purchase case 1: case 109: $arrTerminalData = $this->TerminalCurrency($order); $currency_iso_code = $arrTerminalData["currency_iso_code"]; $term = $arrTerminalData["term"]; $pass = $arrTerminalData["pass"]; $AMOUNT = round($order->get_total() * 100); $mensaje = $this->clientcode . $term . $_REQUEST['TransactionType'] . $_REQUEST['Order'] . $_REQUEST['Amount'] . $currency_iso_code; $SIGNATURE = md5($mensaje . md5($pass) . $_REQUEST['BankDateTime'] . $_REQUEST['Response']); if (($_REQUEST['TransactionType'] == '1' || $_REQUEST['TransactionType'] == '109') && $_REQUEST['Response'] == 'OK' && ($_REQUEST['ExtendedSignature'] == $SIGNATURE || $this->environment == 1)) { if (isset($_REQUEST['IdUser'])) { $save_card = get_post_meta((int) $order->id, 'paytpv_savecard', true); if ($save_card !== "0") { // Save User Card $result = $this->saveCard($order, $order->user_id, $_REQUEST['IdUser'], $_REQUEST['TokenUser'], $_POST["TransactionType"]); $paytpv_iduser = $result["paytpv_iduser"]; $paytpv_tokenuser = $result["paytpv_tokenuser"]; } else { $paytpv_iduser = $_REQUEST['IdUser']; $paytpv_tokenuser = $_REQUEST['TokenUser']; } update_post_meta((int) $order->id, 'PayTPV_IdUser', $paytpv_iduser); update_post_meta((int) $order->id, 'PayTPV_TokenUser', $paytpv_tokenuser); } $order->add_order_note(__('PayTpv payment completed', 'woocommerce')); $order->payment_complete($_REQUEST['AuthCode']); update_post_meta((int) $order->id, 'PayTPV_Referencia', $_REQUEST['Order']); // Modo Test if ($this->environment == 1) { $url = $this->get_return_url($order); $res["urlok"] = $url; print json_encode($res); exit; } print "Notificacion Procesada"; } else { print "Notificacion NO Procesada"; } break; } print "Error"; exit; } // Save Card in execute_purchase if ($_REQUEST['tpvLstr'] == 'savecard') { //NOTIFICACIÓN update_post_meta((int) $order->id, 'paytpv_savecard', $_POST["paytpv_agree"]); exit; } // Save Card Description if ($_REQUEST['tpvLstr'] == 'saveDesc') { //NOTIFICACIÓN $card_desc = $_POST["card_desc"]; $id_card = $_GET["id"]; $saved_cards = Paytpv::saveCardDesc($id_card, $card_desc); $res["resp"] = 0; print json_encode($res); exit; } // Remove User Card if ($_REQUEST['tpvLstr'] == 'removeCard') { //NOTIFICACIÓN $id_card = $_GET["id"]; $saved_cards = Paytpv::removeCard($id_card); $res["resp"] = 0; print json_encode($res); exit; } // Load Test Mode iframe Payment if ($_REQUEST['tpvLstr'] == 'testmode') { //NOTIFICACIÓN $dsecure = isset($_REQUEST["dsecure"]) ? $_REQUEST["dsecure"] : ""; if ($dsecure == 1) { print wc_get_template('payment_3ds_test.php', array(), '', PAYTPV_PLUGIN_DIR . 'template/'); } else { print wc_get_template('payment_test_mode.php', array(), '', PAYTPV_PLUGIN_DIR . 'template/'); } exit; } // Check Test Mode Card if ($_REQUEST['tpvLstr'] == 'checkcard') { //NOTIFICACIÓN // add_user if ($_POST['TransactionType'] == 107) { $secure_pay = 0; } else { // Obtenemos el terminal para el pedido $arrTerminalData = $this->TerminalCurrency($order); $secure_pay = $this->isSecureTransaction($order, $arrTerminalData, 0, 0) ? 1 : 0; } $res["dsecure"] = $secure_pay; if ($secure_pay == 1) { sleep(2); } // Test Mode $res["checked"] = 0; $arrTestCard = array(5325298401138208, 5540568785541245, 5407696658785988); $mm = 5; $yy = 20; $merchan_cvc2 = 123; if (in_array($_POST["merchan_pan"], $arrTestCard) && $_POST["mm"] == $mm && $_POST["yy"] == $yy && $_POST["merchan_cvc2"] == $merchan_cvc2) { $res["checked"] = 1; } print json_encode($res); exit; } print "Error Notificacion"; exit; }