首页 > 其他分享 >支付宝 v3 自签名如何实现

支付宝 v3 自签名如何实现

时间:2023-12-21 10:22:43浏览次数:26  
标签:支付宝 请求 content v3 签名 httpPost id String

今天在看文档的时候,发现支付宝新出了一个 v3 版本的接口调用方式,感觉有点意思,花了点时间研究了下这个版本要怎么实现自签名,大家有兴趣可以看看。

 

什么是支付宝 API v3 版本?

官网上给的解释是基于 OAS3.0 API 规范,支付宝做了相应的 API 升级(v3),在开发体验上进行了重点优化。

与之前支付宝 API 的主要区别有几条:

  • 使用 RESTful 设计风格,并通过 OpenAPI 规范(OAS)描述接口。
  • 使用 JSON 作为数据交互的格式,不再使用 XML 和表单格式。
  • 简化加验签逻辑,对 HTTP 报文整体进行签名。
  • 简化加解密、文件上传等规范。

更多内容及详细介绍可直接参考 v3 协议简介

其实之前也没有 v2 的概念,不过根据对文档整体的理解来看,v2 版本的概念应该就是之前调用的 通用版本 Easy 版本 。

两个版本的差异可以参考下方表格:

 

 

顺便提一句,通用版目前是我用的最多的方式,主要是用习惯了不想改(可不是因为偷懒_(:з」∠)_不过新版方式后面也可以试一下看看。

PS:通用版自签名的方法可以参考:[SDK 如何实现签名],SDK 接口调用方式参考:[代码示例]。

 

如何对接v3版本

v3 版本比起 v2 版本来说 改变的地方还是挺多的,最大的改变就是请求的方式,由原本的 RPC 风格切换成了RESTful

下面我们就来看看 v3 版本自签名是如何调用的。

下面以 统一收单交易支付接口 为例。

 

步骤一:构造 authString

authString 也就是 v3 版本新加的身份鉴权信息。

需要用到的参数有:

  • app_id:开放平台颁发的应用 id。
  • timestamp:Unix 时间戳,精确到毫秒。
  • nonce:自定义参数,自己生成唯一性字符串,每次请求要保证唯一。

组装示例

long Unix=date.getTime();
String authString= "app_id="+app_id+",timestamp="+Unix+",nonce=3246658768654544";

authString生成内容

app_id=2014111111111122,timestamp=1702452177941,nonce=3246658768654544

 

 

步骤二:拼接待签名字符串

需要用到的参数有:

  • authString:上一步返回。
  • httpMethod:本次请求的 http 方法,例如 GET\POST\PUT。
  • httpReuqestUrl:这个从对应接口文档请求 url 中拿,不包含域名值。
  • httpRequestBody:本次请求的 body 内容;GET方式请求时,入参空字符串。

注意:下方代码示例中的 \n 千万不能丢!!!不然验签通过不了的QAQ

组装示例

String httpMethod="POST";
String httpReuqestUrl=    "/v3/alipay/trade/precreate";
String httpRequestBody="{\"out_trade_no\":\"20181128763521373251698\",\"total_amount\":\"1\",\"subject\":\"123\",\"body\":\"body\"}";
String content=authString+"\n"+httpMethod+"\n"+httpReuqestUrl+"\n"+httpRequestBody+"\n";
System.out.println("content:"+"\n"+content);

返回内容

app_id=2021111111111122,timestamp=1702452177941,nonce=3246658768654544
POST
/v3/alipay/trade/precreate
{"out_trade_no":"20181128763521373251698","total_amount":"1","subject":"123","body":"body"}

 

步骤三:生成 sign

需要用到的参数有:

  • content:上一步返回。
  • privateKey:应用私钥,如何获取参考[如何获取商户私钥]。
  • charset:编码格式。

加签方式这边我想吐槽下:文档上加密方式说是支持 SHA256withRSA 和 SM3WithSM2 两种,但是能用国密加签方式为什么不给我国密配置入口哇,不给入口说支持都是耍流氓啊

标签:支付宝,请求,content,v3,签名,httpPost,id,String
From: https://www.cnblogs.com/yjdmx/p/17918400.html

相关文章

  • 微信小程序canvas实现人员签名
    这里使用获取canvas节点实现的小程序最新的api签字面板效果图        wxml部分:<view class="container" >  <view class="sig_txt">    <canvas type="2d" id="myCanvas"      style="width:{{width}}px;height:{{height}}p......
  • SNMPv3用户安全模型
    1.前言部分SNMPv3与SNMPv2相比有了很大的改进,主要体现在安全性方面:用户认证机制-SNMPv3改用基于用户的安全模型(USM),需要替换v2中的社区字符串认证机制(communitystrings),实现用户管理、认证和加密。加密与数据完整性检查-需要添加支持加密传输和数据完整性检查......
  • Codeforce Round 916(div3)
    CodeforcesRound916(div3)[Problem-A-Codeforces]:ProblemsolvingLogA.题直接看样例进行分析,发现每一次出现的字符代表着用了1分钟来看这道题,每道题都有固定的解题时间,只要达到了这个解题时间,就可以将这题解出来,答案就要加上1;同时要注意将解决过的问题要标记一下;#in......
  • Why Choose Noregon JPRO Professional Diagnostic 2023 v3 Software?
     Welcometotheworldofautomotivediagnostics,whereprecisionmeetsefficiency.WiththeNoregonJPROProfessionalDiagnostic2023v3software,mechanics,technicians,andautomotiveenthusiastscanrevolutionizethewaytheyapproachvehiclediagnost......
  • 手把手教你使用ArkTS中的canvas实现签名板功能
     一、屏幕旋转● 实现签名板的第一个功能就是旋转屏幕。旋转屏幕在各种框架中都有不一样的方式,比如:在H5端,我们一般是使用CSS中的transform属性中的rotate()方法来强制将网页横屏,然后实现一系列功能● 在嵌套第三方APP中,我们一般是调用对应的SDK提供的方法,即可实现旋转屏幕......
  • 如何在 Apple Pages 中插入自己的手写电子签名 All In One
    如何在ApplePages中插入自己的手写电子签名AllInOnesulotionApple的多设备协同能力非常强大,如果您有iPad或是iPhone的话就简单很多啦~选择最上方的“媒体(Media)”按钮->选择“添加速绘(AddSketch)”就可以在iPad或是iPhone上手写签名插入了。https://discussionschi......
  • 打工笔记--------------------winform程序报错CLR20r3签名System.I0.IOException
    先看问题编写了一个程序在我本机运行没有问题,放到别人电脑上就有可能报这种错误System.I0.IOException  首先我问了一下ChatPgt:他说:CLR20r3是一个通用的错误代码,表示在.NETFramework中发生了未处理的异常。System.IO.IOException是与输入/输出操作相关的一个常见......
  • InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Conv
    InternImage:ExploringLarge-ScaleVisionFoundationModelswithDeformableConvolutions*Authors:[[WenhaiWang]],[[JifengDai]],[[ZheChen]],[[ZhenhangHuang]],[[ZhiqiLi]],[[XizhouZhu]],[[XiaoweiHu]],[[TongLu]],[[LeweiLu]],[[HongshengLi]......
  • 安防监控视频管理平台EasyCVR v3.4版如何取消首次登录强制重置密码的操作?
    在视频监控领域,智慧安防平台EasyCVR平台采用了开放式的网络结构,支持高清视频的接入和传输、分发,能提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,此外,高清可视化视频监控平台EasyCVR......
  • helm v3 部署 ingress-nginx
    1、部署helmv3略...()2、添加源并更新[root@master1ingress]#helmrepoaddingress-nginxhttps://kubernetes.github.io/ingress-nginx[root@master1ingress]#helmrepoupdate3、拉取镜像[root@master1ingress]#helmpullingress-nginx/ingress-nginx4、解压并修改......