Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
payment
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
iuav
payment
Commits
24c167a4
提交
24c167a4
authored
8月 01, 2023
作者:
zhenjie
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop'
上级
45bd5b8a
7d936f14
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
34 个修改的文件
包含
1213 行增加
和
16 行删除
+1213
-16
deployment.yaml
kustomization/base/deployment.yaml
+4
-6
kustomization.yaml
kustomization/overlays/dev/kustomization.yaml
+1
-1
pom.xml
pom.xml
+63
-0
PayMentApplication.java
src/main/java/com/mmc/payment/PayMentApplication.java
+2
-0
Insert.java
...n/java/com/mmc/payment/common/publicinterface/Insert.java
+9
-0
UserSystemConstant.java
...ain/java/com/mmc/payment/constant/UserSystemConstant.java
+51
-0
WechatConstant.java
src/main/java/com/mmc/payment/constant/WechatConstant.java
+11
-0
BaseController.java
src/main/java/com/mmc/payment/controller/BaseController.java
+40
-0
WechatPayController.java
.../java/com/mmc/payment/controller/WechatPayController.java
+88
-0
WechatPayDao.java
src/main/java/com/mmc/payment/dao/WechatPayDao.java
+25
-0
ApplyRefundLogDO.java
...n/java/com/mmc/payment/entity/order/ApplyRefundLogDO.java
+33
-0
WxPayLogDO.java
src/main/java/com/mmc/payment/entity/order/WxPayLogDO.java
+39
-0
OrderPayStatus.java
src/main/java/com/mmc/payment/enums/OrderPayStatus.java
+58
-0
UserAppApi.java
src/main/java/com/mmc/payment/feign/UserAppApi.java
+60
-0
FeignConfiguration.java
...java/com/mmc/payment/feign/config/FeignConfiguration.java
+21
-0
UserAppApiHystrix.java
...java/com/mmc/payment/feign/hystrix/UserAppApiHystrix.java
+40
-0
AuthSignatureFilter.java
...main/java/com/mmc/payment/filter/AuthSignatureFilter.java
+2
-1
LoginSuccessDTO.java
.../java/com/mmc/payment/model/dto/user/LoginSuccessDTO.java
+34
-0
UserAccountSimpleDTO.java
.../com/mmc/payment/model/dto/user/UserAccountSimpleDTO.java
+9
-6
ApplyRefundVO.java
...in/java/com/mmc/payment/model/vo/order/ApplyRefundVO.java
+28
-0
OrderRequestParamsVO.java
.../com/mmc/payment/model/vo/order/OrderRequestParamsVO.java
+28
-0
UserPayInfoVO.java
...in/java/com/mmc/payment/model/vo/order/UserPayInfoVO.java
+27
-0
WxPayLogVO.java
src/main/java/com/mmc/payment/model/vo/order/WxPayLogVO.java
+37
-0
BUserAccountQO.java
...in/java/com/mmc/payment/model/vo/user/BUserAccountQO.java
+69
-0
CompanyInfoVO.java
...ain/java/com/mmc/payment/model/vo/user/CompanyInfoVO.java
+53
-0
CooperationTagVO.java
.../java/com/mmc/payment/model/vo/user/CooperationTagVO.java
+34
-0
RepoCashServiceImpl.java
...ava/com/mmc/payment/service/Impl/RepoCashServiceImpl.java
+1
-1
WechatPayServiceImpl.java
...va/com/mmc/payment/service/Impl/WechatPayServiceImpl.java
+0
-0
WechatPayService.java
src/main/java/com/mmc/payment/service/WechatPayService.java
+33
-0
WxConfigUtils.java
src/main/java/com/mmc/payment/util/WxConfigUtils.java
+49
-0
application-dev.yml
src/main/resources/application-dev.yml
+52
-0
application-local.yml
src/main/resources/application-local.yml
+50
-1
application-prod.yml
src/main/resources/application-prod.yml
+55
-0
WechatPayDao.xml
src/main/resources/mapper/WechatPayDao.xml
+107
-0
没有找到文件。
kustomization/base/deployment.yaml
浏览文件 @
24c167a4
...
@@ -19,9 +19,9 @@ spec:
...
@@ -19,9 +19,9 @@ spec:
-
name
:
payment
-
name
:
payment
image
:
REGISTRY/NAMESPACE/IMAGE:TAG
image
:
REGISTRY/NAMESPACE/IMAGE:TAG
readinessProbe
:
readinessProbe
:
initialDelaySeconds
:
480
initialDelaySeconds
:
15
periodSeconds
:
10
periodSeconds
:
5
failureThreshold
:
2
0
failureThreshold
:
1
0
httpGet
:
httpGet
:
path
:
/payment/actuator/health/readiness
path
:
/payment/actuator/health/readiness
port
:
payment-port
port
:
payment-port
...
@@ -31,9 +31,7 @@ spec:
...
@@ -31,9 +31,7 @@ spec:
-
name
:
localtime
-
name
:
localtime
mountPath
:
/etc/localtime
mountPath
:
/etc/localtime
readOnly
:
true
readOnly
:
true
resources
:
resources
:
{
}
limits
:
cpu
:
100m
ports
:
ports
:
-
containerPort
:
8088
-
containerPort
:
8088
name
:
payment-port
name
:
payment-port
...
...
kustomization/overlays/dev/kustomization.yaml
浏览文件 @
24c167a4
...
@@ -14,4 +14,4 @@ patches:
...
@@ -14,4 +14,4 @@ patches:
images
:
images
:
-
name
:
REGISTRY/NAMESPACE/IMAGE:TAG
-
name
:
REGISTRY/NAMESPACE/IMAGE:TAG
newName
:
mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/payment
newName
:
mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/payment
newTag
:
bf09b8fcc929d18f19e3d92b52a9eb85cdc3b5c9
newTag
:
01f38f32f51899d7bdc6a4ec9743138ad2011e65
pom.xml
浏览文件 @
24c167a4
...
@@ -14,8 +14,10 @@
...
@@ -14,8 +14,10 @@
<name>
payment
</name>
<name>
payment
</name>
<description>
Demo project for Spring Boot
</description>
<description>
Demo project for Spring Boot
</description>
<properties>
<properties>
<spring-cloud.version>
Hoxton.SR12
</spring-cloud.version>
<java.version>
1.8
</java.version>
<java.version>
1.8
</java.version>
</properties>
</properties>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
...
@@ -23,6 +25,31 @@
...
@@ -23,6 +25,31 @@
<scope>
test
</scope>
<scope>
test
</scope>
</dependency>
</dependency>
<!-- 微信支付相关 -->
<dependency>
<groupId>
com.github.wechatpay-apiv3
</groupId>
<artifactId>
wechatpay-apache-httpclient
</artifactId>
<version>
0.4.9
</version>
</dependency>
<dependency>
<groupId>
com.github.wxpay
</groupId>
<artifactId>
wxpay-sdk
</artifactId>
<version>
0.0.3
</version>
</dependency>
<dependency>
<groupId>
com.github.wechatpay-apiv3
</groupId>
<artifactId>
wechatpay-java
</artifactId>
<version>
0.2.10
</version>
</dependency>
<!-- 工具类 -->
<dependency>
<groupId>
cn.hutool
</groupId>
<artifactId>
hutool-all
</artifactId>
<version>
5.8.16
</version>
</dependency>
<dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<groupId>
com.alibaba
</groupId>
<artifactId>
druid
</artifactId>
<artifactId>
druid
</artifactId>
...
@@ -80,7 +107,43 @@
...
@@ -80,7 +107,43 @@
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-actuator
</artifactId>
<artifactId>
spring-boot-starter-actuator
</artifactId>
</dependency>
</dependency>
<!-- 引入 Feign, 可以以声明的方式调用微服务 -->
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-openfeign
</artifactId>
</dependency>
<!-- 使用okhttp-feign-连接池技术 -->
<dependency>
<groupId>
io.github.openfeign
</groupId>
<artifactId>
feign-okhttp
</artifactId>
</dependency>
<!-- 引入服务容错 Hystrix 的依赖 -->
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-netflix-hystrix
</artifactId>
<exclusions>
<exclusion>
<groupId>
com.google.guava
</groupId>
<artifactId>
guava
</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencies>
<!-- 标识 SpringCloud 的版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-dependencies
</artifactId>
<version>
${spring-cloud.version}
</version>
<type>
pom
</type>
<scope>
import
</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<build>
<plugins>
<plugins>
...
...
src/main/java/com/mmc/payment/PayMentApplication.java
浏览文件 @
24c167a4
...
@@ -2,8 +2,10 @@ package com.mmc.payment;
...
@@ -2,8 +2,10 @@ package com.mmc.payment;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
@SpringBootApplication
@SpringBootApplication
@EnableFeignClients
(
basePackages
=
"com.mmc.payment.feign"
)
public
class
PayMentApplication
{
public
class
PayMentApplication
{
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
...
...
src/main/java/com/mmc/payment/common/publicinterface/Insert.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
common
.
publicinterface
;
/**
* @author: zj
* @Date: 2023/5/16 16:32
*/
public
interface
Insert
{
}
\ No newline at end of file
src/main/java/com/mmc/payment/constant/UserSystemConstant.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
constant
;
import
lombok.Data
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
/**
* @author: zj
* @Date: 2023/5/16 13:34
*/
@Data
@Component
public
class
UserSystemConstant
{
@Value
(
"${wx.app.id}"
)
private
String
wxAppId
;
@Value
(
"${wx.app.secret}"
)
private
String
wxAppSecret
;
@Value
(
"${wx.app.miniprogram-state}"
)
private
String
miniProgramState
;
@Value
(
"${wx.app.env-version}"
)
private
String
envVersion
;
@Value
(
"${wx.sub.appid}"
)
private
String
wxSubAppId
;
@Value
(
"${wx.sub.secret}"
)
private
String
wxSubSecret
;
@Value
(
"${wx.pay.mchid}"
)
private
String
mchid
;
@Value
(
"${wx.pay.api-v3-key}"
)
private
String
apiv3Key
;
@Value
(
"${wx.pay.mch-number}"
)
private
String
mchNumber
;
@Value
(
"${wx.pay.notify-url}"
)
private
String
notifyUrl
;
@Value
(
"${data.file.url}"
)
private
String
privateKeyFromPath
;
@Value
(
"${wx.pay.refund-notify-url}"
)
private
String
refundNotifyUrl
;
}
src/main/java/com/mmc/payment/constant/WechatConstant.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
constant
;
/**
* @Author LW
* @date 2023/7/19 17:10
* 概要:
*/
public
interface
WechatConstant
{
String
privateKeyPath
=
"src/main/resources/apiclient_key.pem"
;
Integer
ORDER_PAY_SUCCESS_STATUS_CODE
=
200
;
}
src/main/java/com/mmc/payment/controller/BaseController.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
controller
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.mmc.payment.common.result.ResultEnum
;
import
com.mmc.payment.exception.BizException
;
import
com.mmc.payment.model.dto.user.LoginSuccessDTO
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
javax.servlet.http.HttpServletRequest
;
/**
* @author: zj
* @Date: 2023/5/25 18:11
*/
public
abstract
class
BaseController
{
@Autowired
private
StringRedisTemplate
stringRedisTemplate
;
/**
* 使用token从redis获取用户信息
*
* @param request
* @return
*/
public
LoginSuccessDTO
getUserLoginInfoFromRedis
(
HttpServletRequest
request
)
{
String
token
=
request
.
getHeader
(
"token"
);
if
(
StringUtils
.
isBlank
(
token
))
{
throw
new
BizException
(
ResultEnum
.
LOGIN_ACCOUNT_STATUS_ERROR
);
}
String
json
=
stringRedisTemplate
.
opsForValue
().
get
(
token
);
if
(
StringUtils
.
isBlank
(
json
))
{
throw
new
BizException
(
ResultEnum
.
LOGIN_ACCOUNT_STATUS_ERROR
);
}
LoginSuccessDTO
loginSuccessDTO
=
JSONObject
.
parseObject
(
json
,
LoginSuccessDTO
.
class
);
return
loginSuccessDTO
;
}
}
src/main/java/com/mmc/payment/controller/WechatPayController.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
controller
;
import
com.mmc.payment.common.result.ResultBody
;
import
com.mmc.payment.model.vo.order.ApplyRefundVO
;
import
com.mmc.payment.model.vo.order.OrderRequestParamsVO
;
import
com.mmc.payment.model.vo.order.UserPayInfoVO
;
import
com.mmc.payment.service.WechatPayService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiResponse
;
import
io.swagger.annotations.ApiResponses
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.IOException
;
import
java.util.Map
;
/**
* @Author LW
* @date 2023/7/19 14:26
* 概要:
*/
@Api
(
tags
=
{
"微信支付-相关接口"
})
@RestController
@RequestMapping
(
"/wechat/"
)
public
class
WechatPayController
extends
BaseController
{
@Resource
WechatPayService
wechatPayService
;
@ApiOperation
(
value
=
"小程序调起支付API"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"pay"
)
public
Map
orderPay
(
@RequestBody
OrderRequestParamsVO
orderRequestParamsVO
,
HttpServletRequest
request
)
throws
IOException
{
return
wechatPayService
.
orderPay
(
orderRequestParamsVO
,
this
.
getUserLoginInfoFromRedis
(
request
).
getUserAccountId
(),
request
);
}
@ApiOperation
(
value
=
"支付异步通知"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"payCallback"
)
public
Map
payCallback
(
HttpServletRequest
request
)
{
return
wechatPayService
.
payCallback
(
request
);
}
@ApiOperation
(
value
=
"关闭订单"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"closeOrder"
)
public
ResultBody
closeOrder
(
String
orderNo
)
{
return
wechatPayService
.
closeOrder
(
orderNo
);
}
@ApiOperation
(
value
=
"根据交易号或订单编号查询订单"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"queryOrder"
)
public
ResultBody
queryOrder
(
@RequestParam
(
required
=
false
)
String
transactionId
,
@RequestParam
(
required
=
false
)
String
orderNo
)
{
return
wechatPayService
.
queryOrder
(
transactionId
,
orderNo
);
}
@ApiOperation
(
value
=
"申请退款"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"applyRefund"
)
public
ResultBody
applyRefund
(
@RequestBody
ApplyRefundVO
applyRefundVO
)
{
return
wechatPayService
.
applyRefund
(
applyRefundVO
);
}
@ApiOperation
(
value
=
"退款异步通知"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"refundCallback"
)
public
Map
refundCallback
(
HttpServletRequest
request
)
{
return
wechatPayService
.
refundCallback
(
request
);
}
@ApiOperation
(
value
=
"查询退款"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"queryRefund"
)
public
ResultBody
queryRefund
(
String
outRefundNo
)
{
return
wechatPayService
.
queryRefund
(
outRefundNo
);
}
@ApiOperation
(
value
=
"订单编号查询订单"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
UserPayInfoVO
.
class
)})
@GetMapping
(
"queryUserPayInfo"
)
public
UserPayInfoVO
queryUserPayInfo
(
@RequestParam
(
required
=
false
)
String
orderNo
)
{
return
wechatPayService
.
queryUserPayInfo
(
orderNo
);
}
}
src/main/java/com/mmc/payment/dao/WechatPayDao.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
dao
;
import
com.mmc.payment.entity.order.ApplyRefundLogDO
;
import
com.mmc.payment.entity.order.WxPayLogDO
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* @Author LW
* @date 2023/7/19 17:20
* 概要:
*/
@Mapper
public
interface
WechatPayDao
{
void
insertWxPayLog
(
WxPayLogDO
wxPayLogDO
);
WxPayLogDO
selectWxPayInfoByOrderNo
(
String
orderNo
);
void
updateWxPayLog
(
WxPayLogDO
wxPayLogDO
);
void
deleteWxPayLogByOrderNo
(
String
orderNo
);
void
insertApplyRefundLog
(
ApplyRefundLogDO
applyRefundLogDO
);
void
updateApplyRefundLog
(
ApplyRefundLogDO
applyRefundLogDO
);
}
src/main/java/com/mmc/payment/entity/order/ApplyRefundLogDO.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
entity
.
order
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @Author LW
* @date 2023/7/22 16:23
* 概要:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
ApplyRefundLogDO
{
private
Integer
id
;
private
String
orderNo
;
private
String
transactionId
;
private
String
outRefundNo
;
private
String
reason
;
private
Integer
total
;
private
Long
refund
;
private
String
currency
;
private
String
refundId
;
private
String
channel
;
private
String
userReceivedAccount
;
private
String
successTime
;
private
String
createTime
;
private
String
refundStatus
;
private
String
fundsAccount
;
private
String
notifyRefundStatus
;
}
src/main/java/com/mmc/payment/entity/order/WxPayLogDO.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
entity
.
order
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.Date
;
/**
* @Author LW
* @date 2023/7/19 17:16
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
WxPayLogDO
{
private
Integer
id
;
private
Integer
orderPort
;
private
String
orderNo
;
private
Integer
amount
;
private
String
openId
;
private
String
description
;
private
String
prepayId
;
private
Integer
userAccountId
;
private
String
outTradeNo
;
private
String
transactionId
;
private
String
bankType
;
private
String
attach
;
private
String
successTime
;
private
String
wxNotifyOpenid
;
private
Integer
wxNotifyTotal
;
private
Integer
wxNotifyPayerTotal
;
private
String
tradeType
;
private
String
tradeState
;
private
String
tradeStateDesc
;
private
Date
createTime
;
private
Date
updateTime
;
}
src/main/java/com/mmc/payment/enums/OrderPayStatus.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
enums
;
/**
* @author 作者 geDuo
* @version 创建时间:2021年10月14日 下午4:08:18
* @explain 0下单初始化->100待分配运营->200需求确认->300订单确认->400待支付->500调度中->600作业中->700验收通过->900订单关闭
*/
/**
* 0下单成功-> 100(待分配运营)已分配运营-> 200(待需求确认)已经需求确认-> 300(待确认订单)已确认订单->
* 400(待预支付)已预支付-> 500(调度中)调度完成-> 600(作业中)作业完成-> 700(待验收结算)验收通过-> 900订单关闭
*
* @author geDuo
*/
public
enum
OrderPayStatus
{
WAIT
(
"WAIT"
,
"待支付"
),
SUCCESS
(
"SUCCESS"
,
"支付成功"
),
REFUND
(
"REFUND"
,
"转入退款"
),
NOTPAY
(
"NOTPAY"
,
"未支付"
),
CLOSED
(
"CLOSED"
,
"已关闭"
),
REVOKED
(
"REVOKED"
,
"已撤销(付款码支付)"
),
USERPAYING
(
"USERPAYING"
,
"用户支付中(付款码支付)"
),
PAYERROR
(
"PAYERROR"
,
"支付失败(其他原因,如银行返回失败)"
);
private
String
status
;
private
String
doing
;
OrderPayStatus
(
String
status
,
String
doing
)
{
this
.
status
=
status
;
this
.
doing
=
doing
;
}
public
String
getStatus
()
{
return
status
;
}
public
void
setStatus
(
String
status
)
{
this
.
status
=
status
;
}
public
String
getDoing
()
{
return
doing
;
}
public
void
setDoing
(
String
doing
)
{
this
.
doing
=
doing
;
}
}
src/main/java/com/mmc/payment/feign/UserAppApi.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
feign
;
import
com.mmc.payment.feign.hystrix.UserAppApiHystrix
;
import
com.mmc.payment.model.dto.user.UserAccountSimpleDTO
;
import
com.mmc.payment.model.qo.UserAccountQO
;
import
com.mmc.payment.model.vo.user.BUserAccountQO
;
import
io.swagger.annotations.ApiParam
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
/**
* @author: zj
* @Date: 2023/5/18 17:06
*/
//@FeignClient(name = "cms-svc", fallback = UserAppApiHystrix.class)
@FeignClient
(
url
=
"${iuav.userapp.url}"
,
name
=
"cms-svc"
,
fallback
=
UserAppApiHystrix
.
class
)
public
interface
UserAppApi
{
/**
* 根据用户id获取基本信息
*
* @param userAccountId
* @return
*/
@RequestMapping
(
value
=
"/userapp/user-account/feignGetUserSimpleInfo"
,
method
=
RequestMethod
.
GET
)
public
UserAccountSimpleDTO
feignGetUserSimpleInfo
(
@RequestParam
Integer
userAccountId
,
@RequestHeader
(
"token"
)
String
token
);
/**
* 根据地区信息查询用户id
*
* @param provinceCode
* @param cityCode
* @param districtCode
* @return
*/
@GetMapping
(
"/userapp/user-account/feignListUserAccountIds"
)
List
<
Integer
>
feignListUserAccountIds
(
@RequestParam
Integer
provinceCode
,
@RequestParam
(
required
=
false
)
Integer
cityCode
,
@RequestParam
(
required
=
false
)
Integer
districtCode
,
@RequestHeader
(
value
=
"token"
,
required
=
false
)
String
token
);
/**
* 获取后台用户集合列表页面
*
* @param bUserAccountQO 问:b用户帐户
* @return {@link List}<{@link UserAccountSimpleDTO}>
*/
@PostMapping
(
"/userapp/back-user/feignListBAccountPage"
)
List
<
UserAccountSimpleDTO
>
feignListBAccountPage
(
@ApiParam
(
value
=
"账号查询QO"
,
required
=
true
)
@RequestBody
BUserAccountQO
bUserAccountQO
,
@RequestHeader
(
"token"
)
String
token
);
/**
* 获取小程序用户集合列表页面
*
* @param userAccountQO
* @param token
* @return
*/
@PostMapping
(
"/userapp/user-account/feignListAppUserAccount"
)
List
<
UserAccountSimpleDTO
>
feignListAppUserAccount
(
@ApiParam
(
value
=
"账号查询QO"
,
required
=
true
)
@RequestBody
UserAccountQO
userAccountQO
,
@RequestHeader
(
"token"
)
String
token
);
}
src/main/java/com/mmc/payment/feign/config/FeignConfiguration.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
feign
.
config
;
import
com.mmc.payment.feign.hystrix.UserAppApiHystrix
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.context.annotation.Configuration
;
/**
* @author: zj
* @Date: 2023/5/18 18:21
*/
@ComponentScan
(
basePackages
=
"com.mmc.payment.feign"
)
@Configuration
public
class
FeignConfiguration
{
@Bean
(
name
=
"userAppApiHystrix"
)
public
UserAppApiHystrix
userAppApi
()
{
return
new
UserAppApiHystrix
();
}
}
src/main/java/com/mmc/payment/feign/hystrix/UserAppApiHystrix.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
feign
.
hystrix
;
import
com.mmc.payment.feign.UserAppApi
;
import
com.mmc.payment.model.dto.user.UserAccountSimpleDTO
;
import
com.mmc.payment.model.qo.UserAccountQO
;
import
com.mmc.payment.model.vo.user.BUserAccountQO
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.List
;
/**
* @author: zj
* @Date: 2023/5/18 17:08
*/
@Slf4j
public
class
UserAppApiHystrix
implements
UserAppApi
{
@Override
public
UserAccountSimpleDTO
feignGetUserSimpleInfo
(
Integer
userAccountId
,
String
token
)
{
log
.
error
(
"熔断:feignGetUserSimpleInfo:{}"
,
userAccountId
);
return
null
;
}
@Override
public
List
<
Integer
>
feignListUserAccountIds
(
Integer
provinceCode
,
Integer
cityCode
,
Integer
districtCode
,
String
token
)
{
log
.
error
(
"熔断:feignListUserAccountIds:{}, {}, {}"
,
provinceCode
,
cityCode
,
districtCode
);
return
null
;
}
@Override
public
List
<
UserAccountSimpleDTO
>
feignListBAccountPage
(
BUserAccountQO
bUserAccountQO
,
String
token
)
{
log
.
error
(
"熔断:feignListBAccountPage:{}"
,
bUserAccountQO
);
return
null
;
}
@Override
public
List
<
UserAccountSimpleDTO
>
feignListAppUserAccount
(
UserAccountQO
userAccountQO
,
String
token
)
{
log
.
error
(
"熔断:feignListAppUserAccount:{}"
,
userAccountQO
);
return
null
;
}
}
src/main/java/com/mmc/payment/filter/AuthSignatureFilter.java
浏览文件 @
24c167a4
...
@@ -39,7 +39,8 @@ public class AuthSignatureFilter implements AuthFilter {
...
@@ -39,7 +39,8 @@ public class AuthSignatureFilter implements AuthFilter {
* 无需登录白名单
* 无需登录白名单
*/
*/
private
static
final
String
[]
IGNORE_URLS
=
{
"/payment/swagger-resources"
private
static
final
String
[]
IGNORE_URLS
=
{
"/payment/swagger-resources"
,
"/payment/v2/api-docs"
,
"/payment/repocash/walletUsers"
,
"/payment/doc.html"
,
"/payment/actuator/health/readiness"
};
,
"/payment/v2/api-docs"
,
"/payment/repocash/walletUsers"
,
"/payment/doc.html"
,
"/payment/actuator/health/readiness"
,
"/payment/wechat/payCallback"
,
"/payment/wechat/refundCallback"
};
/*无需加密狗无需登录白名单*/
/*无需加密狗无需登录白名单*/
private
static
final
String
[]
USE_KEY
=
{
"/oms/account/loginByUsbKey"
};
private
static
final
String
[]
USE_KEY
=
{
"/oms/account/loginByUsbKey"
};
...
...
src/main/java/com/mmc/payment/model/dto/user/LoginSuccessDTO.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
model
.
dto
.
user
;
import
com.mmc.payment.model.dto.role.RoleInfoDTO
;
import
com.mmc.payment.model.vo.user.CompanyInfoVO
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月31日 下午8:06:14
* @explain 类说明
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
LoginSuccessDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
1200834589953161925L
;
private
String
token
;
private
Integer
userAccountId
;
private
String
accountNo
;
private
Integer
portType
;
private
String
uid
;
private
String
phoneNum
;
private
String
userName
;
private
String
nickName
;
private
CompanyInfoVO
companyInfoVO
;
private
RoleInfoDTO
roleInfo
;
}
src/main/java/com/mmc/payment/model/dto/user/UserAccountSimpleDTO.java
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
model
.
dto
.
user
;
package
com
.
mmc
.
payment
.
model
.
dto
.
user
;
import
com.mmc.payment.model.vo.user.CooperationTagVO
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Builder
;
...
@@ -7,18 +8,18 @@ import lombok.Data;
...
@@ -7,18 +8,18 @@ import lombok.Data;
import
lombok.NoArgsConstructor
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.util.List
;
/**
/**
* @Author small
* @author: zj
* @Date 2023/5/25 17:50
* @Date: 2023/5/18 17:25
* @Version 1.0
*/
*/
@Data
@Data
@NoArgsConstructor
@NoArgsConstructor
@AllArgsConstructor
@AllArgsConstructor
@Builder
@Builder
public
class
UserAccountSimpleDTO
implements
Serializable
{
public
class
UserAccountSimpleDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
3451336520607073343
L
;
private
static
final
long
serialVersionUID
=
-
4408363798593041955
L
;
@ApiModelProperty
(
value
=
"用户id"
)
@ApiModelProperty
(
value
=
"用户id"
)
private
Integer
id
;
private
Integer
id
;
@ApiModelProperty
(
value
=
"用户类型"
)
@ApiModelProperty
(
value
=
"用户类型"
)
...
@@ -33,6 +34,8 @@ public class UserAccountSimpleDTO implements Serializable {
...
@@ -33,6 +34,8 @@ public class UserAccountSimpleDTO implements Serializable {
private
String
nickName
;
private
String
nickName
;
@ApiModelProperty
(
value
=
"用户头像"
)
@ApiModelProperty
(
value
=
"用户头像"
)
private
String
userImg
;
private
String
userImg
;
@ApiModelProperty
(
value
=
"openid"
)
private
String
openid
;
@ApiModelProperty
(
value
=
"用户性别:0未知、1男、2女"
)
@ApiModelProperty
(
value
=
"用户性别:0未知、1男、2女"
)
private
Integer
userSex
;
private
Integer
userSex
;
@ApiModelProperty
(
value
=
"用户邮箱"
)
@ApiModelProperty
(
value
=
"用户邮箱"
)
...
@@ -45,6 +48,6 @@ public class UserAccountSimpleDTO implements Serializable {
...
@@ -45,6 +48,6 @@ public class UserAccountSimpleDTO implements Serializable {
private
Integer
portType
;
private
Integer
portType
;
@ApiModelProperty
(
value
=
"企业认证状态, 0未通过,1通过"
)
@ApiModelProperty
(
value
=
"企业认证状态, 0未通过,1通过"
)
private
Integer
companyAuthStatus
;
private
Integer
companyAuthStatus
;
@ApiModelProperty
(
value
=
"
账号
"
)
@ApiModelProperty
(
value
=
"
用户合作标签
"
)
private
String
accountNo
;
private
List
<
CooperationTagVO
>
cooperationTagVOS
;
}
}
src/main/java/com/mmc/payment/model/vo/order/ApplyRefundVO.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
model
.
vo
.
order
;
import
com.wechat.pay.java.service.refund.model.GoodsDetail
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
/**
* @Author LW
* @date 2023/7/22 14:51
* 概要:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
ApplyRefundVO
{
@ApiModelProperty
(
value
=
"商户订单号"
,
required
=
true
)
private
String
outTradeNo
;
@ApiModelProperty
(
value
=
"退款原因"
)
private
String
reason
;
@ApiModelProperty
(
value
=
"退款金额"
,
required
=
true
)
private
Long
refund
;
@ApiModelProperty
(
value
=
"商品信息(可填可不填)"
)
private
List
<
GoodsDetail
>
goodsDetail
;
}
src/main/java/com/mmc/payment/model/vo/order/OrderRequestParamsVO.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
model
.
vo
.
order
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* @Author LW
* @date 2023/7/19 16:20
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
OrderRequestParamsVO
implements
Serializable
{
@ApiModelProperty
(
value
=
"订单编号"
)
private
String
orderNo
;
@ApiModelProperty
(
value
=
"商品描述"
)
private
String
description
;
@ApiModelProperty
(
value
=
"订单金额(分为单位)"
)
private
Integer
amount
;
@ApiModelProperty
(
value
=
"订单来源 0:产品商城 1:租赁订单 2:培训订单 ...其他后续加"
)
private
Integer
orderPort
;
}
src/main/java/com/mmc/payment/model/vo/order/UserPayInfoVO.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
model
.
vo
.
order
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @Author LW
* @date 2023/7/19 17:16
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
UserPayInfoVO
{
@ApiModelProperty
(
"订单号"
)
private
String
outTradeNo
;
@ApiModelProperty
(
"支付成功时间"
)
private
String
successTime
;
@ApiModelProperty
(
"用户支付金额"
)
private
Integer
wxNotifyPayerTotal
;
@ApiModelProperty
(
"交易状态"
)
private
String
tradeState
;
@ApiModelProperty
(
"用户id"
)
private
Integer
userAccountId
;
}
src/main/java/com/mmc/payment/model/vo/order/WxPayLogVO.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
model
.
vo
.
order
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @Author LW
* @date 2023/7/19 17:16
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
WxPayLogVO
{
@ApiModelProperty
(
"订单号"
)
private
String
outTradeNo
;
@ApiModelProperty
(
"付款银行"
)
private
String
bankType
;
@ApiModelProperty
(
"附加信息"
)
private
String
attach
;
@ApiModelProperty
(
"支付成功时间"
)
private
String
successTime
;
@ApiModelProperty
(
"支付者openid"
)
private
String
wxNotifyOpenid
;
@ApiModelProperty
(
"总金额"
)
private
Integer
wxNotifyTotal
;
@ApiModelProperty
(
"用户支付金额"
)
private
Integer
wxNotifyPayerTotal
;
@ApiModelProperty
(
"交易类型"
)
private
String
tradeType
;
@ApiModelProperty
(
"交易状态"
)
private
String
tradeState
;
@ApiModelProperty
(
"交易状态描述"
)
private
String
tradeStateDesc
;
}
src/main/java/com/mmc/payment/model/vo/user/BUserAccountQO.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
model
.
vo
.
user
;
import
com.mmc.payment.common.publicinterface.Page
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
javax.validation.constraints.Min
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* @author: zj
* @Date: 2023/5/25 13:32
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
BUserAccountQO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"关键字"
,
required
=
false
)
private
String
keyword
;
@ApiModelProperty
(
value
=
"地区"
,
required
=
false
)
private
String
area
;
@ApiModelProperty
(
value
=
"省份编码"
,
required
=
false
)
private
Integer
provinceCode
;
@ApiModelProperty
(
value
=
"城市编码"
,
required
=
false
)
private
Integer
cityCode
;
@ApiModelProperty
(
value
=
"县区编码"
,
required
=
false
)
private
Integer
districtCode
;
@ApiModelProperty
(
value
=
"角色id"
,
required
=
false
)
private
Integer
roleId
;
@ApiModelProperty
(
value
=
"账号状态:0禁用 1可用"
)
private
Integer
accountStatus
;
@ApiModelProperty
(
value
=
"账号状态:0合伙人 1员工"
)
private
Integer
userType
;
@ApiModelProperty
(
value
=
"用户id集合"
)
private
List
<
Integer
>
userIds
;
@ApiModelProperty
(
value
=
"推荐单位id"
)
private
Integer
rcdCompanyId
;
@ApiModelProperty
(
value
=
"单位集合"
,
hidden
=
true
)
private
List
<
Integer
>
companys
;
@ApiModelProperty
(
value
=
"页码"
,
required
=
true
)
@NotNull
(
message
=
"页码不能为空"
,
groups
=
Page
.
class
)
@Min
(
value
=
1
,
groups
=
Page
.
class
)
private
Integer
pageNo
;
@ApiModelProperty
(
value
=
"每页显示数"
,
required
=
true
)
@NotNull
(
message
=
"每页显示数不能为空"
,
groups
=
Page
.
class
)
@Min
(
value
=
1
,
groups
=
Page
.
class
)
private
Integer
pageSize
;
public
void
buildCurrentPage
()
{
this
.
pageNo
=
(
pageNo
-
1
)
*
pageSize
;
}
}
src/main/java/com/mmc/payment/model/vo/user/CompanyInfoVO.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
model
.
vo
.
user
;
import
com.mmc.payment.common.publicinterface.Insert
;
import
com.mmc.payment.common.publicinterface.Update
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @author: zj
* @Date: 2023/7/3 16:04
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
CompanyInfoVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
3247519744829926132L
;
@ApiModelProperty
(
value
=
"id"
)
@NotNull
(
message
=
"id不能为空"
,
groups
=
{
Update
.
class
})
private
Integer
id
;
@ApiModelProperty
(
value
=
"单位类型,0科比特,1加盟公司"
,
example
=
"0"
)
@NotNull
(
message
=
"单位类型不能为空"
,
groups
=
{
Insert
.
class
})
private
Integer
companyType
;
@ApiModelProperty
(
value
=
"单位名称"
,
example
=
"科比特"
)
@NotNull
(
message
=
"单位名称不能为空"
,
groups
=
{
Insert
.
class
})
private
String
companyName
;
@ApiModelProperty
(
value
=
"单位全称"
,
example
=
"浙江科比特创新科技有限公司"
)
private
String
fullName
;
@ApiModelProperty
(
value
=
"省份名称"
,
example
=
"广东省"
)
@NotNull
(
message
=
"省份名称不能为空"
,
groups
=
{
Insert
.
class
})
private
String
province
;
@ApiModelProperty
(
value
=
"城市名称"
,
example
=
"深圳市"
)
@NotNull
(
message
=
"城市名称不能为空"
,
groups
=
{
Insert
.
class
})
private
String
city
;
@ApiModelProperty
(
value
=
"县区名称"
,
example
=
"南山区"
)
@NotNull
(
message
=
"县区名称不能为空"
,
groups
=
{
Insert
.
class
})
private
String
district
;
@ApiModelProperty
(
value
=
"详细地址"
,
example
=
"西丽街道万科云城国际创新谷6栋"
)
@NotNull
(
message
=
"详细地址不能为空"
,
groups
=
{
Insert
.
class
})
private
String
address
;
@ApiModelProperty
(
value
=
"联系人"
,
example
=
"lx"
)
private
String
companyUserName
;
@ApiModelProperty
(
value
=
"联系电话"
,
example
=
"13925255742"
)
private
String
phoneNum
;
@ApiModelProperty
(
value
=
"备注"
)
private
String
remark
;
}
src/main/java/com/mmc/payment/model/vo/user/CooperationTagVO.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
model
.
vo
.
user
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* @author: zj
* @Date: 2023/5/17 21:27
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
CooperationTagVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
8884567706797525506L
;
@ApiModelProperty
(
value
=
"id"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"合作标签名称"
)
private
String
tagName
;
@ApiModelProperty
(
value
=
"合作标签img"
)
private
String
tagImg
;
@ApiModelProperty
(
value
=
"合作标签描述"
)
private
String
tagDescription
;
@ApiModelProperty
(
value
=
"注意事项"
)
private
String
tagRequire
;
@ApiModelProperty
(
value
=
"创建时间"
)
private
Date
createTime
;
}
src/main/java/com/mmc/payment/service/Impl/RepoCashServiceImpl.java
浏览文件 @
24c167a4
...
@@ -99,7 +99,7 @@ public class RepoCashServiceImpl implements RepoCashService {
...
@@ -99,7 +99,7 @@ public class RepoCashServiceImpl implements RepoCashService {
UserAccountSimpleDTO
account
=
JSON
.
parseObject
(
responseEntity
.
getBody
(),
UserAccountSimpleDTO
.
class
);
UserAccountSimpleDTO
account
=
JSON
.
parseObject
(
responseEntity
.
getBody
(),
UserAccountSimpleDTO
.
class
);
list
.
stream
().
forEach
(
t
->
{
list
.
stream
().
forEach
(
t
->
{
if
(
t
.
getCreateUser
().
equals
(
account
.
getId
()))
{
if
(
t
.
getCreateUser
().
equals
(
account
.
getId
()))
{
t
.
setAccountName
(
account
.
get
AccountNo
());
t
.
setAccountName
(
account
.
get
UserName
());
t
.
setUserName
(
account
.
getUserName
());
t
.
setUserName
(
account
.
getUserName
());
}
}
});
});
...
...
src/main/java/com/mmc/payment/service/Impl/WechatPayServiceImpl.java
0 → 100644
浏览文件 @
24c167a4
差异被折叠。
点击展开。
src/main/java/com/mmc/payment/service/WechatPayService.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
service
;
import
com.mmc.payment.common.result.ResultBody
;
import
com.mmc.payment.model.vo.order.ApplyRefundVO
;
import
com.mmc.payment.model.vo.order.OrderRequestParamsVO
;
import
com.mmc.payment.model.vo.order.UserPayInfoVO
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.IOException
;
import
java.util.Map
;
/**
* @Author LW
* @date 2023/7/19 16:56
* 概要:
*/
public
interface
WechatPayService
{
Map
orderPay
(
OrderRequestParamsVO
orderRequestParamsVO
,
Integer
userAccountId
,
HttpServletRequest
request
)
throws
IOException
;
Map
payCallback
(
HttpServletRequest
request
);
ResultBody
closeOrder
(
String
orderNo
);
ResultBody
queryOrder
(
String
transactionId
,
String
orderNo
);
ResultBody
applyRefund
(
ApplyRefundVO
applyRefundVO
);
Map
refundCallback
(
HttpServletRequest
request
);
ResultBody
queryRefund
(
String
outRefundNo
);
UserPayInfoVO
queryUserPayInfo
(
String
orderNo
);
}
src/main/java/com/mmc/payment/util/WxConfigUtils.java
0 → 100644
浏览文件 @
24c167a4
package
com
.
mmc
.
payment
.
util
;
import
com.mmc.payment.constant.UserSystemConstant
;
import
com.wechat.pay.java.core.Config
;
import
com.wechat.pay.java.core.RSAAutoCertificateConfig
;
import
com.wechat.pay.java.core.notification.NotificationConfig
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
/**
* @Author LW
* @date 2023/7/20 10:36
* 概要:
*/
@Component
public
class
WxConfigUtils
{
@Resource
UserSystemConstant
userSystemConstant
;
public
Config
createConfig
()
{
// 使用自动更新平台证书的RSA配置
// 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错
Config
config
=
new
RSAAutoCertificateConfig
.
Builder
()
.
merchantId
(
userSystemConstant
.
getMchid
())
.
privateKey
(
userSystemConstant
.
getPrivateKeyFromPath
())
.
merchantSerialNumber
(
userSystemConstant
.
getMchNumber
())
.
apiV3Key
(
userSystemConstant
.
getApiv3Key
())
.
build
();
return
config
;
}
public
NotificationConfig
createNotificationConfig
()
{
// 使用自动更新平台证书的RSA配置
// 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错
NotificationConfig
config
=
new
RSAAutoCertificateConfig
.
Builder
()
.
merchantId
(
userSystemConstant
.
getMchid
())
.
privateKey
(
userSystemConstant
.
getPrivateKeyFromPath
())
.
merchantSerialNumber
(
userSystemConstant
.
getMchNumber
())
.
apiV3Key
(
userSystemConstant
.
getApiv3Key
())
.
build
();
return
config
;
}
}
src/main/resources/application-dev.yml
浏览文件 @
24c167a4
...
@@ -27,6 +27,24 @@ aliyun:
...
@@ -27,6 +27,24 @@ aliyun:
access-key-secret
:
${OSS_ACCESS_KEY_SECRET}
access-key-secret
:
${OSS_ACCESS_KEY_SECRET}
bucket
:
pad-video-x
bucket
:
pad-video-x
wx
:
sub
:
appid
:
wx5c6a105a0ddca4c5
secret
:
96c75255dd26f82f8d55e15b59e101c7
app
:
id
:
wx18b7883acd204278
secret
:
28afe74ba373830237a8133a7431ee82
miniprogram-state
:
trial
env-version
:
trial
token-path
:
/userservlet/wechat/getAppletUserAccessToken
port
:
user
pay
:
mchid
:
1648653533
#商户id
mch-number
:
7BF5931E5A177A94E2F3A41C839A616ECBA86718
#商户序列号
api-v3-key
:
MMcaFDcly5Eb5o0nTNZdu3ek8DDh4K1B
#apiv3密钥
notify-url
:
https://test.iuav.shop/payment/wechat/payCallback
refund-notify-url
:
https://test.iuav.shop/payment/wechat/refundCallback
mmcflying
:
mmcflying
:
download
:
download
:
path
:
/ossservlet/upload/download/
path
:
/ossservlet/upload/download/
...
@@ -39,4 +57,38 @@ userapp:
...
@@ -39,4 +57,38 @@ userapp:
oms
:
oms
:
url
:
https://test.iuav.shop/oms/
url
:
https://test.iuav.shop/oms/
iuav
:
userapp
:
url
:
http://cms-svc:35150
data
:
file
:
# url: classpath:apiclient_key.pem
url
:
"
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCpxxR1ZZCLlLn+
XWCX90UrJE6iT9S4Fbf28WMIdqgtsk9IHuIFEy4jfKc/GayxKasFA7r5/csTeZuS
hGPhvtj8mDru6EFg/nKVwW9z26d3a9oYoq5MTNEl5PbrS9wsupULIKDwkd4unIPA
IISBFV/o3UBwAP0TU6jLHG7tgryuIIau5HHNDwkIbuxn/vj0A0HY1ZhvWD1xs1XW
F+TzBybUzPAlEyzGYhhZR+Z/xjtUFWPXxdmC+MD1/qSvMqVpDNpSjTkJZXw7cYHf
GluLlP0Q2ZQI8uOG+uXXhcHUpi61OpmXSyIgST+FGynq28y28aiOUs/6e0i7SnZe
lsODEzqXAgMBAAECggEADvKSIIvioAdmILkD6h1BH71AlxXEOrjey4URHQulXvCV
/lmJuLypkUJGT03pYGe0wOpFKgFoQbyxL8MsMBHndMXKWoJkTy/X0suHDoJGSkNa
nlSkV99jgpyYCLtTFTUQLjyfLs8I6r2o899pCxxgp1XjeHj9zxfMgqVsNskN556c
wWsiICcpZFFEolXXswLDw3WM1n7Ktq7tpCZZksIPCI0s5V0lMcezd284lkV4AkyQ
oXy1viwf2COjT7QqsKR7SAMIRsIsk0RlkPJar3o4FmaD9GA5EUfuC0etSxypbkH7
J8eaCVwv9ns23hUvjR89Fs4HTYxWr0/svi0hMSyY8QKBgQDX71HdH8fwhCPMnjOq
gYrFp/9I3ghoFyswupPQv5cVmEzqrweI4E/tZNJrM70Z1V+0tI8rGc2hmgPTB3HS
A8zFyXj8eU3Up/hXjhVkdi9qzF89ImLA9LT0MFMx38NEHoPUkO6wxTAFuF4Wvhi/
S6dnag3uNjJ5xLlNjrQhLNR4UwKBgQDJR1eA67CfJo9oZBU4lJzruHRVmX3sARpd
lXAgOD7q4DTjL3/bq/+n19sVAh34mTdI0vAVIGlp4oZVohjsByOwPkL8rt0HyhdA
+RYyMD5H+Azp5Qvx4MJhUQxhg2WCjPqthU6bunqCWu2kSZkvkX/t/sX8fqS6NvYj
IOflwwscLQKBgH+PbeHd02Qe+3L2Bfl0u0DWZHVsTLUI8se/gHCxrZPhO5brvNy7
/ht0EuWnU89+ACKlA2pnvNT5QccZP8Db48z3ntQu6K52Z7t5QOPu+UXy41QfCw2H
wZn7LjppQFXuXNxmncqpQhwu9M4kkEP5cjQiL4aIV7sdXoYVhg2PCRjnAoGAf3Pg
ce9MsQp+xrCRS3m3gAAWEloWhYoRQu8syAo1tQ7yDmX2hYh9Y6/ot33WsqN6gW+o
vQgAGB9rxu/U7ih7Lc/PJSgpKBSM8wSHTJKF7Zahvr3d+XTEQVFMELdeYPOajKQc
KbpEdyTS1DQSfy+YHYE1p3QeJRhGdeoRTcla0KUCgYA+HSr6b3q/vU+/LGujNJls
656gtZHTlAobfjqOzA1vbNalHT26/Ikv7cPzAXO1mHsxcxUa9zeS2V+RDzy+RF15
kfWTgY4GaDbhQhFg0KrcbloH+p8oNWpqvyynoJxP1IFQWn+VJW2tN1uSAtlD2dBQ
+Z56YzbOQlvvml7ajzxzSg=="
src/main/resources/application-local.yml
浏览文件 @
24c167a4
...
@@ -19,6 +19,23 @@ springfox:
...
@@ -19,6 +19,23 @@ springfox:
swagger-ui
:
swagger-ui
:
enabled
:
false
enabled
:
false
enabled
:
true
#开启文档
enabled
:
true
#开启文档
wx
:
sub
:
appid
:
wx5c6a105a0ddca4c5
secret
:
96c75255dd26f82f8d55e15b59e101c7
app
:
id
:
wx18b7883acd204278
secret
:
28afe74ba373830237a8133a7431ee82
miniprogram-state
:
trial
env-version
:
trial
token-path
:
/userservlet/wechat/getAppletUserAccessToken
port
:
user
pay
:
mchid
:
1648653533
#商户id
mch-number
:
7BF5931E5A177A94E2F3A41C839A616ECBA86718
#商户序列号
api-v3-key
:
MMcaFDcly5Eb5o0nTNZdu3ek8DDh4K1B
#apiv3密钥
notify-url
:
https://test.iuav.shop/payment/wechat/payCallback
refund-notify-url
:
https://test.iuav.shop/payment/wechat/refundCallback
aliyun
:
aliyun
:
oss
:
oss
:
...
@@ -37,8 +54,40 @@ mount:
...
@@ -37,8 +54,40 @@ mount:
userapp
:
userapp
:
url
:
http://localhost:35150/userapp/
url
:
http://localhost:35150/userapp/
iuav
:
userapp
:
url
:
http://127.0.0.1:35150
oms
:
oms
:
url
:
http://localhost:8077/oms/
url
:
http://localhost:8077/oms/
data
:
file
:
# url: classpath:apiclient_key.pem
url
:
"
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCpxxR1ZZCLlLn+
XWCX90UrJE6iT9S4Fbf28WMIdqgtsk9IHuIFEy4jfKc/GayxKasFA7r5/csTeZuS
hGPhvtj8mDru6EFg/nKVwW9z26d3a9oYoq5MTNEl5PbrS9wsupULIKDwkd4unIPA
IISBFV/o3UBwAP0TU6jLHG7tgryuIIau5HHNDwkIbuxn/vj0A0HY1ZhvWD1xs1XW
F+TzBybUzPAlEyzGYhhZR+Z/xjtUFWPXxdmC+MD1/qSvMqVpDNpSjTkJZXw7cYHf
GluLlP0Q2ZQI8uOG+uXXhcHUpi61OpmXSyIgST+FGynq28y28aiOUs/6e0i7SnZe
lsODEzqXAgMBAAECggEADvKSIIvioAdmILkD6h1BH71AlxXEOrjey4URHQulXvCV
/lmJuLypkUJGT03pYGe0wOpFKgFoQbyxL8MsMBHndMXKWoJkTy/X0suHDoJGSkNa
nlSkV99jgpyYCLtTFTUQLjyfLs8I6r2o899pCxxgp1XjeHj9zxfMgqVsNskN556c
wWsiICcpZFFEolXXswLDw3WM1n7Ktq7tpCZZksIPCI0s5V0lMcezd284lkV4AkyQ
oXy1viwf2COjT7QqsKR7SAMIRsIsk0RlkPJar3o4FmaD9GA5EUfuC0etSxypbkH7
J8eaCVwv9ns23hUvjR89Fs4HTYxWr0/svi0hMSyY8QKBgQDX71HdH8fwhCPMnjOq
gYrFp/9I3ghoFyswupPQv5cVmEzqrweI4E/tZNJrM70Z1V+0tI8rGc2hmgPTB3HS
A8zFyXj8eU3Up/hXjhVkdi9qzF89ImLA9LT0MFMx38NEHoPUkO6wxTAFuF4Wvhi/
S6dnag3uNjJ5xLlNjrQhLNR4UwKBgQDJR1eA67CfJo9oZBU4lJzruHRVmX3sARpd
lXAgOD7q4DTjL3/bq/+n19sVAh34mTdI0vAVIGlp4oZVohjsByOwPkL8rt0HyhdA
+RYyMD5H+Azp5Qvx4MJhUQxhg2WCjPqthU6bunqCWu2kSZkvkX/t/sX8fqS6NvYj
IOflwwscLQKBgH+PbeHd02Qe+3L2Bfl0u0DWZHVsTLUI8se/gHCxrZPhO5brvNy7
/ht0EuWnU89+ACKlA2pnvNT5QccZP8Db48z3ntQu6K52Z7t5QOPu+UXy41QfCw2H
wZn7LjppQFXuXNxmncqpQhwu9M4kkEP5cjQiL4aIV7sdXoYVhg2PCRjnAoGAf3Pg
ce9MsQp+xrCRS3m3gAAWEloWhYoRQu8syAo1tQ7yDmX2hYh9Y6/ot33WsqN6gW+o
vQgAGB9rxu/U7ih7Lc/PJSgpKBSM8wSHTJKF7Zahvr3d+XTEQVFMELdeYPOajKQc
KbpEdyTS1DQSfy+YHYE1p3QeJRhGdeoRTcla0KUCgYA+HSr6b3q/vU+/LGujNJls
656gtZHTlAobfjqOzA1vbNalHT26/Ikv7cPzAXO1mHsxcxUa9zeS2V+RDzy+RF15
kfWTgY4GaDbhQhFg0KrcbloH+p8oNWpqvyynoJxP1IFQWn+VJW2tN1uSAtlD2dBQ
+Z56YzbOQlvvml7ajzxzSg=="
src/main/resources/application-prod.yml
浏览文件 @
24c167a4
...
@@ -27,6 +27,24 @@ aliyun:
...
@@ -27,6 +27,24 @@ aliyun:
access-key-secret
:
${OSS_ACCESS_KEY_SECRET}
access-key-secret
:
${OSS_ACCESS_KEY_SECRET}
bucket
:
pad-video-x
bucket
:
pad-video-x
wx
:
sub
:
appid
:
wx5c6a105a0ddca4c5
secret
:
96c75255dd26f82f8d55e15b59e101c7
app
:
id
:
wx18b7883acd204278
secret
:
28afe74ba373830237a8133a7431ee82
miniprogram-state
:
formal
env-version
:
release
token-path
:
/userservlet/wechat/getAppletUserAccessToken
port
:
user
pay
:
mchid
:
1648653533
#商户id
mch-number
:
7BF5931E5A177A94E2F3A41C839A616ECBA86718
#商户序列号
api-v3-key
:
MMcaFDcly5Eb5o0nTNZdu3ek8DDh4K1B
#apiv3密钥
notify-url
:
https://www.iuav.shop/payment/wechat/payCallback
refund-notify-url
:
https://www.iuav.shop/payment/wechat/refundCallback
mmcflying
:
mmcflying
:
download
:
download
:
path
:
/ossservlet/upload/download/
path
:
/ossservlet/upload/download/
...
@@ -38,3 +56,40 @@ userapp:
...
@@ -38,3 +56,40 @@ userapp:
oms
:
oms
:
url
:
https://www.iuav.shop/oms/
url
:
https://www.iuav.shop/oms/
iuav
:
userapp
:
url
:
http://cms-svc:35150
pmsapp
:
url
:
http://pms-svc:8099
data
:
file
:
# url: classpath:apiclient_key.pem
url
:
"
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCpxxR1ZZCLlLn+
XWCX90UrJE6iT9S4Fbf28WMIdqgtsk9IHuIFEy4jfKc/GayxKasFA7r5/csTeZuS
hGPhvtj8mDru6EFg/nKVwW9z26d3a9oYoq5MTNEl5PbrS9wsupULIKDwkd4unIPA
IISBFV/o3UBwAP0TU6jLHG7tgryuIIau5HHNDwkIbuxn/vj0A0HY1ZhvWD1xs1XW
F+TzBybUzPAlEyzGYhhZR+Z/xjtUFWPXxdmC+MD1/qSvMqVpDNpSjTkJZXw7cYHf
GluLlP0Q2ZQI8uOG+uXXhcHUpi61OpmXSyIgST+FGynq28y28aiOUs/6e0i7SnZe
lsODEzqXAgMBAAECggEADvKSIIvioAdmILkD6h1BH71AlxXEOrjey4URHQulXvCV
/lmJuLypkUJGT03pYGe0wOpFKgFoQbyxL8MsMBHndMXKWoJkTy/X0suHDoJGSkNa
nlSkV99jgpyYCLtTFTUQLjyfLs8I6r2o899pCxxgp1XjeHj9zxfMgqVsNskN556c
wWsiICcpZFFEolXXswLDw3WM1n7Ktq7tpCZZksIPCI0s5V0lMcezd284lkV4AkyQ
oXy1viwf2COjT7QqsKR7SAMIRsIsk0RlkPJar3o4FmaD9GA5EUfuC0etSxypbkH7
J8eaCVwv9ns23hUvjR89Fs4HTYxWr0/svi0hMSyY8QKBgQDX71HdH8fwhCPMnjOq
gYrFp/9I3ghoFyswupPQv5cVmEzqrweI4E/tZNJrM70Z1V+0tI8rGc2hmgPTB3HS
A8zFyXj8eU3Up/hXjhVkdi9qzF89ImLA9LT0MFMx38NEHoPUkO6wxTAFuF4Wvhi/
S6dnag3uNjJ5xLlNjrQhLNR4UwKBgQDJR1eA67CfJo9oZBU4lJzruHRVmX3sARpd
lXAgOD7q4DTjL3/bq/+n19sVAh34mTdI0vAVIGlp4oZVohjsByOwPkL8rt0HyhdA
+RYyMD5H+Azp5Qvx4MJhUQxhg2WCjPqthU6bunqCWu2kSZkvkX/t/sX8fqS6NvYj
IOflwwscLQKBgH+PbeHd02Qe+3L2Bfl0u0DWZHVsTLUI8se/gHCxrZPhO5brvNy7
/ht0EuWnU89+ACKlA2pnvNT5QccZP8Db48z3ntQu6K52Z7t5QOPu+UXy41QfCw2H
wZn7LjppQFXuXNxmncqpQhwu9M4kkEP5cjQiL4aIV7sdXoYVhg2PCRjnAoGAf3Pg
ce9MsQp+xrCRS3m3gAAWEloWhYoRQu8syAo1tQ7yDmX2hYh9Y6/ot33WsqN6gW+o
vQgAGB9rxu/U7ih7Lc/PJSgpKBSM8wSHTJKF7Zahvr3d+XTEQVFMELdeYPOajKQc
KbpEdyTS1DQSfy+YHYE1p3QeJRhGdeoRTcla0KUCgYA+HSr6b3q/vU+/LGujNJls
656gtZHTlAobfjqOzA1vbNalHT26/Ikv7cPzAXO1mHsxcxUa9zeS2V+RDzy+RF15
kfWTgY4GaDbhQhFg0KrcbloH+p8oNWpqvyynoJxP1IFQWn+VJW2tN1uSAtlD2dBQ
+Z56YzbOQlvvml7ajzxzSg=="
src/main/resources/mapper/WechatPayDao.xml
0 → 100644
浏览文件 @
24c167a4
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.mmc.payment.dao.WechatPayDao"
>
<insert
id=
"insertWxPayLog"
>
insert into wx_pay_log (order_port,
order_no,
amount,
description,
trade_state,
user_account_id,
prepay_id,
open_id)
values (#{orderPort}, #{orderNo}, #{amount}, #{description},
#{tradeState}, #{userAccountId}, #{prepayId}, #{openId})
</insert>
<insert
id=
"insertApplyRefundLog"
>
insert into apply_refund_log (order_no,
total,
refund,
currency,
out_refund_no,
reason)
values (#{orderNo}, #{total}, #{refund}, #{currency}, #{outRefundNo}, #{reason})
</insert>
<update
id=
"updateWxPayLog"
>
update wx_pay_log
set out_trade_no = #{outTradeNo},
transaction_id = #{transactionId},
bank_type = #{bankType},
attach = #{attach},
success_time = #{successTime},
wx_notify_openid = #{wxNotifyOpenid},
wx_notify_total = #{wxNotifyTotal},
wx_notify_payer_total = #{wxNotifyPayerTotal},
trade_type = #{tradeType},
trade_state = #{tradeState},
trade_state_desc = #{tradeStateDesc}
where order_no = #{outTradeNo}
</update>
<update
id=
"updateApplyRefundLog"
>
update apply_refund_log
<set>
<if
test=
"refundId != null"
>
refund_id = #{refundId},
</if>
<if
test=
"transactionId != null"
>
transaction_id = #{transactionId},
</if>
<if
test=
"channel != null"
>
channel = #{channel},
</if>
<if
test=
"userReceivedAccount != null"
>
user_received_account = #{userReceivedAccount},
</if>
<if
test=
"successTime != null"
>
success_time = #{successTime},
</if>
<if
test=
"createTime != null"
>
create_time = #{createTime},
</if>
<if
test=
"refundStatus != null"
>
refund_status = #{refundStatus},
</if>
<if
test=
"fundsAccount != null"
>
funds_account = #{fundsAccount}
</if>
<if
test=
"notifyRefundStatus != null"
>
notify_refund_status = #{notifyRefundStatus}
</if>
</set>
where order_no = #{orderNo}
</update>
<delete
id=
"deleteWxPayLogByOrderNo"
>
delete
from wx_pay_log
where order_no = #{orderNo}
</delete>
<select
id=
"selectWxPayInfoByOrderNo"
resultType=
"com.mmc.payment.entity.order.WxPayLogDO"
>
SELECT id,
order_port,
order_no,
amount,
open_id,
description,
prepay_id,
user_account_id,
out_trade_no,
transaction_id,
bank_type,
attach,
success_time,
wx_notify_openid,
wx_notify_total,
wx_notify_payer_total,
trade_type,
trade_state,
trade_state_desc,
create_time,
update_time
FROM wx_pay_log
where order_no = #{orderNo}
</select>
</mapper>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论