PageSourceSearch

https://login.drovify.com/assets/RedsysGatewaysPage-pSD4HTwi.js

js drovify.com collected 2026-09-24 14:42:31 UTC 11,949 bytes, 1 lines download raw bytes

1import{r as p,j as e,Y as z,l as v,n as x,bv as y,U as j,a5 as L,A as M,bu as S,bW as G,B as I,gx as D,aY as F,T as C,S as V,bo as A,a_ as _,ep as H,b4 as B,au as O,bh as Y}from"./vendor-react-DYmgHJpk.js";import{a as U,b as W,c as X,u as Q,d as Z}from"./useRedsysGateways-DWBeAT24.js";import{l as k,f as $,ar as J,an as w,V as g,a8 as P,X as ee,ac as ne,ae,af as se,w as oe,M as te}from"./app-platform-_Hc3ObMv.js";import{G as E}from"./shared-runtime-7lE7-_Rt.js";import{eP as re,eQ as R,eO as ie,u as le,cr as ce}from"./app-admin-aIEU-n7j.js";import"./vendor-charts-DVGXfkyZ.js";const de=[{id:"sha512",title:"Clave SHA-512",purpose:"Firma los pagos y verifica las notificaciones. Se prueba con una petición de pago sin tarjeta, que Redsys rechaza sin cobrar nada.",successMessage:"Redsys acepta la firma de pago con esta clave.",failureMessages:{key_missing:"La pasarela no tiene clave SHA-512.",signature_rejected:"Redsys rechaza la firma de pago. Comprueba que es la clave SHA-512 del panel de este comercio.",unexpected_response:"Redsys ha devuelto una respuesta que no reconocemos.",transport_error:"No se ha podido conectar con Redsys. Inténtalo de nuevo en unos minutos."}},{id:"sha256",title:"Clave SHA-256",purpose:"Firma la consulta de operaciones con la que se recuperan los pedidos que se quedaron sin notificación.",successMessage:"Redsys acepta la firma de consulta con esta clave.",failureMessages:{key_missing:'La pasarela no tiene clave SHA-256. Añádela desde "Editar" para poder consultar operaciones.',signature_rejected:"Redsys rechaza la firma de consulta. Comprueba que es la clave SHA-256 del panel de este comercio.",unexpected_response:"Redsys ha devuelto una respuesta que no reconocemos.",transport_error:"No se ha podido conectar con Redsys. Inténtalo de nuevo en unos minutos."}}];function ue(a,i){return i.status==="ok"?a.successMessage:a.failureMessages[i.status]}function me({gateway:a,onClose:i}){const t=U(),[m,r]=p.useState(null),[h,c]=p.useState(!1),s=p.useRef(null),l=async u=>{c(!1);try{r(await t.mutateAsync(u))}catch(d){k.debug("Redsys test connection failed",d),r(null),c(!0)}};p.useEffect(()=>{if(r(null),c(!1),!a){s.current=null;return}s.current!==a.id&&(s.current=a.id,l(a.id))},[a]);const o=t.isPending;return e.jsx(z,{opened:a!==null,onClose:i,title:`Prueba de conexión — ${(a==null?void 0:a.name)??""}`,size:"lg",centered:!0,children:e.jsxs(v,{gap:"md",children:[e.jsxs(x,{size:"sm",c:"dimmed",children:["Comercio ",e.jsx(y,{children:a==null?void 0:a.merchantId})," · terminal ",e.jsx(y,{children:a==null?void 0:a.terminal})," ·"," ",(a==null?void 0:a.environment)==="production"?"producción":"pruebas",". Las dos claves se prueban contra Redsys en cuanto se abre esta ventana; ninguna prueba cobra nada."]}),o&&!m&&e.jsx(j,{justify:"center",py:"lg",children:e.jsx(L,{size:"sm"})}),h&&e.jsx(M,{color:E("poor"),icon:e.jsx(S,{size:16}),p:"xs",children:e.jsx(x,{size:"xs",children:"No se pudo completar la prueba. Inténtalo de nuevo."})}),m&&de.map(u=>{const d=m[u.id];return e.jsxs(v,{gap:6,p:"sm",style:{border:"1px solid var(--app-color-card-border)",borderRadius:9},children:[e.jsx(x,{size:"sm",fw:600,children:u.title}),e.jsx(x,{size:"xs",c:"dimmed",children:u.purpose}),e.jsx(M,{color:E(d.success?"good":"poor"),icon:d.success?e.jsx(G,{size:16}):e.jsx(S,{size:16}),p:"xs",children:e.jsxs(x,{size:"xs",children:[!d.success&&d.errorCode&&e.jsx(y,{children:d.errorCode})," ",ue(u,d)]})})]},u.id)}),e.jsxs(j,{justify:"flex-end",children:[e.jsx(I,{variant:"subtle",onClick:i,children:"Cerrar"}),e.jsx(I,{variant:"light",color:"brand",leftSection:e.jsx(D,{size:14}),loading:o,onClick:()=>a&&void l(a.id),children:"Volver a probar"})]})]})})}function q({value:a,onChange:i,placeholder:t="Selecciona una cuenta",required:m=!1,searchable:r=!0,expandedOptions:h=null,...c}){const{data:s,isLoading:l}=re(),u=((s==null?void 0:s.financialAccounts)||[]).map(d=>({value:d.id,label:d.name}));return e.jsx($,{data:u,value:a,onChange:i||(()=>{}),placeholder:l?"Cargando cuentas...":t,required:m,searchOptions:r?{enabled:!0,placeholder:"Buscar cuentas..."}:null,disabled:l,allowDeselect:!1,expandedOptions:h,...c})}q.displayName="AccountSelect";const T={name:"",merchantId:"",terminal:"",environment:"test",sha512Key:"",sha256Key:"",paymentMethodId:"",financialAccountId:"",b
1izumEnabled:!1,bizumPaymentMethodId:"",scopeNodes:[]};function N(a){for(const i of a){if(i.canWrite)return i.id;const t=N(i.children);if(t)return t}return null}function pe({isOpen:a,onClose:i,gateway:t,isFirstGateway:m}){const r=!!t,h=W(),c=X(),{data:s}=J({enabled:m&&!t}),l=p.useMemo(()=>!m||t?null:N((s==null?void 0:s.divisions)??[]),[m,t,s]),o=F({initialValues:T,validate:{name:n=>n?null:"El nombre es obligatorio",merchantId:n=>n?null:"El Merchant ID es obligatorio",terminal:n=>n?null:"El terminal es obligatorio",sha512Key:n=>!r&&!n?"La clave SHA-512 es obligatoria":null,paymentMethodId:n=>n?null:"Selecciona un método de pago",financialAccountId:n=>n?null:"Selecciona una cuenta",bizumPaymentMethodId:(n,b)=>b.bizumEnabled&&!n?"Selecciona un método de pago para Bizum":null,scopeNodes:n=>n.length===0?"Selecciona al menos un destino":null}});p.useEffect(()=>{a&&(t?o.setValues({name:t.name,merchantId:t.merchantId,terminal:t.terminal,environment:t.environment,sha512Key:"",sha256Key:"",paymentMethodId:t.paymentMethodId,financialAccountId:t.financialAccountId,bizumEnabled:t.bizumEnabled,bizumPaymentMethodId:t.bizumPaymentMethodId??"",scopeNodes:t.assignments.map(n=>({type:n.type,scopeId:n.scopeId}))}):o.setValues({...T,scopeNodes:l?[{type:"DIVISION",scopeId:l}]:[]}),o.resetDirty())},[a,t,l]);const u=async n=>{const b={name:n.name,merchantId:n.merchantId,terminal:n.terminal,environment:n.environment,sha512Key:n.sha512Key||null,sha256Key:n.sha256Key||null,paymentMethodId:n.paymentMethodId,financialAccountId:n.financialAccountId,bizumEnabled:n.bizumEnabled,bizumPaymentMethodId:n.bizumEnabled?n.bizumPaymentMethodId:null,assignments:n.scopeNodes.map(f=>({type:f.type,scopeId:f.scopeId}))};try{t?await c.mutateAsync({id:t.id,payload:b}):await h.mutateAsync(b),i(),o.reset()}catch(f){k.debug("Redsys gateway mutation error handled by hook",f)}},d=()=>{i(),o.reset()};return e.jsx(z,{opened:a,onClose:d,title:r?"Editar pasarela":"Crear pasarela",size:"lg",centered:!0,children:e.jsx("form",{onSubmit:o.onSubmit(u),children:e.jsxs(v,{children:[e.jsx(C,{label:"Nombre",placeholder:"Ej: Redsys principal",required:!0,...o.getInputProps("name")}),e.jsxs(j,{grow:!0,children:[e.jsx(C,{label:"Merchant ID",placeholder:"999999999",maxLength:9,required:!0,...o.getInputProps("merchantId")}),e.jsx(C,{label:"Terminal",placeholder:"001",maxLength:3,required:!0,...o.getInputProps("terminal")})]}),e.jsx(V,{label:"Entorno",description:"Pruebas para desarrollo, Producción para operaciones reales.",data:[{value:"test",label:"Pruebas"},{value:"production",label:"Producción"}],allowDeselect:!1,required:!0,...o.getInputProps("environment")}),e.jsx(A,{label:"Clave SHA-512",description:r?"Firma los pagos y las notificaciones. Déjala vacía para mantener la actual.":"Clave SHA-512 del panel de Redsys. Firma los pagos y las notificaciones; se guarda cifrada y no se mostrará después.",placeholder:r?"•••••••• (sin cambios)":"••••••••",required:!r,...o.getInputProps("sha512Key")}),e.jsx(A,{label:"Clave SHA-256",description:r?"Firma la consulta de operaciones con la que se recuperan los pedidos sin notificación. Déjala vacía para mantener la actual.":"Clave SHA-256 del panel de Redsys. Firma la consulta de operaciones con la que se recuperan los pedidos sin notificación.",placeholder:r?"•••••••• (sin cambios)":"••••••••",...o.getInputProps("sha256Key")}),e.jsx(q,{label:"Cuenta",description:"Cuenta donde se registrarán los ingresos.",value:o.values.financialAccountId,onChange:n=>o.setFieldValue("financialAccountId",n||""),error:o.errors.financialAccountId,required:!0}),e.jsx(R,{label:"Método de pago para cobros con tarjeta",value:o.values.paymentMethodId,onChange:n=>o.setFieldValue("paymentMethodId",n||""),error:o.errors.paymentMethodId,required:!0,clearable:!1}),e.jsx(_,{label:"Aceptar también pagos con Bizum",description:"Tus alumnos podrán elegir entre tarjeta y Bizum al pagar online.",checked:o.values.bizumEnabled,onChange:n=>o.setValues({bizumEnabled:n.currentTarget.checked,bizumPaymentMethodId:n.currentTarget.checked?o.values.bizumPaymentMethodId:""})}),o.values.bizumEnabled&&e.jsx(R,{label:"Método de pago para cobros con Bizum",value:o.values.bizumPaymentMethodId,onChange:n=>o.setFieldValue("bizumPaymentMethodId",n||""),error:o.errors.bizumPaymentMethodId,required:!0,clearable:!1}),e.jsx(w,{multiple:!0,label:"Dónde se usa",description:"Divisiones o secciones que cobrarán con esta pasarela",required:!0,allowedScopeTypes:["DIVISION","SECTION"],value:o.values.scopeNodes,onChange:n=>o.setFieldValue("scopeNodes",n),error:o.errors.scopeNodes}),e.jsxs(j,{justify:"flex-end",mt:"md",children:[e.jsx(I,{variant:"subtle",onClick:d,children:"Cancelar"}
1),e.jsx(I,{type:"submit",loading:h.isPending||c.isPending,color:"brand",children:r?"Guardar cambios":"Crear pasarela"})]})]})})})}function he({gateways:a,isLoading:i,onEdit:t,onDelete:m,onTestConnection:r}){const h=p.useMemo(()=>[g({accessorKey:"name",id:"name",header:"Nombre",value:s=>s.name,min:180}),g({accessorKey:"merchantId",id:"merchantId",header:"Comercio",value:s=>s.merchantId,min:110,max:150}),g({accessorKey:"terminal",id:"terminal",header:"Terminal",value:s=>s.terminal,min:95,max:120}),P({accessorKey:"environment",id:"environment",header:"Entorno",min:130,tone:s=>s.environment==="production"?"good":"alert",label:s=>s.environment==="production"?"Producción":"Pruebas"}),P({accessorKey:"bizumEnabled",id:"bizumEnabled",header:"Bizum",min:90,tone:s=>s.bizumEnabled?"good":"neutral",label:s=>s.bizumEnabled?"Sí":"No"}),{accessorKey:"assignments",id:"assignments",header:"Dónde se usa",size:220,grow:!1,Cell:({row:s})=>e.jsx(ie,{nodes:s.original.assignments.map(l=>({type:l.type,scopeId:l.scopeId,name:l.name}))})}],[]),c=ee({columns:h,data:a,onRowClick:t,enableRowActions:!0,initialState:{pagination:{pageIndex:0,pageSize:100}},renderRowActionMenuItems:({row:s})=>e.jsx(ne,{actions:[ae(()=>t(s.original)),{id:"test-connection",label:"Probar conexión",icon:e.jsx(D,{size:16}),onClick:()=>r(s.original)},se(()=>m(s.original))]}),rowCount:a.length,state:{isLoading:i}});return p.useLayoutEffect(()=>{c.setColumnOrder(H(c.options))},[h,c]),e.jsx(B,{table:c})}function be(a){return e.jsx(he,{...a})}function ge(){le("Pagos online");const{gateways:a,isLoading:i}=Q(),t=Z(),[m,r]=p.useState(!1),[h,c]=p.useState(null),[s,l]=p.useState(null),[o,u]=p.useState(null),d=()=>{c(null),r(!0)},n=K=>{c(K),r(!0)},b=()=>{r(!1),c(null)},f=()=>{s&&t.mutate(s.id,{onSuccess:()=>l(null)})};return e.jsxs(oe,{helpArticle:{slug:ce.ONLINE_PAYMENTS,topic:"los pagos online"},title:"Pagos online",description:"Define una o más pasarelas Redsys y asígnalas a divisiones o secciones.",backButton:{label:"Integraciones",to:"/settings?tab=integrations",icon:e.jsx(Y,{size:16})},actionButton:{label:"Crear pasarela",onClick:d,icon:e.jsx(O,{size:16})},children:[e.jsx(te,{children:e.jsx(be,{gateways:a,isLoading:i,onEdit:n,onDelete:l,onTestConnection:u})}),e.jsx(me,{gateway:o,onClose:()=>u(null)}),e.jsx(pe,{isOpen:m,onClose:b,gateway:h,isFirstGateway:a.length===0}),e.jsxs(z,{opened:s!==null,onClose:()=>l(null),title:"Eliminar pasarela",centered:!0,children:[e.jsxs(x,{size:"sm",mb:"md",children:["Se eliminará la pasarela «",s==null?void 0:s.name,"» y sus asignaciones. Las secciones afectadas dejarán de ofrecer pago online salvo que hereden otra pasarela."]}),e.jsxs(j,{justify:"flex-end",children:[e.jsx(I,{variant:"subtle",onClick:()=>l(null),children:"Cancelar"}),e.jsx(I,{color:"red",onClick:f,loading:t.isPending,children:"Eliminar"})]})]})]})}export{ge as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.