Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
payment-ci-test
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
test-ci
payment-ci-test
Commits
05bf01b9
提交
05bf01b9
authored
7月 21, 2023
作者:
xiaowang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化下单及支付
上级
5aac862f
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
149 行增加
和
12 行删除
+149
-12
WechatConstant.java
src/main/java/com/mmc/payment/constant/WechatConstant.java
+1
-0
WechatPayDao.java
src/main/java/com/mmc/payment/dao/WechatPayDao.java
+6
-2
WxPayLogDO.java
src/main/java/com/mmc/payment/entity/order/WxPayLogDO.java
+12
-2
OrderPayStatus.java
src/main/java/com/mmc/payment/enums/OrderPayStatus.java
+58
-0
WechatPayServiceImpl.java
...va/com/mmc/payment/service/Impl/WechatPayServiceImpl.java
+30
-6
WechatPayService.java
src/main/java/com/mmc/payment/service/WechatPayService.java
+2
-1
WechatPayDao.xml
src/main/resources/mapper/WechatPayDao.xml
+40
-1
没有找到文件。
src/main/java/com/mmc/payment/constant/WechatConstant.java
浏览文件 @
05bf01b9
...
@@ -7,4 +7,5 @@ package com.mmc.payment.constant;
...
@@ -7,4 +7,5 @@ package com.mmc.payment.constant;
*/
*/
public
interface
WechatConstant
{
public
interface
WechatConstant
{
String
privateKeyPath
=
"src/main/resources/apiclient_key.pem"
;
String
privateKeyPath
=
"src/main/resources/apiclient_key.pem"
;
Integer
ORDER_PAY_SUCCESS_STATUS_CODE
=
200
;
}
}
src/main/java/com/mmc/payment/dao/WechatPayDao.java
浏览文件 @
05bf01b9
package
com
.
mmc
.
payment
.
dao
;
package
com
.
mmc
.
payment
.
dao
;
import
com.mmc.payment.entity.order.WxP
rep
ayLogDO
;
import
com.mmc.payment.entity.order.WxPayLogDO
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Mapper
;
/**
/**
...
@@ -10,5 +10,9 @@ import org.apache.ibatis.annotations.Mapper;
...
@@ -10,5 +10,9 @@ import org.apache.ibatis.annotations.Mapper;
*/
*/
@Mapper
@Mapper
public
interface
WechatPayDao
{
public
interface
WechatPayDao
{
void
insertWxPrepayLog
(
WxPrepayLogDO
wxPrepayLogDO
);
void
insertWxPayLog
(
WxPayLogDO
wxPayLogDO
);
WxPayLogDO
selectWxPayInfoByOrderNo
(
String
orderNo
);
void
updateWxPayLog
(
WxPayLogDO
wxPayLogDO
);
}
}
src/main/java/com/mmc/payment/entity/order/WxP
rep
ayLogDO.java
→
src/main/java/com/mmc/payment/entity/order/WxPayLogDO.java
浏览文件 @
05bf01b9
...
@@ -14,7 +14,7 @@ import java.util.Date;
...
@@ -14,7 +14,7 @@ import java.util.Date;
@Data
@Data
@NoArgsConstructor
@NoArgsConstructor
@AllArgsConstructor
@AllArgsConstructor
public
class
WxP
rep
ayLogDO
{
public
class
WxPayLogDO
{
private
Integer
id
;
private
Integer
id
;
private
Integer
orderPort
;
private
Integer
orderPort
;
private
String
orderNo
;
private
String
orderNo
;
...
@@ -22,8 +22,18 @@ public class WxPrepayLogDO {
...
@@ -22,8 +22,18 @@ public class WxPrepayLogDO {
private
String
openId
;
private
String
openId
;
private
String
description
;
private
String
description
;
private
String
prepayId
;
private
String
prepayId
;
private
Integer
orderStatus
;
private
Integer
userAccountId
;
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
createTime
;
private
Date
updateTime
;
private
Date
updateTime
;
}
}
src/main/java/com/mmc/payment/enums/OrderPayStatus.java
0 → 100644
浏览文件 @
05bf01b9
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/service/Impl/WechatPayServiceImpl.java
浏览文件 @
05bf01b9
package
com
.
mmc
.
payment
.
service
.
Impl
;
package
com
.
mmc
.
payment
.
service
.
Impl
;
import
cn.hutool.core.util.RandomUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
com.mmc.payment.common.result.ResultBody
;
import
com.mmc.payment.constant.UserSystemConstant
;
import
com.mmc.payment.constant.UserSystemConstant
;
import
com.mmc.payment.dao.WechatPayDao
;
import
com.mmc.payment.dao.WechatPayDao
;
import
com.mmc.payment.entity.order.WxPrepayLogDO
;
import
com.mmc.payment.entity.order.WxPayLogDO
;
import
com.mmc.payment.enums.OrderPayStatus
;
import
com.mmc.payment.feign.UserAppApi
;
import
com.mmc.payment.feign.UserAppApi
;
import
com.mmc.payment.model.dto.user.UserAccountSimpleDTO
;
import
com.mmc.payment.model.dto.user.UserAccountSimpleDTO
;
import
com.mmc.payment.model.vo.order.OrderRequestParamsVO
;
import
com.mmc.payment.model.vo.order.OrderRequestParamsVO
;
...
@@ -48,11 +50,18 @@ public class WechatPayServiceImpl implements WechatPayService {
...
@@ -48,11 +50,18 @@ public class WechatPayServiceImpl implements WechatPayService {
WxConfigUtils
wxConfigUtils
;
WxConfigUtils
wxConfigUtils
;
@Override
@Override
public
Map
orderPay
(
OrderRequestParamsVO
orderRequestParamsVO
,
Integer
userAccountId
,
HttpServletRequest
request
)
throws
IOException
{
public
ResultBody
orderPay
(
OrderRequestParamsVO
orderRequestParamsVO
,
Integer
userAccountId
,
HttpServletRequest
request
)
throws
IOException
{
UserAccountSimpleDTO
userSimpleInfo
=
userAppApi
.
feignGetUserSimpleInfo
(
userAccountId
,
request
.
getHeader
(
"token"
));
UserAccountSimpleDTO
userSimpleInfo
=
userAppApi
.
feignGetUserSimpleInfo
(
userAccountId
,
request
.
getHeader
(
"token"
));
if
(
userSimpleInfo
==
null
)
{
if
(
userSimpleInfo
==
null
)
{
throw
new
RuntimeException
(
"服务器内部错误!"
);
throw
new
RuntimeException
(
"服务器内部错误!"
);
}
}
// 查询该订单是否已下单
WxPayLogDO
wxPayLogDO
=
wechatPayDao
.
selectWxPayInfoByOrderNo
(
orderRequestParamsVO
.
getOrderNo
());
if
(
wxPayLogDO
!=
null
&&
wxPayLogDO
.
getTradeState
().
equals
(
OrderPayStatus
.
SUCCESS
.
getStatus
()))
{
return
ResultBody
.
error
(
"订单已支付!"
);
}
else
if
(
wxPayLogDO
!=
null
)
{
return
ResultBody
.
error
(
"请勿重复下单!"
);
}
Config
config
=
wxConfigUtils
.
createConfig
();
Config
config
=
wxConfigUtils
.
createConfig
();
// 构建service
// 构建service
JsapiService
jsapiService
=
new
JsapiService
.
Builder
().
config
(
config
).
build
();
JsapiService
jsapiService
=
new
JsapiService
.
Builder
().
config
(
config
).
build
();
...
@@ -62,8 +71,8 @@ public class WechatPayServiceImpl implements WechatPayService {
...
@@ -62,8 +71,8 @@ public class WechatPayServiceImpl implements WechatPayService {
amount
.
setTotal
(
orderRequestParamsVO
.
getAmount
());
amount
.
setTotal
(
orderRequestParamsVO
.
getAmount
());
prepayRequest
.
setAmount
(
amount
);
prepayRequest
.
setAmount
(
amount
);
Payer
payer
=
new
Payer
();
Payer
payer
=
new
Payer
();
prepayRequest
.
setPayer
(
payer
);
payer
.
setOpenid
(
userSimpleInfo
.
getOpenid
());
payer
.
setOpenid
(
userSimpleInfo
.
getOpenid
());
prepayRequest
.
setPayer
(
payer
);
prepayRequest
.
setAppid
(
userSystemConstant
.
getWxAppId
());
prepayRequest
.
setAppid
(
userSystemConstant
.
getWxAppId
());
prepayRequest
.
setMchid
(
userSystemConstant
.
getMchid
());
prepayRequest
.
setMchid
(
userSystemConstant
.
getMchid
());
prepayRequest
.
setDescription
(
orderRequestParamsVO
.
getDescription
());
prepayRequest
.
setDescription
(
orderRequestParamsVO
.
getDescription
());
...
@@ -72,7 +81,8 @@ public class WechatPayServiceImpl implements WechatPayService {
...
@@ -72,7 +81,8 @@ public class WechatPayServiceImpl implements WechatPayService {
// 调用下单方法,得到应答
// 调用下单方法,得到应答
PrepayResponse
prepay
=
jsapiService
.
prepay
(
prepayRequest
);
PrepayResponse
prepay
=
jsapiService
.
prepay
(
prepayRequest
);
String
prepayId
=
prepay
.
getPrepayId
();
String
prepayId
=
prepay
.
getPrepayId
();
WxPrepayLogDO
wxPrepayLogDO
=
new
WxPrepayLogDO
();
// 录入数据库记录数据
WxPayLogDO
wxPrepayLogDO
=
new
WxPayLogDO
();
wxPrepayLogDO
.
setOrderPort
(
orderRequestParamsVO
.
getOrderPort
());
wxPrepayLogDO
.
setOrderPort
(
orderRequestParamsVO
.
getOrderPort
());
wxPrepayLogDO
.
setOrderNo
(
orderRequestParamsVO
.
getOrderNo
());
wxPrepayLogDO
.
setOrderNo
(
orderRequestParamsVO
.
getOrderNo
());
wxPrepayLogDO
.
setDescription
(
orderRequestParamsVO
.
getDescription
());
wxPrepayLogDO
.
setDescription
(
orderRequestParamsVO
.
getDescription
());
...
@@ -80,8 +90,9 @@ public class WechatPayServiceImpl implements WechatPayService {
...
@@ -80,8 +90,9 @@ public class WechatPayServiceImpl implements WechatPayService {
wxPrepayLogDO
.
setAmount
(
orderRequestParamsVO
.
getAmount
());
wxPrepayLogDO
.
setAmount
(
orderRequestParamsVO
.
getAmount
());
wxPrepayLogDO
.
setPrepayId
(
prepayId
);
wxPrepayLogDO
.
setPrepayId
(
prepayId
);
wxPrepayLogDO
.
setOpenId
(
userSimpleInfo
.
getOpenid
());
wxPrepayLogDO
.
setOpenId
(
userSimpleInfo
.
getOpenid
());
wxPrepayLogDO
.
setTradeState
(
OrderPayStatus
.
WAIT
.
getStatus
());
// 往数据库插入下单的日志信息
// 往数据库插入下单的日志信息
wechatPayDao
.
insertWxP
rep
ayLog
(
wxPrepayLogDO
);
wechatPayDao
.
insertWxPayLog
(
wxPrepayLogDO
);
// 获取时间戳
// 获取时间戳
String
timeStamp
=
System
.
currentTimeMillis
()
/
1000
+
""
;
String
timeStamp
=
System
.
currentTimeMillis
()
/
1000
+
""
;
// 获取随机字符串
// 获取随机字符串
...
@@ -104,7 +115,7 @@ public class WechatPayServiceImpl implements WechatPayService {
...
@@ -104,7 +115,7 @@ public class WechatPayServiceImpl implements WechatPayService {
map
.
put
(
"package"
,
prepayPackage
);
map
.
put
(
"package"
,
prepayPackage
);
map
.
put
(
"signType"
,
signType
);
map
.
put
(
"signType"
,
signType
);
map
.
put
(
"paySign"
,
sign
);
map
.
put
(
"paySign"
,
sign
);
return
map
;
return
ResultBody
.
success
(
map
)
;
}
}
@Override
@Override
...
@@ -143,6 +154,19 @@ public class WechatPayServiceImpl implements WechatPayService {
...
@@ -143,6 +154,19 @@ public class WechatPayServiceImpl implements WechatPayService {
// 以支付通知回调为例,验签、解密并转换成 Transaction
// 以支付通知回调为例,验签、解密并转换成 Transaction
Transaction
transaction
=
parser
.
parse
(
requestParam
,
Transaction
.
class
);
Transaction
transaction
=
parser
.
parse
(
requestParam
,
Transaction
.
class
);
log
.
info
(
"解密resource数据:{}"
,
transaction
);
log
.
info
(
"解密resource数据:{}"
,
transaction
);
WxPayLogDO
wxPayLogDO
=
new
WxPayLogDO
();
wxPayLogDO
.
setOutTradeNo
(
transaction
.
getOutTradeNo
());
wxPayLogDO
.
setTransactionId
(
transaction
.
getTransactionId
());
wxPayLogDO
.
setBankType
(
transaction
.
getBankType
());
wxPayLogDO
.
setAttach
(
transaction
.
getAttach
());
wxPayLogDO
.
setSuccessTime
(
transaction
.
getSuccessTime
());
wxPayLogDO
.
setWxNotifyOpenid
(
transaction
.
getPayer
().
getSpOpenid
());
wxPayLogDO
.
setWxNotifyTotal
(
transaction
.
getAmount
().
getTotal
());
wxPayLogDO
.
setWxNotifyPayerTotal
(
transaction
.
getAmount
().
getPayerTotal
());
wxPayLogDO
.
setTradeType
(
transaction
.
getTradeType
().
toString
());
wxPayLogDO
.
setTradeState
(
transaction
.
getTradeState
().
toString
());
wxPayLogDO
.
setTradeStateDesc
(
transaction
.
getTradeStateDesc
());
wechatPayDao
.
updateWxPayLog
(
wxPayLogDO
);
result
.
put
(
"code"
,
"SUCCESS"
);
result
.
put
(
"code"
,
"SUCCESS"
);
}
catch
(
IOException
e
)
{
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
...
...
src/main/java/com/mmc/payment/service/WechatPayService.java
浏览文件 @
05bf01b9
package
com
.
mmc
.
payment
.
service
;
package
com
.
mmc
.
payment
.
service
;
import
com.mmc.payment.common.result.ResultBody
;
import
com.mmc.payment.model.vo.order.OrderRequestParamsVO
;
import
com.mmc.payment.model.vo.order.OrderRequestParamsVO
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
...
@@ -12,7 +13,7 @@ import java.util.Map;
...
@@ -12,7 +13,7 @@ import java.util.Map;
* 概要:
* 概要:
*/
*/
public
interface
WechatPayService
{
public
interface
WechatPayService
{
Map
orderPay
(
OrderRequestParamsVO
orderRequestParamsVO
,
Integer
userAccountId
,
HttpServletRequest
request
)
throws
IOException
;
ResultBody
orderPay
(
OrderRequestParamsVO
orderRequestParamsVO
,
Integer
userAccountId
,
HttpServletRequest
request
)
throws
IOException
;
Map
payCallback
(
HttpServletRequest
request
);
Map
payCallback
(
HttpServletRequest
request
);
}
}
src/main/resources/mapper/WechatPayDao.xml
浏览文件 @
05bf01b9
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.mmc.payment.dao.WechatPayDao"
>
<mapper
namespace=
"com.mmc.payment.dao.WechatPayDao"
>
<insert
id=
"insertWxP
rep
ayLog"
>
<insert
id=
"insertWxPayLog"
>
insert into wx_pay_log (order_port,
insert into wx_pay_log (order_port,
order_no,
order_no,
amount,
amount,
...
@@ -16,4 +16,42 @@
...
@@ -16,4 +16,42 @@
values (#{orderPort}, #{orderNo}, #{amount}, #{description},
values (#{orderPort}, #{orderNo}, #{amount}, #{description},
#{orderStatus}, #{userAccountId}, #{prepayId}, #{openId})
#{orderStatus}, #{userAccountId}, #{prepayId}, #{openId})
</insert>
</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>
<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 where order_no = #{orderNo}
</select>
</mapper>
</mapper>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论