Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
zhiliao
Project
Project
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
Graph
比较
统计图
议题
0
议题
0
列表
看板
标记
Milestones
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
注册表
注册表
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
svn
zhiliao
Commits
72312e11
提交
72312e11
authored
5月 27, 2020
作者:
zhouzhigang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
--no commit message
上级
3f8b9afd
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
168 行增加
和
1 行删除
+168
-1
PayController.java
...ain/java/com/zrqx/third/pay/controller/PayController.java
+159
-1
WeChatPayImpl.java
...zrqx/third/pay/interfaces/payType/impl/WeChatPayImpl.java
+9
-0
没有找到文件。
app/third/src/main/java/com/zrqx/third/pay/controller/PayController.java
浏览文件 @
72312e11
package
com
.
zrqx
.
third
.
pay
.
controller
;
import
java.beans.BeanInfo
;
import
java.beans.Introspector
;
import
java.beans.PropertyDescriptor
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
...
@@ -11,16 +22,26 @@ import com.zrqx.core.client.form.third.pay.CloseForm;
import
com.zrqx.core.client.form.third.pay.RefundForm
;
import
com.zrqx.core.client.form.third.pay.RefundQueryForm
;
import
com.zrqx.core.client.form.third.pay.ToPayForm
;
import
com.zrqx.core.client.third.PayClient
;
import
com.zrqx.core.client.vo.order.OrderPayVo
;
import
com.zrqx.core.client.vo.third.pay.payquery.PayQueryReturnVo
;
import
com.zrqx.core.client.vo.third.pay.refundquery.BaseRefundQueryReturnVo
;
import
com.zrqx.core.client.vo.third.wechart.WecartPayReturn
;
import
com.zrqx.core.enums.third.pay.PayTypeEnum
;
import
com.zrqx.core.enums.third.pay.WeChartType
;
import
com.zrqx.core.exception.BaseException
;
import
com.zrqx.core.util.datatype.DateUtils
;
import
com.zrqx.core.util.response.CallBack
;
import
com.zrqx.core.util.spring.SpringContextUtils
;
import
com.zrqx.third.pay.config.WXPay
;
import
com.zrqx.third.pay.config.WXPayConfig
;
import
com.zrqx.third.pay.config.WXPayUtil
;
import
com.zrqx.third.pay.interfaces.payType.PayTypeInterface
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
@Slf4j
@RestController
@RequestMapping
(
"/pay"
)
@Api
(
description
=
"支付"
)
...
...
@@ -29,6 +50,23 @@ public class PayController {
@Autowired
private
SpringContextUtils
springContext
;
@Autowired
private
PayClient
payClient
;
@Autowired
private
WXPayConfig
config
;
// 设备号,pc端填写WEB
@Value
(
"${pay.wechatpay.device_info}"
)
private
String
device_info
;
// 终端IP,公司ip为122.14.50.6
@Value
(
"${pay.wechatpay.spbill_create_ip}"
)
private
String
spbill_create_ip
;
// 扫码回调地址
@Value
(
"${pay.wechatpay.notify_url}"
)
private
String
notify_url
;
@ApiOperation
(
"测试"
)
@GetMapping
(
"/test"
)
public
BaseRefundQueryReturnVo
test
(
String
payType
){
...
...
@@ -54,6 +92,126 @@ public class PayController {
return
springContext
.
getEnumsBindBean
(
PayTypeEnum
.
class
,
payType
,
PayTypeInterface
.
class
).
query
(
out_trade_no
);
}
@ApiOperation
(
"获取微信支付配置"
)
@GetMapping
(
"/query/config"
)
public
CallBack
<
WecartPayReturn
>
queryConfig
(
String
out_trade_no
,
String
payType
,
String
trade_type
){
ToPayForm
toPayForm
=
new
ToPayForm
();
toPayForm
.
setOut_trade_no
(
out_trade_no
);
toPayForm
.
setPayType
(
payType
);
toPayForm
.
setTrade_type
(
trade_type
);
log
.
info
(
"wwwwwwwwwwwwwwwwwwww订单:"
+
out_trade_no
+
"开始获取微信链接wwwwwwwwwwwwwwwwwwww"
);
OrderPayVo
orderPayVo
=
getOrderPayVo
(
out_trade_no
);
WXPay
wxpay
;
try
{
wxpay
=
new
WXPay
(
config
);
//临时远程返回金额
String
tempData
=
orderPayVo
.
getPayment
();
//微信支付需要金额
// 元换算为 分
String
realData
=
wechartPrice
(
tempData
);
// 计算订单的交易起始时间和结束时间
Date
start
=
orderPayVo
.
getCreateTime
();
// 结束时间为订单创建时间的一小时后
Date
end
=
DateUtils
.
addDateHour
(
start
,
24
);
String
startStr
=
DateUtils
.
dateTimeToStr
(
start
,
DateUtils
.
DATE_TIME_FORMAT_YYYYMMDDHHMISS
);
String
endStr
=
DateUtils
.
dateTimeToStr
(
end
,
DateUtils
.
DATE_TIME_FORMAT_YYYYMMDDHHMISS
);
Map
<
String
,
String
>
data
=
new
HashMap
<
String
,
String
>();
data
.
put
(
"trade_type"
,
WeChartType
.
getName
(
trade_type
));
data
.
put
(
"device_info"
,
device_info
);
data
.
put
(
"spbill_create_ip"
,
spbill_create_ip
);
data
.
put
(
"notify_url"
,
notify_url
);
data
.
put
(
"time_start"
,
startStr
);
data
.
put
(
"time_expire"
,
endStr
);
data
.
put
(
"body"
,
orderPayVo
.
getSubject
());
data
.
put
(
"out_trade_no"
,
toPayForm
.
getOut_trade_no
());
data
.
put
(
"total_fee"
,
realData
);
data
.
put
(
"product_id"
,
String
.
valueOf
(
orderPayVo
.
getId
()));
if
(
WeChartType
.
JSAPI
.
getCode
().
equals
(
toPayForm
.
getTrade_type
())){
data
.
put
(
"openid"
,
toPayForm
.
getOpenid
());
}
Map
<
String
,
String
>
resp
=
wxpay
.
unifiedOrder
(
data
);
if
(
resp
==
null
)
return
null
;
//Object obj = beanClass.newInstance();
BeanInfo
beanInfo
=
Introspector
.
getBeanInfo
(
WecartPayReturn
.
class
);
// 获取类属性
WecartPayReturn
wecartPayReturn
=
new
WecartPayReturn
();
// 创建 JavaBean 对象
// 给 JavaBean 对象的属性赋值
PropertyDescriptor
[]
propertyDescriptors
=
beanInfo
.
getPropertyDescriptors
();
for
(
int
i
=
0
;
i
<
propertyDescriptors
.
length
;
i
++)
{
PropertyDescriptor
descriptor
=
propertyDescriptors
[
i
];
String
propertyName
=
descriptor
.
getName
();
if
(
resp
.
containsKey
(
propertyName
))
{
// 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。
Object
value
=
resp
.
get
(
propertyName
);
Object
[]
args
=
new
Object
[
1
];
args
[
0
]
=
value
;
descriptor
.
getWriteMethod
().
invoke
(
wecartPayReturn
,
args
);
}
}
if
(
WeChartType
.
JSAPI
.
getCode
().
equals
(
toPayForm
.
getTrade_type
())){
//拼装参数
Map
<
String
,
String
>
map
=
new
HashMap
<
String
,
String
>();
String
timestamp
=
String
.
valueOf
(
new
Date
().
getTime
()/
1000
);
map
.
put
(
"appId"
,
wecartPayReturn
.
getAppid
());
map
.
put
(
"timeStamp"
,
timestamp
);
map
.
put
(
"nonceStr"
,
wecartPayReturn
.
getNonce_str
());
map
.
put
(
"package"
,
"prepay_id="
+
wecartPayReturn
.
getPrepay_id
());
map
.
put
(
"signType"
,
"MD5"
);
//签名生成
String
prepay_id
=
resp
.
get
(
"prepay_id"
);
String
stringA
=
""
+
"appId="
+
config
.
getAppID
()+
"&nonceStr="
+
resp
.
get
(
"nonce_str"
)
+
"&package=prepay_id="
+
prepay_id
+
"&signType=MD5"
+
"&timeStamp="
+
timestamp
+
"&key="
+
config
.
getKey
();
String
paySign
=
WXPayUtil
.
MD5
(
stringA
).
toUpperCase
();
//String paySign = WXPayUtil.generateSignature(map, config.getKey(),SignType.MD5);
wecartPayReturn
.
setSign
(
paySign
);
wecartPayReturn
.
setTimestamp
(
timestamp
);
}
log
.
info
(
"wwwwwwwwwwwwwwwwwwww订单:"
+
toPayForm
.
getOut_trade_no
()
+
"完成获取微信链接wwwwwwwwwwwwwwwwwwww"
);
return
CallBack
.
success
(
wecartPayReturn
);
}
catch
(
Exception
e
)
{
log
.
error
(
"wwwwwwwwwwwwwwwwwwww订单:"
+
toPayForm
.
getOut_trade_no
()
+
"获取微信链接失败wwwwwwwwwwwwwwwwwwww"
);
log
.
error
(
e
.
getMessage
());
return
CallBack
.
fail
();
}
}
/**
* 价格单位 为元 换算为分
* @param price
* @return
* @author lpf
* @date: 2019年2月18日 上午11:04:19
*/
private
String
wechartPrice
(
String
price
){
BigDecimal
tempDataBig
=
new
BigDecimal
(
price
);
// 元换算为 分
String
result
=
tempDataBig
.
multiply
(
new
BigDecimal
(
100
d
)).
intValue
()
+
""
;
return
result
;
}
/**
* 支付功能获取订单支付信息
* @param code
* @return
* @author lpf
* @date: 2019年1月18日 下午3:24:08
*/
protected
OrderPayVo
getOrderPayVo
(
String
code
)
{
if
(
StringUtils
.
isBlank
(
code
))
{
throw
new
BaseException
(
"PayTypeAdapter#getOrderPayVo 订单编号不能为空"
);
}
log
.
info
(
"zzzzzzzz支付功能获取订单支付信息,code:"
+
code
);
CallBack
<
OrderPayVo
>
call
=
payClient
.
getOrderPayVo
(
code
);
log
.
info
(
code
+
"获取订单支付信息callback:"
+
call
);
if
(
call
!=
null
&&
call
.
hasEntity
())
{
return
call
.
getData
();
}
throw
new
BaseException
(
"PayTypeAdapter#getOrderPayVo Error,callback:"
+
call
);
}
@ApiOperation
(
"退款 "
)
@PostMapping
(
"/refund"
)
public
CallBack
<
Boolean
>
refund
(
RefundForm
refundForm
){
...
...
app/third/src/main/java/com/zrqx/third/pay/interfaces/payType/impl/WeChatPayImpl.java
浏览文件 @
72312e11
...
...
@@ -11,6 +11,7 @@ import java.util.List;
import
java.util.Map
;
import
org.apache.commons.beanutils.BeanUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -21,6 +22,7 @@ import com.zrqx.core.client.form.third.pay.CloseForm;
import
com.zrqx.core.client.form.third.pay.RefundForm
;
import
com.zrqx.core.client.form.third.pay.RefundQueryForm
;
import
com.zrqx.core.client.form.third.pay.ToPayForm
;
import
com.zrqx.core.client.third.PayClient
;
import
com.zrqx.core.client.vo.order.OrderPayVo
;
import
com.zrqx.core.client.vo.third.pay.payquery.PayQueryReturnVo
;
import
com.zrqx.core.client.vo.third.pay.refundquery.BaseRefundQueryReturnVo
;
...
...
@@ -31,12 +33,15 @@ import com.zrqx.core.client.vo.third.wechart.WecartRefundQueryReturn;
import
com.zrqx.core.client.vo.third.wechart.WechartRefundReturn
;
import
com.zrqx.core.enums.third.pay.PayTypeEnum
;
import
com.zrqx.core.enums.third.pay.WeChartType
;
import
com.zrqx.core.exception.BaseException
;
import
com.zrqx.core.util.datatype.DateUtils
;
import
com.zrqx.core.util.response.CallBack
;
import
com.zrqx.third.pay.config.WXPay
;
import
com.zrqx.third.pay.config.WXPayConfig
;
import
com.zrqx.third.pay.config.WXPayUtil
;
import
com.zrqx.third.pay.interfaces.payType.PayTypeAdapter
;
import
io.swagger.annotations.ApiModelProperty
;
/**
* 微信支付的实现
* @author lw
...
...
@@ -50,6 +55,8 @@ public class WeChatPayImpl extends PayTypeAdapter{
@Autowired
private
WXPayConfig
config
;
// 设备号,pc端填写WEB
@Value
(
"${pay.wechatpay.device_info}"
)
private
String
device_info
;
...
...
@@ -163,6 +170,8 @@ public class WeChatPayImpl extends PayTypeAdapter{
return
CallBack
.
fail
();
}
}
/**
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论