python⽀付宝⽣活号激活开发者模式-验签和签
python ⽀付宝⽣活号激活开发者模式-验签签名
不啰嗦,直接开始,⾸先介绍⼀下这⾥使⽤的环境。
我不愿 让你一个人主要环境介绍
1 python3.7
2 Django3.0
3 alipay-sdk-python3.3
⽀付宝⽣活号配置
⽀付宝⽣活号验签
⽀付宝⽣活号验签需要搭建web服务器,具体搭建教程请⾃⾏百度,以下开始说明验签。
森海塞尔无线话筒⽀付宝⽣活号发送的数据格式如下,由于数据太长,隐藏sign和biz_content的数据,格式如下:
sign=Vcy8od0SAb***&charset=GBK&biz_content=%3C%3Fx****&sign_type=RSA2&service=alipay.service.check
其中biz_content的数据为xml格式,如下:
<?xml version="1.0" encoding="gbk"?><![CDATA[2021001***]]><![CDATA[15895***]]><![CDATA[event]]><!
[CDATA[verifygw]]>
以下是验签代码,使⽤⽀付宝python-sdk中的verify_with_rsa函数: 验签代码。
from alipay.aop.api.util.SignatureUtils import verify_with_rsa
def post(self,request):
#获取⽀付宝发送的数据
date = request.body.decode('gbk')
# &分割处理
date1 = date.split('&')
message =''
sign =''
# 获取message 去除sign值,然后升序处理,&的重新拼接
for i in sorted(date1):
if re.match('sign=', i, re.S):
sign = i
continue
if re.match('biz_content', i, re.S):
i = parse.unquote(i)
k = i +'&'
message += k
# 除去尾部的&符号
message = message.rstrip('&')
# 获取的⽣活号的sign值,url解码⼀下
sign = parse.unquote(sign.split('=')[1])
try:
flag =verify_with_rsa(self.alipay_client_config.alipay_public_key, place('+',' ').encode('GBK'), sign)
except:
return HttpResponse('验签失败')
获取到⽀付宝发送的数据后,要将sign的数据清除,然后做升序处理,验证签名所⽤的biz_content和sign的值需要进⾏url解码处理,这⾥biz_content这个参数的值有个⼩坑,version和encoding中间不知为何多了⼀个“+”号,要将+号替换成空格,否则验证签名失败。
⽀付宝⽣活号签名
以下是签名代码 签名。
from alipay.aop.api.util.SignatureUtils import sign_with_rsa2
waitsign ='<biz_content>{}</biz_content><success>true</success>'.format(self.app_public_key)
postsign =sign_with_rsa2(self.alipay_client_config.app_private_key,waitsign,self.alipay_client_config.charset)
content ='''<?xml version="1.0" encoding="GBK"?>
<alipay>
形容夫妻情深的成语<response>
{}
</response>
<sign>{}</sign>
<sign_type>{}</sign_type>
</alipay>'''.format(waitsign,postsign,self.alipay_client_config.sign_type)摩羯座性格
验证签名后,需向⽀付宝回调xml的数据,表⽰验正成功。
以上代码中 waitsign 表⽰代签名数据,biz_content中的数据为开发者公钥。然后使⽤⽀付宝python-sdk 中的sign_with_rsa2函数计算签名,传⼊开发者私钥,待签名数据,已经字符编码,采⽤gbk编码。
签名成功后,组织消息模版,如上⾯代码的content变量,将消息回调给⽀付宝,如下:
return HttpResponse(content,content_type='application/xml')
以下是本次⽣活号激活开发者模式的验签及签名的完整代码:
def post(self,request):
date = request.body.decode('gbk')
date1 = date.split('&')
卡塔尔与中国时差message =''
sign =''
# 获取message 去除sign值,然后升序处理,&的拼接
for i in sorted(date1):
if re.match('sign=', i, re.S):
sign = i
continue
if re.match('biz_content', i, re.S):母亲节祝福短信
i = parse.unquote(i)
k = i +'&'
message += k
message = message.rstrip('&')
# 获取的⽣活号的sign值,url解码⼀下
sign = parse.unquote(sign.split('=')[1])
try:
flag =verify_with_rsa(self.alipay_client_config.alipay_public_key, place('+',' ').encode('GBK'), sign) except:
return HttpResponse('验签失败')
# 输出验签结果
waitsign ='<biz_content>{}</biz_content><success>true</success>'.format(self.app_public_key)
postsign =sign_with_rsa2(self.alipay_client_config.app_private_key,waitsign,self.alipay_client_config.charset)
content ='''<?xml version="1.0" encoding="GBK"?>
<alipay>
<response>
{}
</response>
<sign>{}</sign>
<sign_type>{}</sign_type>
</alipay>'''.format(waitsign,postsign,self.alipay_client_config.sign_type)
return HttpResponse(content,content_type='application/xml')
谢谢阅读。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论