Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
payment
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
iuav
payment
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;
*/
public
interface
WechatConstant
{
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
;
import
com.mmc.payment.entity.order.WxP
rep
ayLogDO
;
import
com.mmc.payment.entity.order.WxPayLogDO
;
import
org.apache.ibatis.annotations.Mapper
;
/**
...
...
@@ -10,5 +10,9 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
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;
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
WxP
rep
ayLogDO
{
public
class
WxPayLogDO
{
private
Integer
id
;
private
Integer
orderPort
;
private
String
orderNo
;
...
...
@@ -22,8 +22,18 @@ public class WxPrepayLogDO {
private
String
openId
;
private
String
description
;
private
String
prepayId
;
private
Integer
orderStatus
;
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
浏览文件 @
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
;
import
cn.hutool.core.util.RandomUtil
;
import
com.mmc.payment.common.result.ResultBody
;
import
com.mmc.payment.constant.UserSystemConstant
;
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.model.dto.user.UserAccountSimpleDTO
;
import
com.mmc.payment.model.vo.order.OrderRequestParamsVO
;
...
...
@@ -48,11 +50,18 @@ public class WechatPayServiceImpl implements WechatPayService {
WxConfigUtils
wxConfigUtils
;
@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"
));
if
(
userSimpleInfo
==
null
)
{
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
();
// 构建service
JsapiService
jsapiService
=
new
JsapiService
.
Builder
().
config
(
config
).
build
();
...
...
@@ -62,8 +71,8 @@ public class WechatPayServiceImpl implements WechatPayService {
amount
.
setTotal
(
orderRequestParamsVO
.
getAmount
());
prepayRequest
.
setAmount
(
amount
);
Payer
payer
=
new
Payer
();
prepayRequest
.
setPayer
(
payer
);
payer
.
setOpenid
(
userSimpleInfo
.
getOpenid
());
prepayRequest
.
setPayer
(
payer
);
prepayRequest
.
setAppid
(
userSystemConstant
.
getWxAppId
());
prepayRequest
.
setMchid
(
userSystemConstant
.
getMchid
());
prepayRequest
.
setDescription
(
orderRequestParamsVO
.
getDescription
());
...
...
@@ -72,7 +81,8 @@ public class WechatPayServiceImpl implements WechatPayService {
// 调用下单方法,得到应答
PrepayResponse
prepay
=
jsapiService
.
prepay
(
prepayRequest
);
String
prepayId
=
prepay
.
getPrepayId
();
WxPrepayLogDO
wxPrepayLogDO
=
new
WxPrepayLogDO
();
// 录入数据库记录数据
WxPayLogDO
wxPrepayLogDO
=
new
WxPayLogDO
();
wxPrepayLogDO
.
setOrderPort
(
orderRequestParamsVO
.
getOrderPort
());
wxPrepayLogDO
.
setOrderNo
(
orderRequestParamsVO
.
getOrderNo
());
wxPrepayLogDO
.
setDescription
(
orderRequestParamsVO
.
getDescription
());
...
...
@@ -80,8 +90,9 @@ public class WechatPayServiceImpl implements WechatPayService {
wxPrepayLogDO
.
setAmount
(
orderRequestParamsVO
.
getAmount
());
wxPrepayLogDO
.
setPrepayId
(
prepayId
);
wxPrepayLogDO
.
setOpenId
(
userSimpleInfo
.
getOpenid
());
wxPrepayLogDO
.
setTradeState
(
OrderPayStatus
.
WAIT
.
getStatus
());
// 往数据库插入下单的日志信息
wechatPayDao
.
insertWxP
rep
ayLog
(
wxPrepayLogDO
);
wechatPayDao
.
insertWxPayLog
(
wxPrepayLogDO
);
// 获取时间戳
String
timeStamp
=
System
.
currentTimeMillis
()
/
1000
+
""
;
// 获取随机字符串
...
...
@@ -104,7 +115,7 @@ public class WechatPayServiceImpl implements WechatPayService {
map
.
put
(
"package"
,
prepayPackage
);
map
.
put
(
"signType"
,
signType
);
map
.
put
(
"paySign"
,
sign
);
return
map
;
return
ResultBody
.
success
(
map
)
;
}
@Override
...
...
@@ -143,6 +154,19 @@ public class WechatPayServiceImpl implements WechatPayService {
// 以支付通知回调为例,验签、解密并转换成 Transaction
Transaction
transaction
=
parser
.
parse
(
requestParam
,
Transaction
.
class
);
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"
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
...
...
src/main/java/com/mmc/payment/service/WechatPayService.java
浏览文件 @
05bf01b9
package
com
.
mmc
.
payment
.
service
;
import
com.mmc.payment.common.result.ResultBody
;
import
com.mmc.payment.model.vo.order.OrderRequestParamsVO
;
import
javax.servlet.http.HttpServletRequest
;
...
...
@@ -12,7 +13,7 @@ import java.util.Map;
* 概要:
*/
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
);
}
src/main/resources/mapper/WechatPayDao.xml
浏览文件 @
05bf01b9
...
...
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.mmc.payment.dao.WechatPayDao"
>
<insert
id=
"insertWxP
rep
ayLog"
>
<insert
id=
"insertWxPayLog"
>
insert into wx_pay_log (order_port,
order_no,
amount,
...
...
@@ -16,4 +16,42 @@
values (#{orderPort}, #{orderNo}, #{amount}, #{description},
#{orderStatus}, #{userAccountId}, #{prepayId}, #{openId})
</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>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论