4

mercadopago (paypal など) と呼ばれる支払いモジュールを実装しており、誰かがこのタイプの URL の情報を使用して支払い (IPN) を行ったときに、自分のサイトに送信される http 要求を処理する必要があります。

POST /notifications?topic=payment&id=identificador-de-notificacion-de-pago

(メルカドパゴは、支払いが影響するたびに私のサイトに POST リクエストを送信します)

しかし、django url システムと一致させることはできません。私は次のURLを試しました:

    url(r'^notifications$', 'views.notifications', name='notifications'),

さまざまな組み合わせで試し、Apache ログ ファイルを調べたところ、エラー 500 がスローされました。

URL を処理するビューは次のとおりです。

    @csrf_exempt
    def IpnProxy(request, **kwargs):
        mp = mercadopago.MP("*********", "*********") 
        paymentInfo = mp.get_payment_info(kwargs["id"])
        if paymentInfo["status"] == 200:
            return paymentInfo["response"]
        else:
            return None

シグナルを構成する必要があるかどうかはわかりません。

多分私は間違っているかもしれませんが、メルカドパゴは私のサーバーにポストリクエストを行います.私はそれを変更することはできません. ここに彼らのドキュメントがあります http://developers.mercadopago.com/documentation/instant-payment-notifications?lang=en_US そしてここに彼らのPythonでのサンプルプロジェクトがあります: https://github.com/mercadopago/sdk-python/blob/ master/examples/instant-payment-notifications/receive-ipn.py

4

2 に答える 2

2

Django で POST のパラメーターを正しくエンコードしていません。POST 要求は、要求本文でエンコードされたパラメーターを取得します。Django のリクエスト オブジェクトとレスポンス オブジェクトのドキュメントをご覧ください。提供した URL を本当に使用したい場合は、POST の代わりに GET を使用する必要があります。

- - 編集 - -

次のことを試してみてください: 通知をインポートした後、urls.py ファイルで。

url(r'^notification$', notification, name='notification')

あなたのsettings.pyで:

APPEND_SLASH=False

CSRF Coo​​kie がないため、ほぼ確実に CSRF 保護も有効にする必要があります。

次のようにパラメータを取得できます。

def notification(request, **kwargs):
    body = "topic = '{0}'\nid = '{1}'\n".format(request.GET.get('topic'), request.GET.get('id'))
    response = HttpResponse(body, content_type="text/plain")
    return response

テストすると、次のことがわかります。

hackworth:~$ curl -X POST "http://127.0.0.1:8000/notification?topic=payment&id=identificador-de-notificacion-de-pago"
topic = 'payment'
id = 'identificador-de-notificacion-de-pago'

POST リクエストには一般に本文があり、Django は POST URL にクエリ パラメータを想定していないため、上記のすべては悪い考えです。また、これを機能させるには CSRF 保護をオフにする必要があったため、セキュリティ上の脆弱性が存在します。

ドキュメントの読み方によると、get リクエストで取得する mercadopago から URL を受け取ります。クエリ パラメータを含む POST リクエストが送信されるかどうかは不明です。

于 2014-07-22T21:35:14.510 に答える