/**
  * 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;
     }
 }
Exemplo n.º 2
0
 /**
  * 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;
     }
 }