restful接口返回JSONObject和父类抽象实现类设计,请求头获取sign和支付宝RSA签名验签工具类方法
restful接口返回JSONObject和父类抽象实现类设计,请求头获取sign和支付宝RSA签名验签工具类方法
1.
JSONObject可以通用数据的灵活性,类似Map数据,数据字段不清晰。具体返回类,如:AutoPayResultVo
// http响应结果载体
JSONObject result = new JSONObject();
// 业务处理结果载体
JSONObject response = new JSONObject();
response.put("code", "40004");
response.put("msg", "Business Failed");
response.put("sub_code", "ISV-VERIFICATION-FAILED");
response.put("sub_msg", "验签失败");
result.put("response",response);
2.父类实现通用接口设计,以下伪代码。
//2.1使用父类Object
private void saveSpiAndOpenApiService(Object request, Object result) {
//instanceof判断
if(request instanceof CreateRequest) {
}
}
//2.2使用父类BaseOutResponseVo,获取签名方法
private BaseSignResponseVo getSign(BaseOutResponseVo response) throws AlipayApiException {
}
//子类实现类
CreateResponse extends BaseOutResponseVo
ReleaseResponse extends BaseOutResponseVo
SyncResponse extends BaseOutResponseVo
//调用,调用获取签名
getSign(createResponse);
getSign(releaseResponse);
getSign(syncResponse);
3.HttpServletRequest获取header参数 sign
//接口增加 HttpServletRequest request, 参数,也可以不写,如果需要从请求头中获取参数,则需要该request参数。
@RequestMapping(value = "/public/pay/payBatch",method=RequestMethod.POST)
public Response<AutoPayResultVo> pay(@Valid HttpServletRequest request, @RequestBody PayVo payVo,BindingResult result){
//HttpServletRequest获取header参数 sign
Map<String, String> headers = getHeaders(request);
String signStr = headers.get("byte-signature");
}
//从请求头中获取参数
private static Map<String, String> getHeaders(HttpServletRequest request) {
Map<String, String> headerMap = new HashMap<>();
Enumeration<String> enumeration = request.getHeaderNames();
while (enumeration.hasMoreElements()) {
String name = enumeration.nextElement();
String value = request.getHeader(name);
headerMap.put(name, value);
}
return headerMap;
}
4.
支付宝sdk签名和验签,可以按工具类来使用。
compile("com.alipay.sdk:alipay-sdk-java:4.39.70.ALL")
商户 》》支付宝
//商户私钥签名
String sign = AlipaySignature.rsaSign(contentToSignJson, isvPrivateKey, "UTF-8", "RSA2");
//商户公钥验签
boolean isPass = AlipaySignature.rsaCheck(GsonUtils.toJson(request), sign, alipayPublicKey, "UTF-8","RSA2");
支付宝 》》 商户
//支付宝私钥签名
//支付宝公钥解密
restful接口返回JSONObject和父类抽象实现类设计,请求头获取sign和支付宝RSA签名验签工具类方法的更多相关文章
- Python 接口:从协议到抽象基类
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica } 抽象基类的常见用途:实现接口时作为超类使用.然后,说明抽象基类如何检查 ...
- SpringBoot Restful 接口实现
目录 SpringBoot 核心注解 SpringBoot Restful 接口实现 封装响应数据 SpringBoot 核心注解 SpringBoot 基础入门 注解 说明 Component 声明 ...
- Fluent_Python_Part4面向对象,11-iface-abc,协议(接口),抽象基类
第四部分第11章,接口:从协议到抽象基类(重点讲抽象基类) 接口就是实现特定角色的方法集合. 严格来说,协议是非正式的接口(只由文档约束),正式接口会施加限制(抽象基类对接口一致性的强制). 在Pyt ...
- Python抽象基类:ABC谢谢你,因为有你,温暖了四季!
Python抽象基类:ABC谢谢你,因为有你,温暖了四季! Python抽象基类:ABC谢谢你,因为有你,温暖了四季! 实例方法.类方法和静态方法 抽象类 具名元组 参考资料 最近阅读了<Pyt ...
- 【Python】【元编程】【从协议到抽象基类】
"""class Vector2d: typecode = 'd' def __init__(self,x,y): self.__x = float(x) self.__ ...
- Python高级主题:Python ABC(抽象基类)
#抽象类实例 作用统一规范接口,降低使用复杂度.import abcclass Animal(metaclass = abc.ABCMeta): ##只能被继承,不能实例化,实例化会报错 @abc.a ...
- Python中的对象行为与特殊方法(二)类型检查与抽象基类
类型检查 创建类的实例时,该实例的类型为类本身: class Foo(object): pass f = Foo() 要测试实例是否属于某个类,可以使用type()内置函数: >>> ...
- SpringBoot中使用切面的每次传的参数,进行解析,验签,并返回解码后的参数
目的,在每次请求的时候,对每次传的参数,进行解析,验签,并返回解码后的参数, 以json传递: 例子背景: IOT平台提供对外可访问的接口, 需要对所有参数的传递做到 不泄露.认证的目的:所以需要在每 ...
- Java中使用JSONTokener判断接口返回字符串是JSONObject还是JSONArray
今天在接口对接中,遇到一个问题,对方接口返回的JSONString,类型不确定,所以需要先做判断再进行处理.查阅资料后使用JSONTokener可进行处理,特此记录. String ret = ord ...
- SpringBoot第十一集:整合Swagger3.0与RESTful接口整合返回值(2020最新最易懂)
SpringBoot第十一集:整合Swagger3.0与RESTful接口整合返回值(2020最新最易懂) 一,整合Swagger3.0 随着Spring Boot.Spring Cloud等微服务的 ...
随机推荐
- HBase读链路分析
简介:HBase的存储引擎是基于LSM-Like树实现的,更新操作不会直接去更新数据,而是使用各种type字段(put,delete)来标记一个新的多版本数据,采用定期compaction的形式来归 ...
- [Py] Jupyter 写入和执行 python 文件
以 %%writefile request.py 开头. 下面写 python 代码,然后 shift + enter 键,可以把 python 代码写入开头指定的文件中,没有则自动创建. 以 %ru ...
- [PHP] 浅谈 Laravel Authorization 的 gates 与 policies
首先要区分 Authentication 与 Authorization,认证和授权,粗细有别. 授权(Authorization) 有两种主要方式,Gates 和 Policies. Gates 和 ...
- 18.基于Consul的服务发现和ConsulManager管理
192.168.10.14 prometheus.consul 192.168.10.100 各类服务 一.基于Consul的服务发现 Consul 是由 HashiCorp 开发的一个支持多数据中心 ...
- spannerlib优雅的go异常处理
蹩脚的go 异常处理 一般写go的人,如果他不是写算法,正常写业务代码的话,可能都会为优雅的异常处理而烦恼,因为脑子抽筋的go设计者们,总是感觉语法糖是一种很低级的东西.但是在我们大多数公司的业务逻辑 ...
- 在 Visual Studio 中规范化文件编辑
1 配置文件存放 生成了对应的 .editorconfig 文件,存放在仓储的根目录.即对整个仓储所有的用 VS 作为 IDE 编辑的项目生效. 同时支持子目录有自己的 .editorconfig 文 ...
- Oracle和达梦:根据外键名字查询表名
根据外键名字查询表名 select * from user_cons_columns cl where cl.constraint_name = '外键名';
- 老外为了在MacBook上玩原神,让M1支持了所有iOS应用 | Github每周精彩分享第一期
大家好,这里是每周更新的Github有趣项目分享,我是每周都在吃瓜的蛮三刀酱. 我会从Github热门榜里选出 高质量.有趣,牛B 的开源项目进行分享. 废话不多说,看看最近有什么有意思的Github ...
- WPF 纯xaml实现控件运动动画
1.Image控件加载后上下运动 2.Image控件可以放在Grid等布局控件中 3.指定加载时触发动画: EventTrigger RoutedEvent="Image.Loaded&qu ...
- EasyExcel处理Mysql百万数据的导入导出案例,秒级效率,拿来即用!
一.写在开头 今天终于更新新专栏 <EfficientFarm> 的第二篇博文啦,本文主要来记录一下对于EasyExcel的高效应用,包括对MySQL数据库百万级数据量的导入与导出操作,以 ...