119 def create_preference(self, items, external_reference, payer_email=None, notification_url=None, back_urls=None):
121 Crea una preferencia de pago en Mercado Pago y verifica que esté activa antes de devolver la URL
127 "external_reference": str(external_reference),
128 "back_urls": back_urls
if back_urls
else {
129 "success":
"https://ispcfood.netlify.app/exito",
130 "failure":
"https://ispcfood.netlify.app/error",
131 "pending":
"https://ispcfood.netlify.app/pendiente"
133 "auto_return":
"approved"
136 if notification_url
and not (notification_url.startswith(
'http://127.0.0.1')
or notification_url.startswith(
'http://localhost')):
137 preference_data[
"notification_url"] = notification_url
139 logger.info(f
"No se envía notification_url a Mercado Pago por ser local: {notification_url}")
142 preference_data[
"payer"] = {
145 logger.info(f
"Creando preferencia de pago: {preference_data}")
146 preference_response = self.
sdk.preference().create(preference_data)
147 logger.info(f
"Respuesta cruda de Mercado Pago al crear preferencia: {preference_response}")
149 if preference_response.get(
'status') != 201:
150 logger.error(f
"Error al crear preferencia: status {preference_response.get('status')}, detalle: {preference_response.get('response')}")
152 pref = preference_response[
"response"]
154 pref_id = pref.get(
"id")
156 status_resp = self.
sdk.preference().get(pref_id)
157 status_value = status_resp[
"response"].get(
"status")
158 if status_value
is not None and status_value !=
"active":
159 logger.error(f
"Preferencia {pref_id} no está activa: {status_value}")
162 except Exception
as e:
163 logger.exception(f
"Error al crear preferencia de pago: {str(e)}")