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