Vue + Django 2.0.6 学习笔记 10.12 支付宝支付接口返回签名校验

编程入门 行业动态 更新时间:2024-10-11 03:24:41

Vue + Django 2.0.6 学习笔记 10.12 <a href=https://www.elefans.com/category/jswz/34/1767806.html style=支付宝支付接口返回签名校验"/>

Vue + Django 2.0.6 学习笔记 10.12 支付宝支付接口返回签名校验

支付成功后 支付宝会返回相应参数。但是我们必须要检查返回的参数是不是支付宝发起的。还是被串改的。

所以我们需要校验返回参数中的签名(sign)是否与其他参数一致

代码:

# 测试用函数写在 if __name__ == "__main__"中的。 用于单独测试return_url = 'http://127.0.0.1:8000/?total_amount=100.00&timestamp=2017-08-15+23%3A53%3A34&sign=e9E9UE0AxR84NK8TP1CicX6aZL8VQj68ylugWGHnM79zA7BKTIuxxkf%2FvhdDYz4XOLzNf9pTJxTDt8tTAAx%2FfUAJln4WAeZbacf1Gp4IzodcqU%2FsIc4z93xlfIZ7OLBoWW0kpKQ8AdOxrWBMXZck%2F1cffy4Ya2dWOYM6Pcdpd94CLNRPlH6kFsMCJCbhqvyJTflxdpVQ9kpH%2B%2Fhpqrqvm678vLwM%2B29LgqsLq0lojFWLe5ZGS1iFBdKiQI6wZiisBff%2BdAKT9Wcao3XeBUGigzUmVyEoVIcWJBH0Q8KTwz6IRC0S74FtfDWTafplUHlL%2Fnf6j%2FQd1y6Wcr2A5Kl6BQ%3D%3D&trade_no=2017081521001004340200204115&sign_type=RSA2&auth_app_id=2016080600180695&charset=utf-8&seller_id=2088102170208070&method=alipay.trade.page.pay.return&app_id=2016080600180695&out_trade_no=20170202185&version=1.0'# 将url解析成各个参数o = urlparse(return_url)
# 转换为字典(这里要注意,值全部是list类型)query = parse_qs(o.query)processed_query = {}
# 去掉sign 不去掉的话会吧它一起签名了。那肯定验证不过ali_sign = query.pop('sign')[0]# app_notify_url 是异步支付毁掉接收地址alipay = AliPay(appid="2016101100661810",app_notify_url= "http://127.0.0.1:8000/alipay/return/",app_private_key_path= "../trade/keys/private_2048.txt",alipay_public_key_path="../trade/keys/alipay_key_2048.txt",debug=True)#将字典的value类型转成string类型。然后交给数据转换函数 verifyfor key, value in query.items():processed_query[key] = value[0]print(alipay.verify(processed_query, ali_sign))

在剔除掉sign字段之后就交给了verify来讲字典转换成带&符号的字段

# 数据整理转换def verify(self, data, signature):
# 剔除sign_type 其实外面剔除也可以if "sign_type" in data:sign_type = data.pop("sign_type")
# 排序。unsigned_items = self.ordered_data(data)
# 用&拼接message = "&".join(u"{}={}".format(k, y) for k, y in unsigned_items)
# 交给签名函数return self._verify(message, signature)

数据整理完之后就交给签名函数进行签名比对

# 签名def _verify(self, raw_content, signature):
# 阿里的公钥加签key = self.alipay_public_keysigner = PKCS1_v1_5.new(key)digest = SHA256.new()
# 将参数进行加签digest.update(raw_content.encode('utf8'))
# 比对网络传递过来的签名,看是否一致。 如果是就返回True, 否则返回Falseif signer.verify(digest, decodebytes(signature.encode('utf8'))):return Truereturn False

这样就完成了返回的验证。 然后接下来就是写View进行调用这些函数

函数

更多推荐

Vue + Django 2.0.6 学习笔记 10.12 支付宝支付接口返回签名校验

本文发布于:2024-02-27 00:35:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1704566.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:支付宝   学习笔记   接口   Django   Vue

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!