0

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

例如: http ://example.com/order/callback?date=20200101¤cy=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 中定义参数并不是我真正想要的,因为支付提供商公开表示他们可能会更改传递的参数,因此会破坏实现。我也不知道他们不时传递它的实际顺序。

4

1 回答 1

2

您可以使用 python 的内置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')]
>>>
于 2020-10-25T18:57:31.133 回答