说明

  • 接口适用于 所有接入中国银联全渠道平台的商户
  • 商户版银联在线支付网关产品及银联手机支付—银联手机支付—手机控件支付
  • 官方文档如下

签名说明

  • 银联需要验证商户上送的签名是否正确;商户收到应答,也需要验证签名是否正确,如果商户未正确验证签名,存在潜在的风险,商户自行承担因此而产生的所有损失。

  • 首先,对报文中出现签名域(signature)之外的所有数据元采用key=value的形式按照名称排序,然后以&作为连接符拼接成待签名串。其次,对待签名串使用SHA-256算法做摘要,再使用银联颁发给商户的签名私钥证书中的私钥对摘要做签名操作(签名时算法选择SHA-256)。最后,对签名做Base64编码,将编码后的签名串放在签名(signature)表单域里和其他表单域一起通过HTTP Post的方式传输给银联全渠道支付平台。

  • 生成签名串方法

    @staticmethoddef get_sign_data(data: dict):"""获取签名数据按照ASCII 字母排序 键值{'a':1,'b':2} => 'a=1&b=1'@param data:@return:"""sort_param = sorted([(key, value) for key, value in data.items() if key not in ['signature']])return "&".join("{}={}".format(k, v) for k, v in sort_param)
  • 生成签名的方法
@staticmethoddef gen_sha1_rsa_sign(sing_data,pri_key):"""银联RSA签名:param sing_data:   签名字符串:param pri_key:     签名私钥:return:"""pri_key = fill_private_key_marker(pri_key)    # 状态 rsa 私钥private_key_obj = RSA.import_key(pri_key)sign_digest = SHA1.new(sing_data.encode())  # 第一次SHA1计算hex_sign_digest = sign_digest.hexdigest()sign_digest = SHA1.new(hex_sign_digest.encode())  # 第二次SHA1计算signature = pkcs1_15.new(private_key_obj).sign(sign_digest)return base64.b64encode(signature).decode('utf-8')

验签说明

  • 对于报文的验签处理机制如下:
  • 首先,对报文中出现签名域(signature)之外的所有数据元采用key=value的形式按照名称排序,然后以&作为连接符拼接成待签名串。其次,对待签名串使用SHA-256算法做摘要,再使用商户入网时银联提供的验签公钥证书中的公钥对摘要和报文中的签名信息做签名验证操作。
@staticmethoddef verify_rsa_sign(sing_data,sign,pub_key):"""签名验证:param sing_data: 签名数据:param sign: 签名:param pub_key: 公钥:return:"""pub_key = fill_public_key_marker(pub_key)public_key_obj = RSA.import_key(pub_key)sign_digest = SHA1.new(sing_data.encode())hex_sign_digest = sign_digest.hexdigest()sign_digest = SHA1.new(hex_sign_digest.encode())pad_num = 4 - len(sign) % 4sign = sign + '=' * pad_numtry:pkcs1_15.new(public_key_obj).verify(sign_digest,base64.b64decode(sign))return Trueexcept (ValueError, TypeError):return False

其他uitils函数

def fill_private_key_marker(private_key):return add_start_end(private_key, "-----BEGIN RSA PRIVATE KEY-----\n", "\n-----END RSA PRIVATE KEY-----")def fill_public_key_marker(public_key):return add_start_end(public_key, "-----BEGIN PUBLIC KEY-----\n", "\n-----END PUBLIC KEY-----")# -----BEGIN RSA PUBLIC KEY-----def fill_public_key_marker_pem(public_key):return add_start_end(public_key, "-----BEGIN RSA PUBLIC KEY-----\n", "\n-----END RSA PUBLIC KEY-----")@staticmethod
def get_rsa_pri_key_from_pfx(pfx_path, pfx_password):"""获取 xxxxx.pfx 证书的 证书序列号:param pfx_path::param pfx_password::return:"""pfx = crypto.load_pkcs12(open(pfx_path, 'rb').read(), bytes(pfx_password, encoding="utf8"))_info = pfx.get_certificate()serial_number = _info.get_serial_number()res = crypto.dump_privatekey(crypto.FILETYPE_PEM, pfx.get_privatekey())return serial_number, res.strip()

