按传递的顺序检索 URL 参数 - django

Retrieving URL parameters in the order they are passed - django

我正在尝试检索传递给函数的 URL 参数,按照它们实际传递的顺序。 这很重要的原因是它是一个支付提供商集成,它通过连接传递的值(按照它们传递的顺序)来计算哈希值。 因此,基于此,我需要按照它们在实际中传递的顺序访问参数 URL,将它们连接起来,然后添加一个对我的帐户保密的 MD5 密钥以验证请求。

例如: http://example.com/order/callback?date=20200101&currency=USD&txnid=1234567&hash=thegeneratedhas

如果我通过 request.GET 访问请求,我会得到命令字典。

伪代码

def callback(request):
  keys_concatenated = ""
  for value in request.GET:
    if value == "hash":
      pass
    else:
      keys_concatenated = keys_concatenated + request.GET[value]

这会生成如下字符串:USD202001011234567 从提供者生成的散列,订单被保留,因此期望值 20200101USD1234567

在 urls.py 中定义参数并不是我真正想要的,因为支付提供商公开表示他们可能会更改传递的参数,因此它会破坏实现。 我也不知道他们不时传递的实际顺序。

您可以使用 python 的 built-in urllib.parse 并解析 URL 参数,同时保持它们的顺序。

一个简单的例子:

>>> from urllib.parse import parse_qsl
>>> parse_qsl('date=20200101&currency=USD&txnid=1234567&hash=thegeneratedhas')
[('date', '20200101'), ('currency', 'USD'), ('txnid', '1234567'), ('hash', 'thegeneratedhas')]
>>>