python 支付宝生活号激活开发者模式-验签签名

不啰嗦,直接开始,首先介绍一下这里使用的环境。

主要环境介绍

 1 python3.72 Django3.03 alipay-sdk-python3.3

支付宝生活号配置

1 登陆支付宝开发者平台:https://openhome.alipay.com/。
2 选择创建第三方应用 >>>自定义接入 >>> 选择生活号。
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_rsadef 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 = icontinueif 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, message.replace('+',' ').encode('GBK'), sign)except:return HttpResponse('验签失败')

获取到支付宝发送的数据后,要将sign的数据清除,然后做升序处理,验证签名所用的biz_content和sign的值需要进行url解码处理,这里biz_content这个参数的值有个小坑,version和encoding中间不知为何多了一个“+”号,要将+号替换成空格,否则验证签名失败。

支付宝生活号签名

以下是签名代码 签名

from alipay.aop.api.util.SignatureUtils import sign_with_rsa2waitsign = '<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 = icontinueif re.match('biz_content', i, re.S):i = parse.unquote(i)k = i + '&'message += kmessage = message.rstrip('&')# 获取的生活号的sign值,url解码一下sign = parse.unquote(sign.split('=')[1])try:flag = verify_with_rsa(self.alipay_client_config.alipay_public_key, message.replace('+',' ').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')

谢谢阅读。

python 支付宝生活号激活开发者模式-验签和签相关推荐

  1. java对接支付宝生活号激活开发模式

    最近需要对接支付宝无感停车,为此需要对接支付宝生活号,而生活号开发除了一系列的添加签约功能后,在对接前需要激活开发模式,因此一堆啃爹内容出现了,下面举例一波激活开发模式有的坑. 按照如图框框依次下载d ...

  2. 支付宝生活号开发(php)

    支付宝生活号开发(php) 鉴于支付宝生活号开发的Demo看起来比较乱,自己最近做了这个东西,所以就整理了一下,希望对你有点帮助! 激活开发者模式 class AlipayController ext ...

  3. 支付宝生活号服务窗接入问题汇总

    2019独角兽企业重金招聘Python工程师标准>>> 最近因公司业务需求,需要接入支付宝生活号服务窗的事件订阅功能,但接入过程中也是一波三折各种坑.总体感受,接入支付宝不如接入微信 ...

  4. 支付宝生活号接入方案

    开通服务号,进入页面https://fuwu.alipay.com/platform/open.htm ,选择"应用所有者",填写好申请并提交: 2. 进入支付宝服务号管理后台,登 ...

  5. 支付宝生活号开发配置以及相应的流程

    由于最近公司涉及到支付宝服务号升级生活号,故有机会接触支付宝生活号的开发. 前期准备:申请支付宝生活号 步骤:说实话,支付宝生活号管理后台涉及功能太多,所以找到相应的配置项还是比较绕的 1.登录支付宝 ...

  6. JEECG支付服务窗专题 - 支付窗激活开发者模式

    申请支付服务窗,二次开发首先要激活开发者模式 第一步:RSA私钥及公钥生成 window环境,下载生成工具,双击脚本文件""支付宝RAS密钥生成器SHAwithRSA1024_V1 ...

  7. 支付宝生活号h5网页--蚂蚁认证

    支付宝生活号h5网页--蚂蚁认证 前言 开发点 1.获取认证url 2.跳转到认证的url地址 3.认证结束 4.查询认证结果 注意点 总结 前言 前段时间生活号要求加功能,需要实现社会保障卡的挂失和 ...

  8. 支付宝生活号对接-----(一)授权

    第一次做支付宝生活号, 一脸蒙蔽, 在同事的帮助下勉强做出来了,下面分享一下沙箱环境的应用,正式和沙箱是一样的 因为我是直接有了支付宝生活号,并且已经添加了应用 ,所以我直接从配置开始说起 在按照下面 ...

  9. spring boot中支付宝生活号事件订阅,中文参数乱码问题解决方案

    项目使用的是spring boot 2.0.0 RELEASE版本 出发点: 在支付宝生活号后台设置好支付宝默认应用网关之后,只要有关注.取关等等事件之后都会发推送过来. 看样子默认是GBK编码,得验 ...

最新文章

  1. java表或视图不存在_Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在...
  2. pandas 的describe的参数含义
  3. anaconda更换镜像源
  4. jconsole连接远程Tomcat应用
  5. Java 操作 HDFS
  6. Qt工作笔记-使用hiredis连接及查询Redis
  7. 运用大数据提高政协协商能力
  8. js中值得推荐的Memoization
  9. 基于 Flow 的 NFT 交易平台 Tibles 完成 114 万美元种子轮融资
  10. php java memcached_php-memcached详解
  11. 在word中如何设置稿纸和字帖?学会帮你省下字帖钱哟!
  12. 两个摄像头合成一路_一个摄像机怎么添加到两台录像机?
  13. 图像识别(五)| 春天花开却不识?打开百度识图,残差和卷积带你识遍路边野花
  14. iOS导航栏的正确隐藏方式
  15. 三分钟教你学Git(十二) 之 fast-forward
  16. 知网哭穷赔不起1200亿,网友:收钱时咋不嫌多
  17. 计算机软件著作权的软件全称,软件著作权名称要求是什么
  18. 3D点云人脸鼻尖检测算法
  19. Mac Edge 浏览器开启几秒后自动关闭问题
  20. 组件容器服务器的关系,什么是docker 容器编排

热门文章

  1. 自动生成 MultiTestManager 的执行文件mtm
  2. win10 0x8007042b 安装1803更新 失败 竟然是sougou 搜狗拼音 输入法的问题,。。。
  3. A - 做一个正气的杭电人
  4. MOOG穆格伺服阀G761-3005B
  5. ashampoo snap 7 编辑一次自动退出
  6. ggplot2画中地图
  7. 案例!智慧物流系统的规划思路
  8. 肾藏精,其华在发,发的营养来源于血,但其生机根本还在于肾,肾不好,头发会早发白、失去光泽,并且出现脱发
  9. 专访韩庆良:信息化建设,引领企业转型升级
  10. 线性箭头用css3,css3实现小箭头各种图形效果