问题描述
我正在尝试按手动传递的顺序检索传递给函数的URL参数。 这很重要的原因是它的支付提供商集成,它通过将传递的值(按传递的顺序)进行连接来计算哈希值。 因此,基于此,我需要按参数在实际URL中传递的顺序访问它们,将它们连接起来,然后添加对我的帐户保密的MD5密钥以验证请求。
例如: http://example.com/order/callback?date=20200101¤cy=USD&txnid=1234567&hash=thegeneratedhas
如果我通过request.GET访问请求,我将得到命令dict。
伪代码
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内置的urllib.parse
并解析URL参数,同时保持其顺序。
一个简单的例子:
>>> from urllib.parse import parse_qsl
>>> parse_qsl('date=20200101¤cy=USD&txnid=1234567&hash=thegeneratedhas')
[('date','20200101'),('currency','USD'),('txnid','1234567'),('hash','thegeneratedhas')]
>>>