Problemas con un formulario de TPV

29 views
Skip to first unread message

Iago Otero

unread,
Feb 9, 2022, 9:48:45 AM2/9/22
to djan...@googlegroups.com
Me dicen que rellene este formulario, el problema que tengo es en el NumOperacion...que se genera aleatoriamente...con numeros y letras...y con la FIRMA, que debe ser calculada segun unos parametros.

<FORM ACTION=" https://pgw.ceca.es/tpvweb/tpv/compra.action" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded">
<INPUT NAME="MerchantID" TYPE=hidden VALUE=“##MerchantID##”>
<INPUT NAME="AcquirerBIN" TYPE=hidden VALUE=“##AcquirerBIN##”>
<INPUT NAME="TerminalID" TYPE=hidden VALUE=“##TerminalID##”>
<INPUT NAME="URL_OK" TYPE=hidden VALUE=“##URL_OK##”>
<INPUT NAME="URL_NOK" TYPE=hidden VALUE=“##URL_NOK##”>
<INPUT NAME="Firma" TYPE=hidden VALUE=“##Firma##”>
<INPUT NAME="Cifrado" TYPE=hidden VALUE=“SHA2”>
<INPUT NAME="Num_operacion" TYPE=hidden VALUE=“##Num_operacion##”>
<INPUT NAME="Importe" TYPE=hidden VALUE=“##Importe##”>
<INPUT NAME="TipoMoneda" TYPE=hidden VALUE=“978”>
<INPUT NAME="Exponente" TYPE=hidden VALUE=“2”>
<INPUT NAME="Pago_soportado" TYPE=hidden VALUE=“SSL”>
<INPUT NAME="Idioma” TYPE=hidden VALUE=“1”>
<INPUT NAME="datos_acs_20” TYPE=hidden VALUE=”## datos_acs_20 ##”>
<INPUT NAME="firma_acs_20” TYPE=hidden VALUE=”## firma_acs_20##”>
<CENTER>
<INPUT TYPE="submit" VALUE="Comprar">
</CENTER>
</FORM>

La cuestion es la siguiente. en el formulario HTML he quitado los campos IMPORTE,FIRMA y NUMOPERACION, y los he añadido  en el formulario basado en django. tal como veis. Se que me vais a decir que Num_Operacion lleva raya baja, pero ya lo he probado y tampoco lo rellena.

class destacar_perf(forms.ModelForm):
Importe=forms.CharField(label='Importe',widget=forms.HiddenInput)
Firma=forms.CharField(label='Firma',widget=forms.HiddenInput)
NumOperacion=forms.CharField(label='Num_Operacion',widget=forms.HiddenInput)
class Meta:
model=PERFIL_DESTACADO
exclude=['usu','slug','Firma','Num_Operacion','Importe','tipo_nego','visibilidad','top_lista','urgente','fecha_cre_dias','fecha_cierre_dias','fecha_cre_TOP','fecha_cierre_TOP','fecha_cre_imp','fecha_cierre_imp',]
fields='__all__'
Ahora asi...en la view...como he hecho otras tantas veces,
cuando el formulario es valido..rellenaria el 
form.instance.Firma 
form.instance.Num_Operacion
y el form.instance.Importe

y creo que esto es la forma correcta. Sin embargo los campos le llegan vacios
Basicamente calcula el importe...y genera la firma y el numero de operacion.

en la view tengo tal que asi.

class dest_perfil(CreateView):
model = PERFIL_DESTACADO
template_name = 'perfil_D.html'
form_class = destacar_perf
success_url = reverse_lazy('Options')

def form_valid(self, form):
# obtienes el usuario logueado
user = self.request.user
# cargas el perfil utilizando el usuario según sea tu modelo
form.instance.usu = user
form.instance.tipo_nego = Perfil.objects.get(pk=self.request.user.pk).tipo_nego
importe=000


if form.instance.dias == '7 dias(precio:3€)':
fch_close = form.instance.fecha_cre_dias + datetime.timedelta(days=7)
form.instance.fecha_cierre_dias = fch_close
d7=True
importe=importe+300
if form.instance.dias == '15 dias(precio:5€)':
fch_close = form.instance.fecha_cre_dias + datetime.timedelta(days=15)
form.instance.fecha_cierre_dias = fch_close
d15=True
importe=importe+500
if form.instance.dias == '30 dias(precio:10€)':
fch_close = form.instance.fecha_cre_dias + datetime.timedelta(days=30)
form.instance.fecha_cierre_dias = fch_close
d30=True
importe=importe+1000
if form.instance.dias == '60 dias(precio:20€)':
fch_close = form.instance.fecha_cre_dias + datetime.timedelta(days=60)
form.instance.fecha_cierre_dias = fch_close
d60=True
importe=importe+2000

