### 签名专区
### 1、生成RSA密钥
支付宝提供一键生成工具便于开发者生成一对RSA密钥,可通过下方链接下载密钥生成工具:
windows:
链接:[https://pan.baidu.com/s/1MtTqycjubQKFRrfjzqRniA](https://pan.baidu.com/s/1MtTqycjubQKFRrfjzqRniA) 提取码:s7d3
mac:
链接:[https://pan.baidu.com/s/13QZHGEgND-5jwo6H6s1GZQ](https://pan.baidu.com/s/13QZHGEgND-5jwo6H6s1GZQ) 提取码:juyx
下载该工具后,解压打开文件夹,运行“RSA签名验签工具.bat”(WINDOWS)或“RSA签名验签工具.command”(MAC\_OSX)。
![](https://img.kancloud.cn/d1/1f/d11fc13541d8986d5aff42cd4f9fdbf7_742x635.png)
~~~
详细步骤:
~~~
* 1.根据开发语言选择密钥格式。
* 2.选择密钥长度,新建应用请务必使用2048位。
* 3.点击 “生成密钥”,会自动生成商户应用公钥和应用私钥。
* 4.点击“打开密钥文件路径”,即可找到生成的公私钥。
![](https://img.kancloud.cn/78/28/78286fb321680aba0d46d0f5b3f56c8b_580x95.png)
生成的私钥需妥善保管,避免遗失,不要泄露。应用私钥需填写到代码中供签名时使用。应用公钥需提供给支付宝账号管理者上传到支付宝开放平台。 **TIPS:**除了使用支付宝提供的一键生成密钥工具外,也可以使用OpenSSL工具命令生成密钥。
### 2、上传应用公钥并获取支付宝私钥
1. 点击签名验签工具右下角的“上传公钥”会打开支付宝[开放平台网页](https://openhome.alipay.com/platform/appManage.htm),输入账号登录。(建议使用IE或Chrome浏览器。)
2. 在“我的应用”中,选择要配置密钥的应用,点击“查看”。记录对应的**APPID**(下图红框处),在代码中使用。
![](https://img.kancloud.cn/60/03/600337bcb60da0d4c393322869ba4ff4_739x282.png)
若首次登录管理中心,请根据引导填写所需信息完成开发者入驻:
第一步:点击认证,完成实名认证。
![](https://img.kancloud.cn/af/be/afbe2d1f1e54a96a79b66c8df4f938d0_503x211.png)
第二步:点击编辑,完善信息。
![](https://img.kancloud.cn/2f/c1/2fc1ad614c1d36c4e3ccbd31b512af7d_526x209.png)
根据引导流程,完成手机绑定。
![](https://img.kancloud.cn/ed/63/ed637cef8e8401bbea4dfbcae81f6520_385x167.png)
第三步:签署协议,完成入驻。
![](https://img.kancloud.cn/52/84/5284a7f8cc6deccbf4ef6655aa2fa865_623x203.png)
3. 在“应用信息”-“接口加签方式”下方点击“设置应用公钥”。
注: 1)接口中的sign\_type参数应与上传密钥的加签方式一致。例如接口参数中sign\_type=RSA2,请求时就会使用此处设置的RSA2(SHA256)公钥验签。 2)新建应用仅支持RSA2加签方式
![](https://img.kancloud.cn/f1/30/f13037f3b071f547cb10a2daee670692_688x547.png)
根据开发者的条件设置应用公钥或上传公钥证书,常规请点击设置应用公钥。
![](https://img.kancloud.cn/c8/5e/c85e2aafb80225e978e72c3de42e206a_714x210.png)
若未绑定手机,请根据引导,完成手机绑定,完成手机短信验证。
![](https://img.kancloud.cn/da/e1/dae186ae8dd77c45efa2ee394822abac_728x244.png)
把签名验签工具里“公钥”的内容复制到此处,点击“保存”完成密钥设置。
![](https://img.kancloud.cn/aa/a0/aaa0926f4ae8d2c89354a2395a1b40ec_735x350.png)
保存成功后,在同一页面查看或修改应用公钥或上传应用公钥证书。
![](https://img.kancloud.cn/2f/c9/2fc90d553763cae439d5da2e572befb2_726x415.png)
保存支付宝公钥内容,在代码中验签使用。
### 3、使用应用私钥生成请求签名
~~~
##### 使用应用私钥生成请求签名
~~~
把1).APPID,2).应用私钥,3).支付宝公钥,配置在代码中,对请求内容进行签名,并对支付宝返回的内容进行验签。
支付宝开放平台SDK封装了签名和验签过程,只需配置账号及密钥参数即可,强烈建议使用。
~~~
##### 使用开放平台SDK接入
~~~
开放平台SDK封装了签名实现,只需在创建DefaultAlipayClient对象时,设置请求网关(gateway),应用id(app\_id),应用私钥(private\_key),编码格式(charset),支付宝公钥(alipay\_public\_key),签名类型(sign\_type)即可,报文请求时会自动进行签名。
~~~
AlipayClient alipayClient = new DefaultAlipayClient(gateway,app_id,private_key,"json",charset,alipay_public_key,sign_type);
~~~
### 4、使用支付宝公钥验签
支付宝开放平台SDK封装了签名和验签过程,只需配置账号及密钥参数,强烈建议使用。
##### 使用开放平台SDK接入
同步返回和异步通知报文格式及验签方法有所区别。
##### 同步返回验签
开放平台SDK封装了同步返回验签实现,只需在创建DefaultAlipayClient对象时,设置请求网关(gateway),应用id(app\_id),应用私钥(private\_key),编码格式(charset),支付宝公钥(alipay\_public\_key),签名类型(sign\_type)即可,同步返回报文时会自动进行验签。
~~~
AlipayClient alipayClient = new DefaultAlipayClient(gateway,app_id,private_key,"json",charset,alipay_public_key,sign_type);
~~~
##### 异步通知验签
某些情况下(比如扫码支付成功时),支付宝会给商户发送异步通知。
如果某商户设置的通知地址为[https://api.xx.com/receive\_notify.htm](https://api.xx.com/receive_notify.htm),对应接收到通知的示例如下:
~~~
https://api.xx.com/receive_notify.htm?total_amount=2.00&buyer_id=2088102116773037&body=大乐透2.1&trade_no=2016071921001003030200089909&refund_fee=0.00¬ify_time=2016-07-19 14:10:49&subject=大乐透2.1&sign_type=RSA&charset=utf-8¬ify_type=trade_status_sync&out_trade_no=0719141034-6418&gmt_close=2016-07-19 14:10:46&gmt_payment=2016-07-19 14:10:47&trade_status=TRADE_SUCCESS&version=1.0&sign=kPbQIjX+xQc8F0/A6/AocELIjhhZnGbcBN6G4MM/HmfWL4ZiHM6fWl5NQhzXJusaklZ1LFuMo+lHQUELAYeugH8LYFvxnNajOvZhuxNFbN2LhF0l/KL8ANtj8oyPM4NN7Qft2kWJTDJUpQOzCzNnV9hDxh5AaT9FPqRS6ZKxnzM=&gmt_create=2016-07-19 14:10:44&app_id=2015102700040153&seller_id=2088102119685838¬ify_id=4a91b7a78a503640467525113fb7d8bg8e
~~~
开放平台SDK提供了AlipaySignature.rsaCheckV1方法,可以使用该方法对通知报文验签。
~~~
/**
@param params 参数列表(包括待验签参数和签名值sign) key-参数名称 value-参数值
@param publicKey 验签公钥
@param charset 验签字符集
**/
boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset)
~~~
- Linux
- linux常用命令
- awk
- cp
- scp
- mv
- screen工具
- rsync
- Linux设置静态IP
- vim常用
- ssh免密登录
- linux挂载磁盘和开机自动挂载
- 文件的时间戳
- 重定向
- 防火墙
- Vultr 服务器利用快照更换IP
- ss
- node-yarn
- ES安装向导
- lnmp/lamp
- windows安装mysql
- windows安装nginx
- Let'sEncrypt 免费通配符/泛域名SSL证书
- 开机自动挂载硬盘
- 普通用户提权
- ELK日志分析系统
- Docker
- docker
- centos7安装docker
- Centos7安装redis
- CentOS 7 使用Docker搭建Nginx
- CentOS 7 使用Docker搭建Jenkins
- CentOS 7 使用Docker搭建Zookeeper
- CentOS 7 使用Docker搭建Tomcat
- CentOS 7 使用Docker搭建Mysql
- CentOS 7 使用Docker搭建PHP环境
- 使用docker搭建Swagger
- docker阿里云私有仓库
- docker zookeeper集群
- docker部署ES
- docker之java容器运行外置springboot-jar
- docker部署owncloud云盘
- ETCD
- centos7部署etcd节点
- Dockerfile
- Docker-compose
- gitlab.yml
- db.yml
- 安装docker-compose
- gitlab-docker-compose.yml
- nginx-docker-compose.yml
- Mysql
- mysql开启远程访问及相关权限控制
- mysql授权
- mysql快速导出导入大数据
- mysql单机备份
- binlog日志
- shell
- 经典案例
- 俄罗斯方块游戏
- 系统初始化
- 服务器监控
- go基础环境
- shell.监控日志.elk
- shell.检查各服务脚本
- shell.删除文件脚本
- shell.守护进程
- shell.数据库
- shell.Ansible
- shell.dev
- shell.ftp环境
- shell.docker环境
- shell.k8s环境
- k8s.二进制安装
- K8s.一主多从
- k8s.三主两从高可用
- k8s.检查服务与配置
- k8s.jenkins
- k8s.gitlab
- go-install.sh
- jenkins-install.sh
- node-install.sh
- redis-install.sh
- zabbix-install.sh
- zabbix-dockerfile.sh
- nginx-install.sh
- shell变量
- 用户自定义变量
- 环境变量
- shell特殊变量
- shell条件判断
- 流程控制
- shell运算符
- Shell _printf
- shell_test
- shell函数
- 输出重定向
- 网络相关
- 安全相关
- 堡垒机部署
- 区块链威胁情报共享平台
- 签名与验签
- 浅谈区块链
- 智能合约
- 黄金币GTF智能合约
- 节点
- 以太坊公链私链geth同步
- 比特节点同步
- BTC节点错误解决方法
- eth硬分叉
- omni钱包节点搭建
- 架构
- K8s
- 搭建k8s集群完整篇
- 二进制部署k8s
- Devops
- git
- Jenkins
- svn
- 禅道
- CI/CD
- docker+jenkins+golang持续集成持续交付(CI/CD)
- 项目部署
- config.env
- docker-compose.yml
- Dockerfile模板
- .dockerignore
- run.sh
- nginx.conf模板
- 跨域
- jenkins配置
- 测试
- Python