开发者社区> 问答> 正文

#支付宝 如何确定签名方式?

如何确定签名方式?

展开
收起
保持可爱mmm 2020-05-05 16:48:12 1295 0
1 条回答
写回答
取消 提交回答
  • 目前开放平台支持的签名方式有两种:普通的RSA2签名方式和公钥证书签名方式。 支付宝开放平台 SDK 封装了签名和验签过程,只需配置账号及密钥参数即可,强烈建议使用,点此可下载SDK。

    一、普通RSA2签名

    开放平台 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);

    此时涉及到以下几个密钥: rsa_private_key 商户私钥 : 适用开发语言php ,.net等。 rsa_private_key_pkcs8 商户pkcs8私钥 :适用开发语言java,安卓 ,IOS等。 rsa_public_key 商户公钥 : 上传到支付宝后台服务器,无需配置到程序代码内 alipay_public_key 支付宝公钥: 配置到商户项目中 密钥交互原理 说明:支付宝私钥是不对外开放的,商户自己的私钥也要注意保密不要对外展示,否则会影响账号安全!

    密钥交互流程图

    ①:商户上传自己的商户公钥到支付宝服务器 ;

    ②:使用商户私钥请求签名参数 ;

    ③:签名以后的参数请求到支付宝;

    ④:支付宝服务器使用商户上传的商户公钥,验签商户请求参数,并处理支付结果;

    ⑤:对商户支付结果使用支付宝私钥签名 ;

    ⑥:商户使用支付宝公钥验签支付返回的回调数据结果 。

    二、公钥证书签名方式

    把以下内容配置在代码中,对请求内容进行签名,并对支付宝返回的内容进行验签:

    APPID
    应用私钥 (private key)
    应用公钥证书(public key cert)
    支付宝公钥证书(alipay public key cert)
    支付宝根证书(alipay root cert)
    

    开放平台 SDK 封装了签名实现,只需在创建 DefaultAlipayClient 对象时,设置请求网关 (gateway),应用 id (app_id),应用私钥 (private_key),应用公钥证书路径(app_cert_path 文件绝对路径),支付宝公钥证书文件路径(alipay_cert_path 文件绝对路径),支付宝CA根证书文件路径(alipay_root_cert_path 文件绝对路径),编码格式 (charset),签名类型 (sign_type)即可,报文请求时会自动进行签名。

    //构造client 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);

    //发送API请求 AlipayRequest request = new AlipayTradeQueryRequest(); AlipayTradeQueryResponse response = alipayClient.certificateExecute(request);

    更多详见【签名验签专区】。

    2020-05-05 16:48:23
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载