Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
payment-ci-test
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
test-ci
payment-ci-test
Commits
1de81330
提交
1de81330
authored
7月 20, 2023
作者:
xiaowang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
微信支付下单及回调接口
上级
02bb0da8
隐藏空白字符变更
内嵌
并排
正在显示
27 个修改的文件
包含
977 行增加
和
7 行删除
+977
-7
pom.xml
pom.xml
+63
-0
Insert.java
...n/java/com/mmc/payment/common/publicinterface/Insert.java
+9
-0
UserSystemConstant.java
...ain/java/com/mmc/payment/constant/UserSystemConstant.java
+43
-0
WechatConstant.java
src/main/java/com/mmc/payment/constant/WechatConstant.java
+10
-0
BaseController.java
src/main/java/com/mmc/payment/controller/BaseController.java
+40
-0
WechatPayController.java
.../java/com/mmc/payment/controller/WechatPayController.java
+44
-0
WechatPayDao.java
src/main/java/com/mmc/payment/dao/WechatPayDao.java
+14
-0
WxPrepayLogDO.java
...main/java/com/mmc/payment/entity/order/WxPrepayLogDO.java
+29
-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
LoginSuccessDTO.java
.../java/com/mmc/payment/model/dto/user/LoginSuccessDTO.java
+33
-0
UserAccountSimpleDTO.java
.../com/mmc/payment/model/dto/user/UserAccountSimpleDTO.java
+9
-6
OrderRequestParamsVO.java
.../com/mmc/payment/model/vo/order/OrderRequestParamsVO.java
+28
-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
+0
-1
WechatPayServiceImpl.java
...va/com/mmc/payment/service/Impl/WechatPayServiceImpl.java
+151
-0
WechatPayService.java
src/main/java/com/mmc/payment/service/WechatPayService.java
+17
-0
WxConfigUtils.java
src/main/java/com/mmc/payment/util/WxConfigUtils.java
+52
-0
apiclient_key.pem
src/main/resources/apiclient_key.pem
+28
-0
application-dev.yml
src/main/resources/application-dev.yml
+17
-0
application-local.yml
src/main/resources/application-local.yml
+19
-0
application-prod.yml
src/main/resources/application-prod.yml
+17
-0
WechatPayDao.xml
src/main/resources/mapper/WechatPayDao.xml
+20
-0
QuickStart.java
src/test/java/com/mmc/payment/QuickStart.java
+57
-0
没有找到文件。
pom.xml
浏览文件 @
1de81330
...
...
@@ -14,8 +14,10 @@
<name>
payment
</name>
<description>
Demo project for Spring Boot
</description>
<properties>
<spring-cloud.version>
Hoxton.SR12
</spring-cloud.version>
<java.version>
1.8
</java.version>
</properties>
<dependencies>
<dependency>
<groupId>
org.springframework.boot
</groupId>
...
...
@@ -23,6 +25,31 @@
<scope>
test
</scope>
</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>
<groupId>
com.alibaba
</groupId>
<artifactId>
druid
</artifactId>
...
...
@@ -80,7 +107,43 @@
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-actuator
</artifactId>
</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>
<!-- 标识 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>
<plugins>
...
...
src/main/java/com/mmc/payment/common/publicinterface/Insert.java
0 → 100644
浏览文件 @
1de81330
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
浏览文件 @
1de81330
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
;
}
src/main/java/com/mmc/payment/constant/WechatConstant.java
0 → 100644
浏览文件 @
1de81330
package
com
.
mmc
.
payment
.
constant
;
/**
* @Author LW
* @date 2023/7/19 17:10
* 概要:
*/
public
interface
WechatConstant
{
String
privateKeyPath
=
"src/main/resources/apiclient_key.pem"
;
}
src/main/java/com/mmc/payment/controller/BaseController.java
0 → 100644
浏览文件 @
1de81330
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
浏览文件 @
1de81330
package
com
.
mmc
.
payment
.
controller
;
import
com.mmc.payment.common.result.ResultBody
;
import
com.mmc.payment.model.vo.order.OrderRequestParamsVO
;
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.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
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
ResultBody
orderPay
(
@RequestBody
OrderRequestParamsVO
orderRequestParamsVO
,
HttpServletRequest
request
)
{
return
ResultBody
.
success
(
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
);
}
}
src/main/java/com/mmc/payment/dao/WechatPayDao.java
0 → 100644
浏览文件 @
1de81330
package
com
.
mmc
.
payment
.
dao
;
import
com.mmc.payment.entity.order.WxPrepayLogDO
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* @Author LW
* @date 2023/7/19 17:20
* 概要:
*/
@Mapper
public
interface
WechatPayDao
{
void
insertWxPrepayLog
(
WxPrepayLogDO
wxPrepayLogDO
);
}
src/main/java/com/mmc/payment/entity/order/WxPrepayLogDO.java
0 → 100644
浏览文件 @
1de81330
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
WxPrepayLogDO
{
private
Integer
id
;
private
Integer
orderPort
;
private
String
orderNo
;
private
Integer
amount
;
private
String
openId
;
private
String
description
;
private
String
prepayId
;
private
Integer
orderStatus
;
private
Integer
userAccountId
;
private
Date
createTime
;
private
Date
updateTime
;
}
src/main/java/com/mmc/payment/feign/UserAppApi.java
0 → 100644
浏览文件 @
1de81330
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
浏览文件 @
1de81330
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
浏览文件 @
1de81330
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/model/dto/user/LoginSuccessDTO.java
0 → 100644
浏览文件 @
1de81330
package
com
.
mmc
.
payment
.
model
.
dto
.
user
;
import
com.mmc.payment.model.dto.role.RoleInfoDTO
;
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
浏览文件 @
1de81330
package
com
.
mmc
.
payment
.
model
.
dto
.
user
;
import
com.mmc.payment.model.vo.user.CooperationTagVO
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
...
...
@@ -7,18 +8,18 @@ import lombok.Data;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* @Author small
* @Date 2023/5/25 17:50
* @Version 1.0
* @author: zj
* @Date: 2023/5/18 17:25
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public
class
UserAccountSimpleDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
3451336520607073343
L
;
private
static
final
long
serialVersionUID
=
-
4408363798593041955
L
;
@ApiModelProperty
(
value
=
"用户id"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"用户类型"
)
...
...
@@ -33,6 +34,8 @@ public class UserAccountSimpleDTO implements Serializable {
private
String
nickName
;
@ApiModelProperty
(
value
=
"用户头像"
)
private
String
userImg
;
@ApiModelProperty
(
value
=
"openid"
)
private
String
openid
;
@ApiModelProperty
(
value
=
"用户性别:0未知、1男、2女"
)
private
Integer
userSex
;
@ApiModelProperty
(
value
=
"用户邮箱"
)
...
...
@@ -45,6 +48,6 @@ public class UserAccountSimpleDTO implements Serializable {
private
Integer
portType
;
@ApiModelProperty
(
value
=
"企业认证状态, 0未通过,1通过"
)
private
Integer
companyAuthStatus
;
@ApiModelProperty
(
value
=
"
账号
"
)
private
String
accountNo
;
@ApiModelProperty
(
value
=
"
用户合作标签
"
)
private
List
<
CooperationTagVO
>
cooperationTagVOS
;
}
src/main/java/com/mmc/payment/model/vo/order/OrderRequestParamsVO.java
0 → 100644
浏览文件 @
1de81330
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/user/BUserAccountQO.java
0 → 100644
浏览文件 @
1de81330
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
浏览文件 @
1de81330
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
浏览文件 @
1de81330
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
浏览文件 @
1de81330
...
...
@@ -20,7 +20,6 @@ import com.mmc.payment.model.dto.repo.PayCashResultDTO;
import
com.mmc.payment.model.dto.repo.RepoCashDTO
;
import
com.mmc.payment.model.dto.repo.RepoWalletDTO
;
import
com.mmc.payment.model.dto.user.BaseAccountDTO
;
import
com.mmc.payment.model.dto.user.UserAccountSimpleDTO
;
import
com.mmc.payment.model.qo.RepoCashQO
;
import
com.mmc.payment.model.qo.UserCashQO
;
import
com.mmc.payment.model.qo.WalletMessageQO
;
...
...
src/main/java/com/mmc/payment/service/Impl/WechatPayServiceImpl.java
0 → 100644
浏览文件 @
1de81330
package
com
.
mmc
.
payment
.
service
.
Impl
;
import
cn.hutool.core.util.RandomUtil
;
import
com.mmc.payment.constant.UserSystemConstant
;
import
com.mmc.payment.dao.WechatPayDao
;
import
com.mmc.payment.entity.order.WxPrepayLogDO
;
import
com.mmc.payment.feign.UserAppApi
;
import
com.mmc.payment.model.dto.user.UserAccountSimpleDTO
;
import
com.mmc.payment.model.vo.order.OrderRequestParamsVO
;
import
com.mmc.payment.service.WechatPayService
;
import
com.mmc.payment.util.WxConfigUtils
;
import
com.wechat.pay.java.core.Config
;
import
com.wechat.pay.java.core.cipher.SignatureResult
;
import
com.wechat.pay.java.core.notification.NotificationConfig
;
import
com.wechat.pay.java.core.notification.NotificationParser
;
import
com.wechat.pay.java.core.notification.RequestParam
;
import
com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction
;
import
com.wechat.pay.java.service.payments.jsapi.JsapiService
;
import
com.wechat.pay.java.service.payments.jsapi.model.Amount
;
import
com.wechat.pay.java.service.payments.jsapi.model.Payer
;
import
com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest
;
import
com.wechat.pay.java.service.payments.jsapi.model.PrepayResponse
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @Author LW
* @date 2023/7/19 16:56
* 概要:
*/
@Service
@Slf4j
public
class
WechatPayServiceImpl
implements
WechatPayService
{
@Resource
UserSystemConstant
userSystemConstant
;
@Resource
WechatPayDao
wechatPayDao
;
@Resource
UserAppApi
userAppApi
;
@Resource
WxConfigUtils
wxConfigUtils
;
@Override
public
Map
orderPay
(
OrderRequestParamsVO
orderRequestParamsVO
,
Integer
userAccountId
,
HttpServletRequest
request
)
{
UserAccountSimpleDTO
userSimpleInfo
=
userAppApi
.
feignGetUserSimpleInfo
(
userAccountId
,
request
.
getHeader
(
"token"
));
if
(
userSimpleInfo
==
null
)
{
throw
new
RuntimeException
(
"服务器内部错误!"
);
}
Config
config
=
wxConfigUtils
.
createConfig
();
// 构建service
JsapiService
jsapiService
=
new
JsapiService
.
Builder
().
config
(
config
).
build
();
// request.setXxx(val)设置所需参数,具体参数可见Request定义
PrepayRequest
prepayRequest
=
new
PrepayRequest
();
Amount
amount
=
new
Amount
();
amount
.
setTotal
(
orderRequestParamsVO
.
getAmount
());
prepayRequest
.
setAmount
(
amount
);
Payer
payer
=
new
Payer
();
prepayRequest
.
setPayer
(
payer
);
payer
.
setOpenid
(
userSimpleInfo
.
getOpenid
());
prepayRequest
.
setAppid
(
userSystemConstant
.
getWxAppId
());
prepayRequest
.
setMchid
(
userSystemConstant
.
getMchid
());
prepayRequest
.
setDescription
(
orderRequestParamsVO
.
getDescription
());
prepayRequest
.
setNotifyUrl
(
userSystemConstant
.
getNotifyUrl
());
prepayRequest
.
setOutTradeNo
(
orderRequestParamsVO
.
getOrderNo
());
// 调用下单方法,得到应答
PrepayResponse
prepay
=
jsapiService
.
prepay
(
prepayRequest
);
String
prepayId
=
prepay
.
getPrepayId
();
WxPrepayLogDO
wxPrepayLogDO
=
new
WxPrepayLogDO
();
wxPrepayLogDO
.
setOrderPort
(
orderRequestParamsVO
.
getOrderPort
());
wxPrepayLogDO
.
setOrderNo
(
orderRequestParamsVO
.
getOrderNo
());
wxPrepayLogDO
.
setDescription
(
orderRequestParamsVO
.
getDescription
());
wxPrepayLogDO
.
setUserAccountId
(
userAccountId
);
wxPrepayLogDO
.
setAmount
(
orderRequestParamsVO
.
getAmount
());
wxPrepayLogDO
.
setPrepayId
(
prepayId
);
// 往数据库插入下单的日志信息
wechatPayDao
.
insertWxPrepayLog
(
wxPrepayLogDO
);
// 获取时间戳
String
timeStamp
=
System
.
currentTimeMillis
()
/
1000
+
""
;
// 获取随机字符串
String
nonceStr
=
RandomUtil
.
randomString
(
32
);
// 签名方式
String
signType
=
"RSA"
;
// 订单详情扩展字符串
String
prepayPackage
=
"prepay_id="
+
prepayId
;
// 构造签名串
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
userSystemConstant
.
getWxAppId
()).
append
(
"\n"
);
sb
.
append
(
timeStamp
).
append
(
"\n"
);
sb
.
append
(
nonceStr
).
append
(
"\n"
);
sb
.
append
(
prepayPackage
).
append
(
"\n"
);
// 生成签名
SignatureResult
sign
=
config
.
createSigner
().
sign
(
sb
.
toString
());
Map
<
String
,
Object
>
map
=
new
HashMap
<>(
16
);
map
.
put
(
"timeStamp"
,
timeStamp
);
map
.
put
(
"nonceStr"
,
nonceStr
);
map
.
put
(
"package"
,
prepayPackage
);
map
.
put
(
"signType"
,
signType
);
map
.
put
(
"paySign"
,
sign
);
return
map
;
}
@Override
public
Map
payCallback
(
HttpServletRequest
request
)
{
Map
<
String
,
String
>
result
=
new
HashMap
(
16
);
result
.
put
(
"code"
,
"FAIL"
);
// 获取应答时间戳
String
timestamp
=
request
.
getHeader
(
"Wechatpay-Timestamp"
);
// 获取应答随机串
String
nonce
=
request
.
getHeader
(
"Wechatpay-Nonce"
);
// 获取应答签名
String
signature
=
request
.
getHeader
(
"Wechatpay-Signature"
);
// 获取应答序列号
String
serialNumber
=
request
.
getHeader
(
"Wechatpay-Serial"
);
log
.
info
(
"应答时间戳: {},应答随机串:{},应答签名:{},应答序列号{}"
,
timestamp
,
nonce
,
signature
,
serialNumber
);
try
{
// 获取body请求报文
BufferedReader
br
=
request
.
getReader
();
String
str
=
null
;
StringBuilder
sb
=
new
StringBuilder
();
while
((
str
=
br
.
readLine
())
!=
null
)
{
sb
.
append
(
str
);
}
log
.
info
(
"请求体数据:{}"
,
sb
);
NotificationConfig
config
=
wxConfigUtils
.
createNotificationConfig
();
// 构造 RequestParam
RequestParam
requestParam
=
new
RequestParam
.
Builder
()
.
serialNumber
(
serialNumber
)
.
nonce
(
nonce
)
.
signature
(
signature
)
.
timestamp
(
timestamp
)
.
body
(
sb
.
toString
())
.
build
();
// 初始化 NotificationParser
NotificationParser
parser
=
new
NotificationParser
(
config
);
// 以支付通知回调为例,验签、解密并转换成 Transaction
Transaction
transaction
=
parser
.
parse
(
requestParam
,
Transaction
.
class
);
log
.
info
(
"解密resource数据:{}"
,
transaction
);
result
.
put
(
"code"
,
"SUCCESS"
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
result
;
}
}
src/main/java/com/mmc/payment/service/WechatPayService.java
0 → 100644
浏览文件 @
1de81330
package
com
.
mmc
.
payment
.
service
;
import
com.mmc.payment.model.vo.order.OrderRequestParamsVO
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.Map
;
/**
* @Author LW
* @date 2023/7/19 16:56
* 概要:
*/
public
interface
WechatPayService
{
Map
orderPay
(
OrderRequestParamsVO
orderRequestParamsVO
,
Integer
userAccountId
,
HttpServletRequest
request
);
Map
payCallback
(
HttpServletRequest
request
);
}
src/main/java/com/mmc/payment/util/WxConfigUtils.java
0 → 100644
浏览文件 @
1de81330
package
com
.
mmc
.
payment
.
util
;
import
com.mmc.payment.constant.UserSystemConstant
;
import
com.mmc.payment.constant.WechatConstant
;
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.context.annotation.Bean
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
/**
* @Author LW
* @date 2023/7/20 10:36
* 概要:
*/
@Component
public
class
WxConfigUtils
{
@Resource
UserSystemConstant
userSystemConstant
;
@Bean
public
Config
createConfig
()
{
// 使用自动更新平台证书的RSA配置
// 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错
Config
config
=
new
RSAAutoCertificateConfig
.
Builder
()
.
merchantId
(
userSystemConstant
.
getMchid
())
.
privateKeyFromPath
(
WechatConstant
.
privateKeyPath
)
.
merchantSerialNumber
(
userSystemConstant
.
getMchNumber
())
.
apiV3Key
(
userSystemConstant
.
getApiv3Key
())
.
build
();
return
config
;
}
@Bean
public
NotificationConfig
createNotificationConfig
()
{
// 使用自动更新平台证书的RSA配置
// 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错
NotificationConfig
config
=
new
RSAAutoCertificateConfig
.
Builder
()
.
merchantId
(
userSystemConstant
.
getMchid
())
.
privateKeyFromPath
(
WechatConstant
.
privateKeyPath
)
.
merchantSerialNumber
(
userSystemConstant
.
getMchNumber
())
.
apiV3Key
(
userSystemConstant
.
getApiv3Key
())
.
build
();
return
config
;
}
}
src/main/resources/apiclient_key.pem
0 → 100644
浏览文件 @
1de81330
-----BEGIN PRIVATE KEY-----
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==
-----END PRIVATE KEY-----
src/main/resources/application-dev.yml
浏览文件 @
1de81330
...
...
@@ -27,6 +27,23 @@ aliyun:
access-key-secret
:
${OSS_ACCESS_KEY_SECRET}
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
mmcflying
:
download
:
path
:
/ossservlet/upload/download/
...
...
src/main/resources/application-local.yml
浏览文件 @
1de81330
...
...
@@ -19,6 +19,21 @@ springfox:
swagger-ui
:
enabled
:
false
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密钥
aliyun
:
oss
:
...
...
@@ -37,6 +52,10 @@ mount:
userapp
:
url
:
http://localhost:35150/userapp/
iuav
:
userapp
:
url
:
http://127.0.0.1:35150
oms
:
url
:
http://localhost:8077/oms/
...
...
src/main/resources/application-prod.yml
浏览文件 @
1de81330
...
...
@@ -27,6 +27,23 @@ aliyun:
access-key-secret
:
${OSS_ACCESS_KEY_SECRET}
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
mmcflying
:
download
:
path
:
/ossservlet/upload/download/
...
...
src/main/resources/mapper/WechatPayDao.xml
0 → 100644
浏览文件 @
1de81330
<?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=
"insertWxPrepayLog"
>
insert into wx_prepay_log (order_port,
order_no,
amount,
description,
order_status,
user_account_id,
prepay_id,
open_id)
values (#{orderPort}, #{orderNo}, #{amount}, #{description},
#{orderStatus}, #{userAccountId}, #{prepayId}, #{openId})
</insert>
</mapper>
\ No newline at end of file
src/test/java/com/mmc/payment/QuickStart.java
0 → 100644
浏览文件 @
1de81330
package
com
.
mmc
.
payment
;
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.service.payments.nativepay.NativePayService
;
import
com.wechat.pay.java.service.payments.nativepay.model.Amount
;
import
com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest
;
import
com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse
;
import
org.junit.Test
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
/**
* @author: zj
* @Date: 2023/7/19 14:52
*/
@Component
public
class
QuickStart
{
@Resource
private
UserSystemConstant
userSystemConstant
;
/**
* 商户API私钥路径
*/
public
static
String
privateKeyPath
=
"src/main/resources/apiclient_key.pem"
;
@Test
public
void
test
()
{
// 使用自动更新平台证书的RSA配置
// 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错
Config
config
=
new
RSAAutoCertificateConfig
.
Builder
()
.
merchantId
(
userSystemConstant
.
getMchid
())
.
privateKeyFromPath
(
privateKeyPath
)
.
merchantSerialNumber
(
userSystemConstant
.
getMchNumber
())
.
apiV3Key
(
userSystemConstant
.
getApiv3Key
())
.
build
();
// 构建service
NativePayService
service
=
new
NativePayService
.
Builder
().
config
(
config
).
build
();
// request.setXxx(val)设置所需参数,具体参数可见Request定义
PrepayRequest
request
=
new
PrepayRequest
();
Amount
amount
=
new
Amount
();
amount
.
setTotal
(
100
);
request
.
setAmount
(
amount
);
request
.
setAppid
(
"wx18b7883acd204278"
);
request
.
setMchid
(
"1648653533"
);
request
.
setDescription
(
"测试商品标题"
);
request
.
setNotifyUrl
(
"https://notify_url"
);
request
.
setOutTradeNo
(
System
.
currentTimeMillis
()+
""
);
// 调用下单方法,得到应答
PrepayResponse
response
=
service
.
prepay
(
request
);
// 使用微信扫描 code_url 对应的二维码,即可体验Native支付
System
.
out
.
println
(
response
.
getCodeUrl
());
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论