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; } }
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); } } }