支付宝官方教程: 第四步:使用支付宝公钥验签

[复制链接]
隔壁老王Lv.8 显示全部楼层 发表于 2020-5-27 16:18:16 |阅读模式 打印 上一主题 下一主题
苹果上架
支付宝官方教程: 第四步:使用支付宝公钥验签

【使用一门APP开发平台的用户可以跳过,这些已经给做好了接入】

本步骤向您介绍了开发者分别在选择普通公钥、公钥证书两种方式下,如何对支付宝返回内容进行验签
支付宝开放平台 SDK 封装了签名和验签过程,开发者只需配置账号及密钥参数,建议使用。
SDK 下载地址
说明: 文中代码部分以 JAVA 语言演示,其他语言请参考各自 SDK。
普通公钥方式使用开放平台SDK接入
同步返回和异步通知报文格式及验签方法有所区别。
同步返回验签
开放平台SDK封装了同步返回验签实现,只需在创建 DefaultAlipayClient 对象时,设置请求网关 (gateway),应用 id (app_id),应用私钥 (private_key),编码格式 (charset),支付宝公钥 (alipay_public_key),签名类型 (sign_type)即可,同步返回报文时会自动进行验签。
[backcolor=rgba(228, 228, 228, 0.75)]AlipayClient alipayClient = new DefaultAlipayClient(gateway,app_id,private_key,"json",charset,alipay_public_key,sign_type);异步通知验签
某些情况下(比如扫码支付成功时),支付宝会给商户发送异步通知。
如果某商户设置的通知地址为“https://api.xx.com/receive_notify.htm”,对应接收到通知的示例如下:
[backcolor=rgba(228, 228, 228, 0.75)]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 方法,可以使用该方法对通知报文验签。
[backcolor=rgba(228, 228, 228, 0.75)]/**@param params 参数列表(包括待验签参数和签名值sign) key-参数名称 value-参数值@param publicKey 验签公钥@param charset 验签字符集**/boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset)
注意: 生活号异步通知需要使用 AlipaySignature.rsaCheckV2 方法,会保留 sign_type 参数参与验签。
未使用开放平台SDK
如果未使用开放平台 SDK,需要自行实现验签过程,参考此处流程
公钥证书方式使用开放平台SDK接入
如果你当前已经使用了服务端SDK,请注意:
  • 当前仅Java版SDK(4.4.2.ALL及以上版本)支持证书签名方式,其他语言SDK还未支持。
  • Java版SDK 4.4.2.ALL中并没有对APP支付场景添加证书支持,若业务使用到该场景,请下载4.4.5.ALL及以上版本的SDK。
同步返回和异步通知报文格式及验签方法有所区别。
同步返回验签
开放平台SDK封装了同步返回验签实现,只需在创建 DefaultAlipayClient 对象时,设置请求网关 (gateway),应用 id (app_id),应用私钥 (private_key),应用公钥证书路径(app_cert_path 文件绝对路径),支付宝公钥证书文件路径(alipay_cert_path 文件绝对路径),支付宝CA根证书文件路径(alipay_root_cert_path 文件绝对路径),编码格式 (charset),签名类型 (sign_type)即可同步返回报文时会自动进行验签。
[backcolor=rgba(228, 228, 228, 0.75)]CertAlipayRequest certAlipayRequest = new CertAlipayRequest();certAlipayRequest.setServerUrl(gateway);certAlipayRequest.setAppId(app_id);certAlipayRequest.setPrivateKey(privateKey);certAlipayRequest.setFormat("json");certAlipayRequest.setCharset(charset);certAlipayRequest.setSignType(sign_type);certAlipayRequest.setCertPath(app_cert_path);certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path);certAlipayRequest.setRootCertPath(alipay_root_cert_path);DefaultAlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);异步通知验签
某些情况下(比如扫码支付成功时),支付宝会给商户发送异步通知。
如果某商户设置的通知地址为“https://api.xx.com/receive_notify.htm”,对应接收到通知的示例如下:
[backcolor=rgba(228, 228, 228, 0.75)]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.rsaCertCheckV1 方法,可以使用该方法对通知报文验签。
[backcolor=rgba(228, 228, 228, 0.75)]/**@param params 参数列表(包括待验签参数和签名值sign) key-参数名称 value-参数值@param alipayPublicCertPath 验签支付宝公钥证书路径@param charset 验签字符集**/boolean AlipaySignature.rsaCertCheckV1(Map<String, String> params, String alipayPublicCertPath, String charset, String signType);
注意:
1)生活号异步通知需要使用 AlipaySignature.rsaCertCheckV2 方法,会保留 sign_type 参数参与验签。
2)针对之前已入驻开放平台,后续升级成证书模式的应用,开放平台生成的支付宝公钥证书文件中的密钥和原密钥是一致的,即开发者仍可使用原异步通知验签代码。
[backcolor=rgba(228, 228, 228, 0.75)]/**@param params 参数列表(包括待验签参数和签名值sign) key-参数名称 value-参数值@param publicKey 验签公钥@param charset 验签字符集**/boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset)
注意: 生活号异步通知需要使用 AlipaySignature.rsaCheckV2 方法,会保留 sign_type 参数参与验签。
未使用开放平台SDK
如果未使用开放平台 SDK,需要自行实现验签过程,参考此处流程

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

一门APP打包致力于H5混合APP基础框架领域的前沿探索,专注轻便的移动应用解决方案 提供基于HTML前端页面在各种应用层级的端延展。
  • 官方手机版

  • 微信公众号

  • 微信客服

  • Powered by Discuz! X3.4 | Copyright © 2001-2020, 一门APP. | 一门APP开发平台|热门标签
  • 蜀ICP备17005078号-4 | 川公网安备 51019002001185号 | |成都七扇门科技有限公司