if form.instance.top == '7 dias(precio:3€)':
fch_close = form.instance.fecha_cre_TOP + datetime.timedelta(days=7)
form.instance.fecha_cierre_TOP = fch_close
t7=True
importe=importe+300
if form.instance.top == '15 dias(precio:5€)':
fch_close = form.instance.fecha_cre_TOP + datetime.timedelta(days=15)
form.instance.fecha_cierre_TOP = fch_close
t15=True
importe=importe+500
if form.instance.top == '30 dias(precio:10€)':
fch_close = form.instance.fecha_cre_TOP + datetime.timedelta(days=30)
form.instance.fecha_cierre_TOP = fch_close
t30=True
importe=importe+1000
if form.instance.top == '60 dias(precio:20€)':
fch_close = form.instance.fecha_cre_TOP + datetime.timedelta(days=60)
form.instance.fecha_cierre_TOP = fch_close
t60=True
importe=importe+2000


if form.instance.importante == '2 meses(precio 5€)':
fch_close = form.instance.fecha_cre_imp + datetime.timedelta(days=60)
form.instance.fecha_cierre_imp = fch_close
i2=True
importe=importe+500


# cargas el perfil utilizando el usuario según sea tu modelo
form.instance.usu = user
form.instance.Importe=importe
clave='XXXXXX'
merchant='XXXXXXXX'
acquirer='XXXXXXXXX'
terminal='XXXXXXX'
tipo_mon='978'
exp='2'
cifrado='SHA2'
form.instance.Num_Operacion ='A'.join(random.choice(string.ascii_letters + string.digits) for _ in range(25))
form.instance.Firma=SHA256(clave.join(merchant).join(acquirer).join(terminal).join(form.instance.Num_Operacion).join(form.instance.Firma).join(tipo_mon).join(exp).join(cifrado))
return super().form_valid(form) No me cabe en la cabeza por que no va...¿Estoy haciendo bien la generacion
del Num de Operacion?, asi con los join?asi como la clave?

Ayuda please, solo me queda acabar con esto para terminar este trabajo

carlos

unread,
Feb 9, 2022, 7:39:14 PM2/9/22
to djan...@googlegroups.com
Hola, pero estos 3 campos los estás excluyendo? Proba ver si los imprime bien en consola o bien en la plantilla.
te hablo por esta línea. o proba quitarlos del exclude y proba guardar
exclude=['usu','slug','Firma','Num_Operacion','Importe',
'tipo_nego','visibilidad','top_lista',
'urgente','fecha_cre_dias','fecha_cierre_dias',
'fecha_cre_TOP','fecha_cierre_TOP',
'fecha_cre_imp','fecha_cierre_imp',
]

saludos

--
--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.
---
Has recibido este mensaje porque estás suscrito al grupo "Django-es" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a django-es+...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/django-es/CAJ_xkVJ%2BTNufAdpXM9vPWd593eQMJQwjZ0wuY3cJ_umjWnE-xw%40mail.gmail.com.


--
att.
Carlos Rocha

Iago Otero

unread,
Feb 10, 2022, 2:59:19 PM2/10/22
to djan...@googlegroups.com
entiendo lo que dices...pero no funciona aun asi...

ademas el exclude, solo hace que no aparezcan los campos en el formulario..es como otra forma de hacer un hidden.

los campos existen en el output del TPV, pero van vacíos...ese el problema...

contactare a proveedor del TPV, a ver si me da una solucion.

No es normal...en otros casos, lo he hecho igual...excluir el campo...y rellenarlo de forma automatica. desde el form_valid...

por eso me parecio muy raro..que lo enviara vacio..sin embargo el campo existe en el output, es mas..en un primer momento me llegaba duplicado, pork tenia el campo en forms.py..y en el template HTML

he probado como dijiste...aunque he tenido la tarde liada...voy a ver eso que me dices de sacar el valor por la consola,

cualquier cosa, si lo soluciono...ya lo comento en este hilo



Reply all
Reply to author
Forward
0 new messages