5.0
90
README.md
@@ -38,7 +38,7 @@ public interface OpenPayment {
|
|||||||
"该结果用于跳转到页面,返回到用户浏览器渲染或重定向跳转到页面。" +
|
"该结果用于跳转到页面,返回到用户浏览器渲染或重定向跳转到页面。" +
|
||||||
"具体使用方法请参考 <a href=\"https://torna.cn\" target=\"_blank\">接入指南</a>"
|
"具体使用方法请参考 <a href=\"https://torna.cn\" target=\"_blank\">接入指南</a>"
|
||||||
)
|
)
|
||||||
@Open(value = "pay.trade.wap.pay", version = "1.0")
|
@Open("pay.trade.wap.pay")
|
||||||
PayTradeWapPayResponse tradeWapPay(PayTradeWapPayRequest request);
|
PayTradeWapPayResponse tradeWapPay(PayTradeWapPayRequest request);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -70,42 +70,66 @@ public class OpenPaymentImpl implements OpenPayment {
|
|||||||
调用:
|
调用:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
@Test
|
@Test
|
||||||
public void testGet() throws Exception {
|
public void testGet() throws Exception {
|
||||||
|
// 公共请求参数
|
||||||
|
Map<String, String> params = new HashMap<String, String>();
|
||||||
|
params.put("app_id", appId);
|
||||||
|
params.put("method", "pay.trade.wap.pay");
|
||||||
|
params.put("format", "json");
|
||||||
|
params.put("charset", "utf-8");
|
||||||
|
params.put("sign_type", "RSA2");
|
||||||
|
params.put("timestamp", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||||
|
params.put("version", "1.0");
|
||||||
|
|
||||||
|
// 业务参数
|
||||||
|
Map<String, Object> bizContent = new HashMap<>();
|
||||||
|
bizContent.put("outTradeNo", "70501111111S001111119");
|
||||||
|
bizContent.put("totalAmount", "9.00");
|
||||||
|
bizContent.put("subject", "衣服");
|
||||||
|
bizContent.put("productCode", "QUICK_WAP_WAY");
|
||||||
|
|
||||||
|
params.put("biz_content", JSON.toJSONString(bizContent));
|
||||||
|
String content = AlipaySignature.getSignContent(params);
|
||||||
|
String sign = AlipaySignature.rsa256Sign(content, privateKey, "utf-8");
|
||||||
|
params.put("sign", sign);
|
||||||
|
|
||||||
|
System.out.println("----------- 请求信息 -----------");
|
||||||
|
System.out.println("请求参数:" + buildParamQuery(params));
|
||||||
|
System.out.println("商户秘钥:" + privateKey);
|
||||||
|
System.out.println("待签名内容:" + content);
|
||||||
|
System.out.println("签名(sign):" + sign);
|
||||||
|
System.out.println("URL参数:" + buildUrlQuery(params));
|
||||||
|
|
||||||
|
System.out.println("----------- 返回结果 -----------");
|
||||||
|
String responseData = postJson(url, params);// 发送请求
|
||||||
|
System.out.println(responseData);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
// 公共请求参数
|
SDK调用
|
||||||
Map<String, String> params = new HashMap<String, String>();
|
|
||||||
params.put("app_id", appId);
|
|
||||||
params.put("method", "pay.trade.wap.pay");
|
|
||||||
params.put("format", "json");
|
|
||||||
params.put("charset", "utf-8");
|
|
||||||
params.put("sign_type", "RSA2");
|
|
||||||
params.put("timestamp", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
|
||||||
params.put("version", "2.0");
|
|
||||||
|
|
||||||
// 业务参数
|
```java
|
||||||
Map<String, Object> bizContent = new HashMap<>();
|
@Test
|
||||||
bizContent.put("out_trade_no", "70501111111S001111119");
|
public void test() {
|
||||||
bizContent.put("total_amount", "9.00");
|
PayTradeWapPayRequest request = new PayTradeWapPayRequest();
|
||||||
bizContent.put("subject", "衣服");
|
|
||||||
bizContent.put("product_code", "QUICK_WAP_WAY");
|
PayTradeWapPayModel model = new PayTradeWapPayModel();
|
||||||
|
model.setOutTradeNo("70501111111S001111119");
|
||||||
|
model.setTotalAmount(new BigDecimal("1000"));
|
||||||
|
model.setSubject("衣服");
|
||||||
|
model.setProductCode("QUICK_WAP_WAY");
|
||||||
|
|
||||||
|
request.setBizModel(model);
|
||||||
|
|
||||||
params.put("biz_content", JSON.toJSONString(bizContent));
|
Result<PayTradeWapPayResponse> result = client.execute(request);
|
||||||
String content = AlipaySignature.getSignContent(params);
|
if (result.isSuccess()) {
|
||||||
String sign = AlipaySignature.rsa256Sign(content, privateKey, "utf-8");
|
PayTradeWapPayResponse response = result.getData();
|
||||||
params.put("sign", sign);
|
System.out.println(response);
|
||||||
|
} else {
|
||||||
System.out.println("----------- 请求信息 -----------");
|
System.out.println(result);
|
||||||
System.out.println("请求参数:" + buildParamQuery(params));
|
|
||||||
System.out.println("商户秘钥:" + privateKey);
|
|
||||||
System.out.println("待签名内容:" + content);
|
|
||||||
System.out.println("签名(sign):" + sign);
|
|
||||||
System.out.println("URL参数:" + buildUrlQuery(params));
|
|
||||||
|
|
||||||
System.out.println("----------- 返回结果 -----------");
|
|
||||||
String responseData = postJson(url, params);// 发送请求
|
|
||||||
System.out.println(responseData);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 整体架构
|
## 整体架构
|
||||||
|
418
changelog.md
@@ -1,419 +1,5 @@
|
|||||||
# changelog
|
# changelog
|
||||||
|
|
||||||
## 4.4.2
|
## 5.0
|
||||||
|
|
||||||
- 优化参数绑定
|
全面重构,欢迎体验:[文档](https://www.yuque.com/u1604442/sop)
|
||||||
|
|
||||||
## 4.4.1
|
|
||||||
|
|
||||||
- 修复单值参数绑定问题
|
|
||||||
|
|
||||||
## 4.4.0
|
|
||||||
|
|
||||||
**【重要】:升级前请阅读 [升级到4.4.0注意事项](./升级到4.4.0注意事项.md)**
|
|
||||||
|
|
||||||
- 优化异常处理
|
|
||||||
- 优化网关多实例数据库重复保存问题
|
|
||||||
- 修复`IP`,`IP+路由ID`,`IP+APP_ID`限流不生效问题
|
|
||||||
|
|
||||||
## 4.3.4
|
|
||||||
|
|
||||||
- 修复Request参数在第一位导致绑定失败问题
|
|
||||||
|
|
||||||
## 4.3.3
|
|
||||||
|
|
||||||
- 修复获取eureka地址问题
|
|
||||||
|
|
||||||
## 4.3.2
|
|
||||||
|
|
||||||
- 修复微服务方法获取不到OpenContext问题
|
|
||||||
|
|
||||||
## 4.3.1
|
|
||||||
|
|
||||||
- 修复serviceId有大小写出现404问题
|
|
||||||
- 修复路有监控错误面板分页问题
|
|
||||||
|
|
||||||
## 4.3.0
|
|
||||||
|
|
||||||
- 升级`spring-boot/spring-cloud/spring-cloud-alibaba`版本
|
|
||||||
- 修复`DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144`问题
|
|
||||||
- 修复压测出现`ClosedChannelException`,`Connection has been closed BEFORE response`问题
|
|
||||||
|
|
||||||
## 4.2.7
|
|
||||||
|
|
||||||
- 修复两个微服务相同path问题
|
|
||||||
- 修复Python-SDK下参数传递问题
|
|
||||||
|
|
||||||
## 4.2.6
|
|
||||||
|
|
||||||
- 优化网关超时处理
|
|
||||||
|
|
||||||
## 4.2.5
|
|
||||||
|
|
||||||
- 修复restful负载均衡问题
|
|
||||||
|
|
||||||
## 4.2.4
|
|
||||||
|
|
||||||
- 修复sop-auth模块启动失败问题
|
|
||||||
|
|
||||||
## 4.2.3
|
|
||||||
|
|
||||||
- 修复nacos的group不生效问题
|
|
||||||
|
|
||||||
## 4.2.2
|
|
||||||
|
|
||||||
- 优化版本号
|
|
||||||
|
|
||||||
## 4.2.1
|
|
||||||
|
|
||||||
- 可指定nacos的group,(`spring.cloud.nacos.discovery.group=xx`)
|
|
||||||
- 修复spring循环依赖问题
|
|
||||||
|
|
||||||
## 4.2.0
|
|
||||||
|
|
||||||
需要执行`sop-upgrade-4.2.0.sql`
|
|
||||||
|
|
||||||
- 新增ISV用户平台
|
|
||||||
- 新增门户网站(portal)
|
|
||||||
- 新增`C++`,`Rust`语言SDK
|
|
||||||
|
|
||||||
## 4.1.0
|
|
||||||
|
|
||||||
需要执行`sop-upgrade-4.1.0.sql`
|
|
||||||
|
|
||||||
- 重构路由监控功能
|
|
||||||
- 升级SpringBoot,SpringCloud,SpringCloudAlibaba版本
|
|
||||||
|
|
||||||
## 4.0.3
|
|
||||||
|
|
||||||
- 可定义业务错误码(见`@Open`注解中的`bizCode`属性)
|
|
||||||
- 文档参数可指定最大长度(使用`@Length(max = xx)`)
|
|
||||||
- 修复返回大文本导致的错误(Exceeded limit on max bytes to buffer : 262144)
|
|
||||||
- 增强参数绑定
|
|
||||||
|
|
||||||
## 4.0.2
|
|
||||||
|
|
||||||
- 支持swagger排序(position属性)
|
|
||||||
|
|
||||||
## 4.0.1
|
|
||||||
|
|
||||||
- 修复超大文本无法请求BUG(设置`spring.codec.max-in-memory-size`无效)
|
|
||||||
|
|
||||||
## 4.0.0(不兼容3.x)
|
|
||||||
|
|
||||||
- 新增@Open注解,代替ApiMapping和ApiAbility
|
|
||||||
- service接入减少代码入侵
|
|
||||||
- 修改admin密码存储规则
|
|
||||||
- 完善example
|
|
||||||
|
|
||||||
### 不兼容部分
|
|
||||||
|
|
||||||
- 移除ApiMapping和ApiAbility,改为Open注解
|
|
||||||
- 移除OpenContext
|
|
||||||
- 移除zuul
|
|
||||||
- 移除对easyopen支持
|
|
||||||
|
|
||||||
## 3.2.1
|
|
||||||
|
|
||||||
- 强化RouteInterceptorContext,可获取微服务信息
|
|
||||||
|
|
||||||
## 3.2.0
|
|
||||||
|
|
||||||
- 使用alibaba cloud
|
|
||||||
- 新增Python,Go版本SDK
|
|
||||||
- 返回结果新增全局request_id
|
|
||||||
- 沙箱环境可填写token
|
|
||||||
|
|
||||||
Hoxton.SR3(Spring Cloud Version), 2.2.1.RELEASE(Spring Cloud Alibaba Version), 2.2.5.RELEASE(Spring Boot Version)
|
|
||||||
|
|
||||||
- 优化pom文件
|
|
||||||
- 优化灰度发布
|
|
||||||
|
|
||||||
## 3.1.5
|
|
||||||
|
|
||||||
修复文件上传大小不一致问题
|
|
||||||
|
|
||||||
## 3.1.4
|
|
||||||
|
|
||||||
- 优化跨域
|
|
||||||
|
|
||||||
## 3.1.3
|
|
||||||
|
|
||||||
- 修复监控日志乱码问题
|
|
||||||
|
|
||||||
## 3.1.2
|
|
||||||
|
|
||||||
- 修复图片上传保存后图片破损问题
|
|
||||||
|
|
||||||
## 3.1.1
|
|
||||||
|
|
||||||
- 修复继承WebMvcConfigurationSupport导致的jackson序列化时间问题
|
|
||||||
- 修复微服务接口返回void网关不会返回code和msg问题
|
|
||||||
|
|
||||||
## 3.1.0
|
|
||||||
|
|
||||||
- 新增路由监控功能
|
|
||||||
- 新增路由拦截器
|
|
||||||
- 优化负载均衡策略
|
|
||||||
|
|
||||||
## 3.0.1
|
|
||||||
|
|
||||||
- 增强国际化消息(现SpringCouldGateway支持英文国际化)
|
|
||||||
- 优化限流配置页
|
|
||||||
|
|
||||||
## 3.0.0
|
|
||||||
|
|
||||||
- 重构spring cloud gateway网关
|
|
||||||
- 重构`预发布/灰度发布环境选择`
|
|
||||||
- zuul和gateway网关二合一,可随意切换
|
|
||||||
- 精简配置文件
|
|
||||||
- 优化文档中心页面
|
|
||||||
- 优化接口限流
|
|
||||||
|
|
||||||
## 2.5.10
|
|
||||||
|
|
||||||
- 优化签名认证,优化校验日志打印
|
|
||||||
|
|
||||||
## 2.5.9
|
|
||||||
|
|
||||||
- 优化获取context-path
|
|
||||||
- 修复结果返回产生的NPE问题
|
|
||||||
|
|
||||||
## 2.5.8
|
|
||||||
|
|
||||||
- 优化参数绑定
|
|
||||||
|
|
||||||
## 2.5.7
|
|
||||||
|
|
||||||
- 优化restful接口调用
|
|
||||||
|
|
||||||
## 2.5.6
|
|
||||||
|
|
||||||
- 优化文档显示
|
|
||||||
- 修复路由拉取接口重复BUG
|
|
||||||
|
|
||||||
## 2.5.5
|
|
||||||
|
|
||||||
- 优化文档显示
|
|
||||||
|
|
||||||
## 2.5.4(不建议使用)
|
|
||||||
|
|
||||||
- 可排除其它服务(`sop.service.exclude=your-serviceId1,your-serviceId2`)
|
|
||||||
|
|
||||||
## 2.5.3(不建议使用)
|
|
||||||
|
|
||||||
- 修复JSR-303校验问题
|
|
||||||
|
|
||||||
## 2.5.2(不建议使用)
|
|
||||||
|
|
||||||
- 修复JSR-303校验枚举对象问题
|
|
||||||
|
|
||||||
## 2.5.1
|
|
||||||
|
|
||||||
- JSR-303支持嵌套校验
|
|
||||||
|
|
||||||
## 2.5.0
|
|
||||||
|
|
||||||
**(需要执行`sop-2.5.0.sql`升级文件)**
|
|
||||||
|
|
||||||
- 网关可校验token [doc](https://durcframework.gitee.io/sop/#/files/10089_%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A0%A1%E9%AA%8Ctoken?t=1572076365259)
|
|
||||||
|
|
||||||
## 2.4.1
|
|
||||||
|
|
||||||
- 优化restful接口调用(如果正在使用此功能,必看 [doc](https://durcframework.gitee.io/sop/#/files/10100_%E6%8F%90%E4%BE%9Brestful%E6%8E%A5%E5%8F%A3?t=1571107529449))
|
|
||||||
|
|
||||||
## 2.4.0
|
|
||||||
|
|
||||||
- 支持自定义限流持续时间(每n秒允许m个请求,需要执行`sop-2.4.0.sql`升级脚本)
|
|
||||||
|
|
||||||
## 2.3.2
|
|
||||||
|
|
||||||
- 支持spring cloud gateway下restful接口调用
|
|
||||||
|
|
||||||
## 2.3.1
|
|
||||||
|
|
||||||
- 修复restful接口调用通配符问题
|
|
||||||
|
|
||||||
## 2.3.0
|
|
||||||
|
|
||||||
- 支持请求restful接口(设置`sop.restful.enable=true`)
|
|
||||||
|
|
||||||
## 2.2.0(需要执行`sop-2.2.0.sql`升级文件)
|
|
||||||
|
|
||||||
- 支持eureka注册中心,见`eureka`分支
|
|
||||||
- 签名内容支持urlencode(设置`sign.urlencode=true`)
|
|
||||||
- 可扩展其它注册中心
|
|
||||||
|
|
||||||
## 2.1.3
|
|
||||||
|
|
||||||
- 优化文件上传校验
|
|
||||||
|
|
||||||
## 2.1.2
|
|
||||||
|
|
||||||
- 优化获取路由配置
|
|
||||||
|
|
||||||
## 2.1.1
|
|
||||||
|
|
||||||
- 修复springmvc获取路由问题
|
|
||||||
|
|
||||||
## 2.1.0
|
|
||||||
|
|
||||||
- 支持分布式限流(redis实现)
|
|
||||||
- 可调整JSR-303校验顺序
|
|
||||||
- 修复springmvc工程注册到nacos无法读取路由配置问题
|
|
||||||
|
|
||||||
## 2.0.0
|
|
||||||
|
|
||||||
- 全面使用nacos,舍弃zookeeper(1.x版本见1.x分支)
|
|
||||||
- 可自定义文档模块显示顺序
|
|
||||||
|
|
||||||
## 1.15.2
|
|
||||||
|
|
||||||
- 优化SpringCloudGateway上传文件功能
|
|
||||||
- 优化SpringCloudGateway动态修改参数功能
|
|
||||||
|
|
||||||
## 1.15.1
|
|
||||||
|
|
||||||
- 修复未配置正确MessageConverter导致的异常
|
|
||||||
|
|
||||||
## 1.15.0
|
|
||||||
|
|
||||||
- 优化预发布、灰度
|
|
||||||
- 网关动态修改请求参数
|
|
||||||
- 支持swagger-bootstrap插件
|
|
||||||
- 优化admin服务列表显示
|
|
||||||
- 优化文档刷新逻辑
|
|
||||||
- 新增测试all in one
|
|
||||||
- 修复中文乱码问题
|
|
||||||
|
|
||||||
## 1.14.0
|
|
||||||
|
|
||||||
- 支持预发布、灰度发布环境
|
|
||||||
|
|
||||||
## 1.13.7
|
|
||||||
|
|
||||||
- 修复修复context-path识别问题
|
|
||||||
|
|
||||||
## 1.13.6
|
|
||||||
|
|
||||||
- 修复@RequestBody不能绑定问题
|
|
||||||
|
|
||||||
## 1.13.5
|
|
||||||
|
|
||||||
- 修复postJson下version获取不到问题
|
|
||||||
|
|
||||||
## 1.13.4
|
|
||||||
|
|
||||||
- 修复admin服务列表最后更新时间不显示问题
|
|
||||||
- 优化上传路由配置逻辑
|
|
||||||
- 微服务可获得access_token, notify_url参数
|
|
||||||
|
|
||||||
## 1.13.3
|
|
||||||
|
|
||||||
- 优化参数绑定
|
|
||||||
|
|
||||||
## 1.13.2
|
|
||||||
|
|
||||||
- 修复json方式请求获取不到参数问题
|
|
||||||
- 微服务端新增获取开放平台请求参数
|
|
||||||
|
|
||||||
## 1.13.1
|
|
||||||
|
|
||||||
- 支持json方式请求(application/json)
|
|
||||||
- 支持传统web服务开发(见文档`传统web开发`)
|
|
||||||
|
|
||||||
## 1.13.0
|
|
||||||
|
|
||||||
- 新增IP黑名单
|
|
||||||
|
|
||||||
## 1.12.4
|
|
||||||
|
|
||||||
- 优化属性文件配置
|
|
||||||
- 新增sleuth接入文档
|
|
||||||
- admin的isv列表新增备注字段
|
|
||||||
|
|
||||||
## 1.12.3
|
|
||||||
|
|
||||||
- 修复删除zk节点导致的BUG
|
|
||||||
|
|
||||||
## 1.12.2
|
|
||||||
|
|
||||||
- 沙盒支持文件上传
|
|
||||||
|
|
||||||
## 1.12.1
|
|
||||||
|
|
||||||
- 修复重启网关路由状态重置BUG
|
|
||||||
- 优化SpringCloudGateway
|
|
||||||
|
|
||||||
## 1.12.0
|
|
||||||
|
|
||||||
- admin后台新增角色管理
|
|
||||||
- 支持nacos作为注册中心
|
|
||||||
|
|
||||||
## 1.11.0
|
|
||||||
|
|
||||||
- 秘钥管理改造
|
|
||||||
- 服务端返回sign
|
|
||||||
- 新增SDK返回sign处理
|
|
||||||
- 新增沙箱环境
|
|
||||||
|
|
||||||
## 1.10.0
|
|
||||||
|
|
||||||
- 新增监控日志
|
|
||||||
|
|
||||||
## 1.9.0
|
|
||||||
|
|
||||||
- 改造限流
|
|
||||||
- 增强参数绑定
|
|
||||||
|
|
||||||
## 1.8.0
|
|
||||||
|
|
||||||
- 支持文件上传
|
|
||||||
|
|
||||||
## 1.7.2
|
|
||||||
|
|
||||||
- 修复微服务参数绑定BUG
|
|
||||||
- Admin新增vue界面
|
|
||||||
|
|
||||||
## 1.7.1
|
|
||||||
|
|
||||||
- 支持接口名版本号放在url后面
|
|
||||||
|
|
||||||
## 1.7.0
|
|
||||||
|
|
||||||
- 可自定义数据节点名称
|
|
||||||
|
|
||||||
## 1.6.0
|
|
||||||
|
|
||||||
- 新增应用授权
|
|
||||||
|
|
||||||
## 1.5.0
|
|
||||||
|
|
||||||
- admin新增signType字段
|
|
||||||
- 修复easyopen接入无法访问BUG
|
|
||||||
|
|
||||||
## 1.4.0
|
|
||||||
|
|
||||||
- 新增文档分组显示
|
|
||||||
- 支持easyopen文档注解
|
|
||||||
- BUG修复
|
|
||||||
|
|
||||||
## 1.3.0
|
|
||||||
|
|
||||||
- 新增接口限流功能 [doc](http://durcframework.gitee.io/sop/#/files/10092_%E6%8E%A5%E5%8F%A3%E9%99%90%E6%B5%81?t=1555378655699)
|
|
||||||
- 新增文档整合功能 [doc](http://durcframework.gitee.io/sop/#/files/10041_%E7%BC%96%E5%86%99%E6%96%87%E6%A1%A3?t=1555378655698)
|
|
||||||
- 新增springmvc项目接入demo
|
|
||||||
|
|
||||||
## 1.2.0
|
|
||||||
|
|
||||||
- SOP Admin新增用户登录
|
|
||||||
- 新增基础SDK(Java,C#) [doc](http://durcframework.gitee.io/sop/#/files/10095_SDK%E5%BC%80%E5%8F%91?t=1554693919597)
|
|
||||||
|
|
||||||
## 1.1.0
|
|
||||||
|
|
||||||
- 新增ISV管理 [doc](http://durcframework.gitee.io/sop/#/files/10085_ISV%E7%AE%A1%E7%90%86?t=1554123435621)
|
|
||||||
- 新增接口授权 [doc](http://durcframework.gitee.io/sop/#/files/10090_%E8%B7%AF%E7%94%B1%E6%8E%88%E6%9D%83?t=1554123435621)
|
|
||||||
|
|
||||||
## 1.0.0
|
|
||||||
|
|
||||||
- 第一次发布
|
|
||||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 16 KiB |
@@ -98,7 +98,6 @@ public class OpenStoryImpl implements OpenStory {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StoryResponse upload2(StorySaveRequest storySaveDTO, FileData idCardFront, FileData idCardBack) {
|
public StoryResponse upload2(StorySaveRequest storySaveDTO, FileData idCardFront, FileData idCardBack) {
|
||||||
List<String> list = new ArrayList<>();
|
|
||||||
System.out.println("upload:" + storySaveDTO);
|
System.out.println("upload:" + storySaveDTO);
|
||||||
checkFile(Arrays.asList(idCardFront, idCardBack));
|
checkFile(Arrays.asList(idCardFront, idCardBack));
|
||||||
|
|
||||||
|
@@ -7,5 +7,6 @@ import lombok.Data;
|
|||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class DemoFileUploadModel {
|
public class DemoFileUploadModel {
|
||||||
private String remark;
|
private String storyName;
|
||||||
|
private String addTime;
|
||||||
}
|
}
|
||||||
|
@@ -1,13 +1,13 @@
|
|||||||
package com.gitee.sop.sdk.request;
|
package com.gitee.sop.sdk.request;
|
||||||
|
|
||||||
import com.gitee.sop.sdk.response.DemoFileUploadResponse;
|
import com.gitee.sop.sdk.response.GetStoryResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author 六如
|
* @author 六如
|
||||||
*/
|
*/
|
||||||
public class DemoFileUploadRequest extends BaseRequest<DemoFileUploadResponse> {
|
public class DemoFileUploadRequest extends BaseRequest<GetStoryResponse> {
|
||||||
@Override
|
@Override
|
||||||
protected String method() {
|
protected String method() {
|
||||||
return "file.upload";
|
return "story.upload.more";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,23 @@
|
|||||||
|
package com.gitee.sop.sdk.request;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pay.trade.wap.pay(手机网站支付接口)
|
||||||
|
*
|
||||||
|
* @author 六如
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PayTradeWapPayModel {
|
||||||
|
|
||||||
|
private String outTradeNo;
|
||||||
|
|
||||||
|
private BigDecimal totalAmount;
|
||||||
|
|
||||||
|
private String subject;
|
||||||
|
|
||||||
|
private String productCode;
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,30 @@
|
|||||||
|
package com.gitee.sop.sdk.request;
|
||||||
|
|
||||||
|
import com.gitee.sop.sdk.response.PayTradeWapPayResponse;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pay.trade.wap.pay(手机网站支付接口)
|
||||||
|
*
|
||||||
|
* @author 六如
|
||||||
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Data
|
||||||
|
public class PayTradeWapPayRequest extends BaseRequest<PayTradeWapPayResponse> {
|
||||||
|
|
||||||
|
private String outTradeNo;
|
||||||
|
|
||||||
|
private BigDecimal totalAmount;
|
||||||
|
|
||||||
|
private String subject;
|
||||||
|
|
||||||
|
private String productCode;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String method() {
|
||||||
|
return "pay.trade.wap.pay";
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,13 @@
|
|||||||
|
package com.gitee.sop.sdk.response;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author 六如
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PayTradeWapPayResponse {
|
||||||
|
|
||||||
|
private String pageRedirectionData;
|
||||||
|
|
||||||
|
}
|
@@ -8,14 +8,21 @@ import com.gitee.sop.sdk.model.DemoFileUploadModel;
|
|||||||
import com.gitee.sop.sdk.model.GetStoryModel;
|
import com.gitee.sop.sdk.model.GetStoryModel;
|
||||||
import com.gitee.sop.sdk.request.DemoFileUploadRequest;
|
import com.gitee.sop.sdk.request.DemoFileUploadRequest;
|
||||||
import com.gitee.sop.sdk.request.GetStoryRequest;
|
import com.gitee.sop.sdk.request.GetStoryRequest;
|
||||||
|
import com.gitee.sop.sdk.request.PayTradeWapPayModel;
|
||||||
|
import com.gitee.sop.sdk.request.PayTradeWapPayRequest;
|
||||||
import com.gitee.sop.sdk.response.DemoFileUploadResponse;
|
import com.gitee.sop.sdk.response.DemoFileUploadResponse;
|
||||||
import com.gitee.sop.sdk.response.GetStoryResponse;
|
import com.gitee.sop.sdk.response.GetStoryResponse;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.gitee.sop.sdk.response.PayTradeWapPayResponse;
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class SdkTest extends TestCase {
|
public class SdkTest extends TestCase {
|
||||||
String url = "http://localhost:8081/api";
|
String url = "http://localhost:8081/api";
|
||||||
@@ -33,6 +40,25 @@ public class SdkTest extends TestCase {
|
|||||||
// 声明一个就行
|
// 声明一个就行
|
||||||
OpenClient client = new OpenClient(url, appId, privateKeyIsv, publicKeyPlatform);
|
OpenClient client = new OpenClient(url, appId, privateKeyIsv, publicKeyPlatform);
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
PayTradeWapPayRequest request = new PayTradeWapPayRequest();
|
||||||
|
PayTradeWapPayModel model = new PayTradeWapPayModel();
|
||||||
|
model.setOutTradeNo("70501111111S001111119");
|
||||||
|
model.setTotalAmount(new BigDecimal("1000"));
|
||||||
|
model.setSubject("衣服");
|
||||||
|
model.setProductCode("QUICK_WAP_WAY");
|
||||||
|
request.setBizModel(model);
|
||||||
|
|
||||||
|
Result<PayTradeWapPayResponse> result = client.execute(request);
|
||||||
|
if (result.isSuccess()) {
|
||||||
|
PayTradeWapPayResponse response = result.getData();
|
||||||
|
System.out.println(response);
|
||||||
|
} else {
|
||||||
|
System.out.println(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGet() {
|
public void testGet() {
|
||||||
// 创建请求对象
|
// 创建请求对象
|
||||||
@@ -62,23 +88,22 @@ public class SdkTest extends TestCase {
|
|||||||
DemoFileUploadRequest request = new DemoFileUploadRequest();
|
DemoFileUploadRequest request = new DemoFileUploadRequest();
|
||||||
|
|
||||||
DemoFileUploadModel model = new DemoFileUploadModel();
|
DemoFileUploadModel model = new DemoFileUploadModel();
|
||||||
model.setRemark("上传文件参数");
|
model.setStoryName("上传文件参数");
|
||||||
|
model.setAddTime( new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||||
request.setBizModel(model);
|
request.setBizModel(model);
|
||||||
|
|
||||||
String root = System.getProperty("user.dir");
|
String root = System.getProperty("user.dir");
|
||||||
System.out.println(root);
|
System.out.println(root);
|
||||||
// 这里演示将resources下的两个文件上传到服务器
|
// 这里演示将resources下的两个文件上传到服务器
|
||||||
request.addFile(new UploadFile("file1", new File(root + "/src/main/resources/file1.txt")));
|
request.addFile(new UploadFile("idCardFront", new File(root + "/src/main/resources/file1.txt")));
|
||||||
request.addFile(new UploadFile("file2", new File(root + "/src/main/resources/file2.txt")));
|
request.addFile(new UploadFile("idCardBack", new File(root + "/src/main/resources/file2.txt")));
|
||||||
|
|
||||||
Result<DemoFileUploadResponse> result = client.execute(request);
|
Result<GetStoryResponse> result = client.execute(request);
|
||||||
|
|
||||||
System.out.println("--------------------");
|
System.out.println("--------------------");
|
||||||
if (result.isSuccess()) {
|
if (result.isSuccess()) {
|
||||||
DemoFileUploadResponse response = result.getData();
|
GetStoryResponse response = result.getData();
|
||||||
List<DemoFileUploadResponse.FileMeta> responseFiles = response.getFiles();
|
System.out.println("您上传的文件信息:" + response);
|
||||||
System.out.println("您上传的文件信息:");
|
|
||||||
responseFiles.forEach(System.out::println);
|
|
||||||
} else {
|
} else {
|
||||||
System.out.println(JSON.toJSONString(result));
|
System.out.println(JSON.toJSONString(result));
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 16 KiB |