银联云闪付控件支付--python版本签名、验签代码相关推荐

  1. 继微信支付后 支付宝宣布向银联云闪付开放线上场景

    10月2日消息,支付宝发布声明称,正在与中国银联开展合作推动线上.线下的多场景支付互联互通. 根据声明,支付宝与中国银联互联互通进展如下: 支付宝向银联云闪付开放线上场景,首批覆盖85%淘宝商家.今年 ...

  2. 银联云闪付产品分析报告

    银联云闪付产品分析报告 一.云闪付产品 银联云闪付是银联专为移动互联网打造的统一品牌(图1),旗下各产品使用了NFC.二维码等技术,可实现手机等移动设备在具有银联"QuickPass&quo ...

  3. 云闪付和微信支付达成“条码支付互通”,二者支付功能有何不同?

    对于第三方支付行业而言,支付宝.微信支付早就占据了大部分市场,消费者的选择都是哪个方便用哪个,云闪付作为后来者,可以说再想抢占市场已经失去先机,它聚集多个银行,如果早个几年,那就完全没有微信和支付宝什 ...

  4. android 银联支付必须要nfc吗,手机没有NFC功能,可以使用银联云闪付功能吗?

    理论上来讲得有nfc功能才可以使用银联云闪付功能. NFC主要有以下几类: 1.接触通过,如门禁管理.车票和门票等,用户将储存着票证或门控密码的设备靠近读卡器即可,也可用于物流管理. 2.接触支付,如 ...

  5. PHP开发银联云闪付二维码支付

    你好,是我琉忆.最近刚好有在研究银联云闪付的支付模块,所以就写篇总结分享给大家. 这算是第二次接触支付的东西了,接触得最多的是接入微信支付,自己也有相关的总结文章,可以去segmentfault搜索& ...

  6. 微信支付携手云闪付APP上线支付立减新优惠

    3月24日消息,随着数字经济.数字金融的高速发展,支付领域的互联互通不断深化.近日,微信支付联合银联云闪付APP更新上线了"助力抗疫·微信小程序多重礼"活动,新增"满10 ...

  7. 华为p20支持手机云闪付吗_银联云闪付支持HuaweiPay

    京华时报讯(记者马文婷)中国银联联合华为公司与20余家商业银行昨日举行合作发布会,即日起银联云闪付将全面支持HuaweiPay.基于华为手机的内置安全芯片与全球领先的移动支付技术和安全标准,此次适配的 ...

  8. 华为nova7se能云闪付吗_Huawei Pay开通与使用银联云闪付教程

    Huawei Pay怎么用? 也就是说华为用户如何使用NFC功能,其实Huawei Pay是需要借助银联云闪付来支付的,说白了,就是Huawei Pay要绑定银联卡(就是银行卡),然后通过POS机 H ...

  9. php curl查看获取请求头-swoft1请求头变小写银联云闪付header请求对方接收不到

    php curl查看获取请求头-银联云闪付header请求对方接收不到 php curl查看获取请求头-银联云闪付header请求对方接收不到 php curl查看获取请求头-银联云闪付header请 ...

  10. java云闪付,第三方支付-银联云闪付开发教程

    最近项目中,新增了一种第三方支付方式--云闪付,特总结了一下开发流程. 一.准备工作 云闪付支付流程图 a.客户选择云闪付支付,提交订单给商户后端,后端向银联后端请求tn(流水号): b.商户后端请求 ...

最新文章

  1. php 打乱数组顺序_PHP实现大转盘抽奖算法
  2. android接口类命名规范_超全面的UI基础设计规范来啦,还不收藏 ~
  3. selenium通过autoit实现上传和下载
  4. 【Flink-未解决】 FLink TaskManager with id is no longer reachable
  5. 深入Managed DirectX9
  6. 微信撤回软件安卓版_微信强制撤回软件下载-微信强制撤回消息工具(不限时间)v1.0安卓版_5577安卓网...
  7. 转 matlab卷积函数介绍 conv filter conv2
  8. 开发小工具和一些小技巧
  9. 汽车故障诊断技术【4】
  10. python中返回上一步操作的快捷键_在计算机中返回上一步的快捷键
  11. 产品读书《用户力:需求驱动的产品、运营与商业模式》
  12. Hadoop HA 搭建
  13. cannon的英文名_卡农的作者是谁啊 此曲的赏析 英文名cannon不是大炮吗
  14. 一文学会CentOS 文件常用命令
  15. 半导体器件相关专业词汇积累ing
  16. url链接还原:将url 短链接(加密、压缩后的链接)还原出原始链接
  17. Scheme Language
  18. BLDC(直流无刷电机)反电动势测量/观测模型
  19. 互相关函数以及Matlab仿真
  20. UPC 2020年夏混合个人训练第六十四场【ACDG】

热门文章

  1. Keras深度学习实战(7)——卷积神经网络详解与实现
  2. php生成流水号,生成唯一流水号
  3. AgileEAS.NET SOA 中间件/敏捷软件开发平台
  4. JAVA音乐网站(JAVA毕业设计)
  5. 关系型数据库管理系统
  6. etree解析xml_在python中使用Etree解析XML配置文件
  7. 谷歌logo的“前世今生”
  8. 计算机一级office操作题题库百度云,2016计算机一级《MS Office》操作题题库
  9. 怎样停止魅族系统的推送服务器,实测可行!如何关闭魅族flyme系统的自带应用推送-魅蓝屏蔽设置...
  10. IKBC poker 2更换WIN键与ALT键(option键与command键)