示例#1
0
 public function process_refund($order_id, $amount = null, $reason = '')
 {
     global $woocommerce;
     //IMPORTANTE EXCEPTIONS: WooCommerce las capturará y las mostrará en un alert, esta es la herramienta que se dipone para comunicarse con el usuario, he probado con echo y no lo he logrado.
     $logger = $this->_obtain_logger(phpversion(), $woocommerce->version, TODOPAGO_PLUGIN_VERSION, $this->ambiente, $this->getMerchant(), $order_id, true);
     //configuración común a ambos servicios.
     $row = get_post_meta($_GET["order"], 'response_SAR', true);
     $response_SAR = unserialize($row);
     $options_return = array("Security" => $this->getSecurity(), "Merchant" => $this->getMerchant(), "RequestKey" => $response_SAR["URL_Request"]);
     //Intento instanciar la Sdk, si la configuración está mal, le avisará al usuario.
     try {
         $connector = new \TodoPago\Sdk($this->getHttpHeader(), $this->ambiente);
     } catch (Exception $e) {
         $logger->warn("Error al crear el connector, ", $e);
         throw new Exception("Revise la configuarción de TodoPago");
     }
     //throw new exception("Conector creado");
     if (empty($amount)) {
         //Si el amount vieniera vacío hace la devolución total
         $logger->info("Pedido de devolución total pesos de la orden {$order_id}");
         $logger->debug("Params devolución: " . json_encode($options_return));
         //Intento realizar la devolución
         try {
             $return_response = $connector->voidRequest($options_return);
         } catch (Exception $e) {
             $logger->error("Falló al consultar el servicio: ", $e);
             throw new Exception("Falló al consultar el servicio");
         }
     } else {
         $logger->info("Pedido de devolución por {$amount} pesos de la orden {$order_id}");
         $options_return['AMOUNT'] = $amount;
         $logger->debug("Params devolución: " . json_encode($options_return));
         //Intento realizar la devolución
         try {
             $return_response = $connector->returnRequest($options_return);
         } catch (Exception $e) {
             $logger->error("Falló al consultar el servicio: ", $e);
             throw new Exception("Falló al consultar el servicio");
         }
     }
     $logger->debug("return Response: " . json_encode($return_response));
     //Si el servicio no responde según lo esperado, se interrumpe la devolución
     if (!is_array($return_response) || !array_key_exists('StatusCode', $return_response) || !array_key_exists('StatusMessage', $return_response)) {
         throw new Exception("El servicio no responde correctamente");
     }
     if ($return_response['StatusCode'] == TODOPAGO_DEVOLUCION_OK) {
         //retorno true para que Woo tome la devolución
         return true;
     } else {
         throw new Exception($return_response["StatusMessage"]);
         //return false;
     }
 }
示例#2
0
 public function devolver()
 {
     $monto = $_POST["monto"];
     $order_id = $_POST['order_id'];
     $transaction_row = $this->db->query("SELECT request_key FROM `" . DB_PREFIX . "todopago_transaccion` WHERE id_orden={$order_id}");
     $mode = $this->get_mode();
     $authorizationHTTP = $this->get_authorizationHTTP();
     $request_key = $transaction_row->row["request_key"];
     if (empty($request_key)) {
         echo "No es posible hacer devolución sobre esa transacción";
     } else {
         try {
             $connector = new TodoPago\Sdk($authorizationHTTP, $mode);
             $options = array("Security" => $this->get_security_code(), "Merchant" => $this->get_id_site(), "RequestKey" => $request_key, "AMOUNT" => $monto);
             $this->logger->debug(json_encode($options));
             $resp = $connector->returnRequest($options);
             $this->logger->debug(json_encode($resp));
             if ($resp["StatusCode"] == "2011") {
                 $this->load->model("sale/return");
                 $this->model_sale_return->addReturn($this->getReturnValues($order_id, $resp, $options["AMOUNT"]));
                 echo "La devolución ha sido efectuada con éxito";
             } else {
                 echo json_encode($resp);
             }
         } catch (Exception $e) {
             echo json_encode($e);
         }
     }
 }