用AI赚第一桶💰低成本搭建一套AI赚钱工具,源码可二开。 广告
### 签名专区 ### 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&notify_time=2016-07-19 14:10:49&subject=大乐透2.1&sign_type=RSA&charset=utf-8&notify_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&notify_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) ~~~