/** * Check for valid paytm server callback // response processing // **/ function check_paytm_response() { global $woocommerce; if (isset($_POST['ORDERID']) && isset($_POST['RESPCODE'])) { $order_sent = $_POST['ORDERID']; $responseDescription = $_POST['RESPMSG']; if (version_compare(WOOCOMMERCE_VERSION, '2.0.0', '>=')) { $order = new WC_Order($_POST['ORDERID']); } else { $order = new woocommerce_order($_POST['ORDERID']); } if ($this->log == "yes") { error_log("Response Code = " . $_POST['RESPCODE']); } $redirect_url = $this->redirect_page_id == "" || $this->redirect_page_id == 0 ? get_site_url() . "/" : get_permalink($this->redirect_page_id); $this->msg['class'] = 'error'; $this->msg['message'] = "Thank you for shopping with us. However, the transaction has been Failed For Reason : " . $responseDescription; if ($_POST['RESPCODE'] == 01) { // success $order_amount = $order->order_total; if ($_POST['TXNAMOUNT'] == $order_amount) { if ($this->log == "yes") { error_log("amount matched"); } // code by paytm team $order_sent = $_POST['ORDERID']; $res_code = $_POST['RESPCODE']; $responseDescription = $_POST['RESPMSG']; $checksum_recv = $_POST['CHECKSUMHASH']; $paramList = $_POST; $order_amount = $_POST['TXNAMOUNT']; // code by paytm team $all = $paramList; if ($this->log == "yes") { error_log("received parameters = " . $all); } $bool = "FALSE"; $bool = verifychecksum_e($paramList, $this->secret_key, $checksum_recv); //$newcheck = Checksum::calculateChecksum($this->secret_key, $all); if ($this->log == "yes") { error_log("calculated checksum = " . $newch . " and checksum received = " . $_POST['CHECKSUMHASH']); } if ($bool == "TRUE") { if ($order->status !== 'completed') { error_log("SUCCESS"); $this->msg['message'] = "Thank you for your order . Your transaction has been successful."; $this->msg['class'] = 'success'; if ($order->status == 'processing') { } else { $order->payment_complete(); $order->add_order_note('Mobile Wallet payment successful'); $order->add_order_note($this->msg['message']); $woocommerce->cart->empty_cart(); } } } else { // server to server failed while call// //error_log("api process failed"); $this->msg['class'] = 'error'; $this->msg['message'] = "Severe Error Occur."; $order->update_status('failed'); $order->add_order_note('Failed'); $order->add_order_note($this->msg['message']); } } else { // Order mismatch occur // //error_log("order mismatch"); $this->msg['class'] = 'error'; $this->msg['message'] = "Order Mismatch Occur"; $order->update_status('failed'); $order->add_order_note('Failed'); $order->add_order_note($this->msg['message']); } } else { $order->update_status('failed'); $order->add_order_note('Failed'); $order->add_order_note($responseDescription); $order->add_order_note($this->msg['message']); } add_action('the_content', array(&$this, 'paytmShowMessage')); $redirect_url = $this->redirect_page_id == "" || $this->redirect_page_id == 0 ? get_site_url() . "/" : get_permalink($this->redirect_page_id); //For wooCoomerce 2.0 $redirect_url = add_query_arg(array('msg' => urlencode($this->msg['message']), 'type' => $this->msg['class']), $redirect_url); wp_redirect($redirect_url); exit; } }
/** * Successful Payment! **/ function successful_request($posted) { // Custom holds post ID if (!empty($posted['custom']) && !empty($posted['invoice'])) { $order = new woocommerce_order((int) $posted['custom']); if ($order->order_key !== $posted['invoice']) { exit; } // Sandbox fix if ($posted['test_ipn'] == 1 && $posted['payment_status'] == 'Pending') { $posted['payment_status'] = 'completed'; } // We are here so lets check status and do actions switch (strtolower($posted['payment_status'])) { case 'completed': // Check order not already completed if ($order->status == 'completed') { exit; } // Check valid txn_type $accepted_types = array('cart', 'instant', 'express_checkout', 'web_accept', 'masspay', 'send_money'); if (!in_array(strtolower($posted['txn_type']), $accepted_types)) { exit; } // Payment completed $order->add_order_note(__('IPN payment completed', 'woothemes')); $order->payment_complete(); // Store PP Details update_post_meta((int) $posted['custom'], 'Payer PayPal address', $posted['payer_email']); update_post_meta((int) $posted['custom'], 'Transaction ID', $posted['txn_id']); update_post_meta((int) $posted['custom'], 'Payer first name', $posted['first_name']); update_post_meta((int) $posted['custom'], 'Payer last name', $posted['last_name']); update_post_meta((int) $posted['custom'], 'Payment type', $posted['payment_type']); break; case 'denied': case 'expired': case 'failed': case 'voided': // Order failed $order->update_status('failed', sprintf(__('Payment %s via IPN.', 'woothemes'), strtolower($posted['payment_status']))); break; case "refunded": case "reversed": case "chargeback": // Mark order as refunded $order->update_status('refunded', sprintf(__('Payment %s via IPN.', 'woothemes'), strtolower($posted['payment_status']))); $message = woocommerce_mail_template(__('Order refunded/reversed', 'woothemes'), sprintf(__('Order #%s has been marked as refunded - PayPal reason code: %s', 'woothemes'), $order->id, $posted['reason_code'])); // Send the mail woocommerce_mail(get_option('woocommerce_new_order_email_recipient'), sprintf(__('Payment for order #%s refunded/reversed', 'woothemes'), $order->id), $message); break; default: // No action break; } exit; } }