支付宝官方教程: 第三步:使用应用私钥生成请求签名

[复制链接]
鲨鱼辣椒Lv.8 显示全部楼层 发表于 2020-5-27 16:16:48 |阅读模式 打印 上一主题 下一主题
安卓上架
支付宝官方教程: 第三步:使用应用私钥生成请求签名

【使用一门APP开发平台的用户可以不用查看这一步】

本步骤向您介绍了开发者分别在选择普通公钥、公钥证书两种签名方式下,如何对请求内容进行签名,并对支付宝返回的内容进行验签。
简而言之,签名的过程即生成签名方(通常为支付宝客户端)将传送的消息用私钥加密的过程;验签则是指验签方(通常为开放平台的服务端)使用公钥对消息进行验证的过程。
以 JAVA 语言为例,签名和验签的过程大致为:
  • 生成签名方(通常为商户)首先对参数放入一个字符串数组 signFields,把参数和值放入一个对象或 map 中,使用 JSONObject 把这个对象转化成 json 对象。然后构建签名原文,在构建签名原文时,我们需把参数按照字典(比如a,b,c)顺序排序,具体排序方法直接调用 JAVA 的 Arrays.sort 方法。 然后使用 RSA 的私钥对签名原文进行签名。
  • 验签方(通常为开放平台的服务端):和生产签名方一样先生成签名原文,然后使用 RAS 的公钥生成签名方传入的签名,把签名原文对生成签名方传入的签名进行验证,验证结果为 true 则说明验证成功,否则未通过。
支付宝开放平台 SDK 封装了签名和验签过程,只需配置账号及密钥参数即可,强烈建议使用。
说明: 文中代码部分以 JAVA 语言演示,其他语言请参考各自 SDK。
普通公钥方式
以下介绍了开发者如何把以下内容配置在代码中,对请求内容进行签名,并对支付宝返回的内容进行验签:
  • APPID
  • 应用私钥 (private key)
  • 支付宝公钥(alipay public key)
使用开放平台 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);未使用开放平台 SDK
如果未使用开放平台SDK,需要自行实现签名过程,参考此处流程
公钥证书方式
以下介绍了开发者如何把以下内容配置在代码中,对请求内容进行签名,并对支付宝返回的内容进行验签:
  • APPID
  • 应用私钥 (private key)
  • 应用公钥证书(public key cert)
  • 支付宝公钥(alipay public key)
  • 支付宝公钥证书(alipay public key cert)
  • 支付宝根证书(alipay root cert)
使用开放平台 SDK 接入
如果你当前已经使用了服务端SDK,请注意:
  • 当前仅 Java版、PHP 版 和 .Net 版 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)]//构造clientCertAlipayRequest 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);//发送API请求AlipayRequest request = new AlipayTradeQueryRequest();AlipayTradeQueryResponse response =  alipayClient.certificateExecute(request);未使用开放平台 SDK
如果未使用开放平台SDK,需要自行实现签名过程,参考此处流程


回复

使用道具 举报

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

本版积分规则

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

  • 微信公众号

  • 微信客服

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