Come ricevere i dati POST in django

Ho cercato di integrare un gateway di pagamento, nel mio sito in django.
Sto avendo difficoltà ad ottenere i dati di risposta dal gateway di pagamento.

Il gateway di pagamento è campione docs per php che assomiglia a questo :

$ErrorTx = isset($_POST['Error']) ? $_POST['Error'] : '';               //Error Number
$ErrorResult = isset($_POST['ErrorText']) ? $_POST['ErrorText'] : '';   //Error message
$payID = isset($_POST['paymentid']) ? $_POST['paymentid'] : '';     //Payment Id

In vista per l’url che il gateway di pagamento è il reindirizzamento dopo aver inserito i dettagli della carta ecc, sto controllando se è un if request.method == "GET" e poi passare la richiesta di una funzione. Quando si esegue il debug la richiesta, posso vedere una query vuota dict. e se io cerco qualcosa come res = richiesta.GET[‘paymentid’] mi appare un errore che dice che non c’è nessun tasto di chiamata paymentid.

Mi manca qualcosa di ovvio? Io sono ancora abbastanza nuovo per django, quindi sono sicuro che mi sto facendo qualcosa di sbagliato.

  • Se viene Inviato poi il metodo “POST”.
  • sì, ma se la richiesta.metodo == “GET” restituisce true def pgreturn_hdfcerror(request): #process hdfc error request getLogger().debug("pg return hdfc error") if request.method == "GET": return handleHdfcResponse(request, 1)
  • Che il segnale è che dovrebbe essere?
  • mi dispiace molto, ancora imparando come formato di roba qui. I ritorni a capo sono ancora un mistero per me. Solo inteso dire che richiesta.metodo GET.
  • Non è possibile ricevere POSTA i dati in GET.
  • La risposta che ricevo è un GET. Ci sono due conversazioni separate sto avendo con il gateway di pagamento. Nella prima, sto facendo response = urllib2.urlopen(settings.HDFC_ENDPOINT, request_data) dove request_data ha i dati mando al PG. Ho letto la risposta con response.read() che funziona bene. Nel secondo, sono di reindirizzare l’utente alla PG url e il PG a sua volta reindirizza l’utente a un url sul mio sito. Questo è dove mi sono bloccato e non in grado di leggere i dati. C’è un modo diverso devo fare questo?
  • Capito questo. Il Gateway di Pagamento è di inviare la risposta come un server, server di POSTA, ma poi riorientare l’errore di url per qualche motivo. Ancora non hanno ottenuto il tutto funziona. 🙁 Grazie per l’aiuto, Alasdair.

InformationsquelleAutor hydeous | 2011-09-27

 

2 Replies
  1. 32

    res = request.GET['paymentid'] genererà un KeyError se paymentid non è nei dati.

    Tuo esempio di codice php che controlla se paymentid è nel POST di dati, e imposta $payID di ” altrimenti:

    $payID = isset($_POST['paymentid']) ? $_POST['paymentid'] : ''

    L’equivalente in python è quello di utilizzare il get() metodo con un argomento di default:

    payment_id = request.POST.get('payment_id', '')

    durante il debug, questo è quello che vedo nella response.GET: <QueryDict: {}>, request.POST: <QueryDict: {}>

    Sembra come se il problema non è l’accesso a dati POST, ma che non c’è nessun POST dati. Come si esegue il debug? Stai usando un browser o è il gateway di pagamento, accedere alla tua pagina? Sarebbe utile se hai condiviso la tua vista.

    Una volta sono riuscito a presentare alcuni dati post della tua pagina, non dovrebbe essere troppo difficile per convertire il campione di php, python.

    • Ho pensato che non c’era nessun post dati troppo, ma il gateway di pagamento di ragazzi che mi stavano dando tanto dolore su tutto quello che viene va bene sul loro fine che mi sono convinto che era qualcosa che mi stava facendo male. Io sono il debug utilizzando il browser. Il gateway di pagamento solo reindirizza alla mia pagina. Sarebbe il gateway di pagamento di codice per fare un esempio, mentre l’invio dei dati alla mia pagina php e django? Dicono che il supporto php, ecc, ma non django.
    • Sei sicuro di averli pubblicazione all’url corretto? Se, per esempio, sono la pubblicazione di /callback (senza lo slash finale), la richiesta può essere indirizzata verso /callback/ e i dati di POST sarebbe perso.
  2. 1

    Si dovrebbe avere accesso al POST dizionario dell’oggetto request.

    • Non è un dizionario di per sé, ma piuttosto un QueryDict, un diverso tipo di mappatura.
    • durante il debug, questo è quello che vedo nella risposta.OTTIENE:<QueryDict: {}> POST:<QueryDict: {}> che Cosa si intende ‘accesso’? C’è qualche altro modo dovrei essere cercando di accedere ai dati?
    • Si dovrebbe essere il controllo della request.POST QueryDict, non response.POST.
    • Mi dispiace, che è stato un errore di battitura. Sto verificando richiesta. E ‘ sicuramente un vuoto querydict in entrambi i GET e POST. L’unica cosa che ha valori dei COOKIE. :S

Lascia un commento