@ -38,6 +38,7 @@ import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal ;
import java.math.BigDecimal ;
import java.nio.charset.StandardCharsets ;
import java.nio.charset.StandardCharsets ;
import java.time.LocalTime ;
import java.time.LocalTime ;
import java.util.Enumeration ;
import java.util.HashMap ;
import java.util.HashMap ;
import java.util.List ;
import java.util.List ;
import java.util.Map ;
import java.util.Map ;
@ -131,6 +132,7 @@ public class AccountRechargeServiceImpl implements AccountRechargeService {
order . setPayType ( aliPayPcVo . getPayType ( ) ) ;
order . setPayType ( aliPayPcVo . getPayType ( ) ) ;
order . setTemplateId ( aliPayPcVo . getTemplateId ( ) ) ;
order . setTemplateId ( aliPayPcVo . getTemplateId ( ) ) ;
order . setStatus ( DefaultNumberConstants . ZERO_NUMBER ) ;
order . setStatus ( DefaultNumberConstants . ZERO_NUMBER ) ;
order . setIsCallback ( DefaultNumberConstants . ZERO_NUMBER ) ;
return payOrderRepository . save ( order ) . getId ( ) ! = null ;
return payOrderRepository . save ( order ) . getId ( ) ! = null ;
}
}
@ -141,46 +143,56 @@ public class AccountRechargeServiceImpl implements AccountRechargeService {
* @return { @link CommonResult } < { @link String } >
* @return { @link CommonResult } < { @link String } >
* /
* /
@Override
@Override
public CommonResult < String > pcNotifyResponse ( HttpServletRequest request ) {
@Transactional ( rollbackFor = Exception . class )
int i = 0 ;
public String pcNotifyResponse ( HttpServletRequest request ) {
PayOrder order = null ;
//商户订单号
try {
String orderNo = new String ( request . getParameter ( PayConstants . OUT_TRADE_NO ) .
//获取支付宝GET过来反馈信息
getBytes ( StandardCharsets . ISO_8859_1 ) , StandardCharsets . UTF_8 ) ;
Map < String , String > params = new HashMap < > ( DefaultNumberConstants . TWO_NUMBER ) ;
//查询订单信息
// 处理乱码问题
PayOrder order = payOrderRepository . findByOrderNumber ( orderNo ) ;
checkParam ( request , params ) ;
if ( order ! = null & & order . getIsCallback ( ) = = 0 ) {
Boolean flag = Factory . Payment . Common ( ) . verifyNotify ( params ) ;
log . info ( "======================支付回调开始时间:{}" , LocalTime . now ( ) ) ;
//商户订单号
//先更新回调状态,防止二次回调
String orderNo = new String ( request . getParameter ( PayConstants . OUT_TRADE_NO ) .
order . setIsCallback ( DefaultNumberConstants . ONE_NUMBER ) ;
getBytes ( StandardCharsets . ISO_8859_1 ) , StandardCharsets . UTF_8 ) ;
payOrderRepository . save ( order ) ;
if ( flag ! = null & & flag ) {
int i = 0 ;
log . info ( " order verify signature success the orderNumber as {}" , orderNo ) ;
try {
order = payOrderRepository . findByOrderNumber ( orderNo ) ;
//获取支付宝GET过来反馈信息
if ( order ! = null & & order . getStatus ( ) = = 0 ) {
// Map<String, String> params = new HashMap<>(DefaultNumberConstants.TWO_NUMBER);
order . setPayTime ( DateUtil . date ( ) ) ;
// 处理乱码问题
order . setStatus ( DefaultNumberConstants . ONE_NUMBER ) ;
// checkParam(request, params);
payOrderRepository . save ( order ) ;
//获取支付宝GET过来反馈信息
i + + ;
Map < String , String > params = getAllRequestParam ( request ) ;
//同步到聚石塔内数据
//验签
JSONObject jsonObject = requestCore . savePayOrder ( order ) ;
Boolean flag = Factory . Payment . Common ( ) . verifyNotify ( params ) ;
if ( DefaultNumberConstants . TWO_HUNDRED = = ( Integer ) jsonObject . get ( "code" ) ) {
if ( flag ! = null & & flag ) {
log . info ( " order verify signature success the orderNumber as {}" , orderNo ) ;
if ( order ! = null & & order . getStatus ( ) = = 0 ) {
order . setPayTime ( DateUtil . date ( ) ) ;
order . setStatus ( DefaultNumberConstants . ONE_NUMBER ) ;
payOrderRepository . save ( order ) ;
i + + ;
i + + ;
//子账号授权
//同步到聚石塔内数据
JSONObject jsonObject1 = requestCore . authorizeChildrenAccount ( order . getMasterUserId ( ) , order . getNickName ( ) , order . getTemplateId ( ) ) ;
JSONObject jsonObject = requestCore . savePayOrder ( order ) ;
if ( DefaultNumberConstants . TWO_HUNDRED ! = ( Integer ) jsonObject1 . get ( "code" ) ) {
if ( DefaultNumberConstants . TWO_HUNDRED = = ( Integer ) jsonObject . get ( "code" ) ) {
updateRollBack ( order , DefaultNumberConstants . TWO_NUMBER ) ;
i + + ;
//子账号授权
JSONObject jsonObject1 = requestCore . authorizeChildrenAccount ( order . getMasterUserId ( ) , order . getNickName ( ) , order . getTemplateId ( ) ) ;
if ( DefaultNumberConstants . TWO_HUNDRED ! = ( Integer ) jsonObject1 . get ( "code" ) ) {
updateRollBack ( order , DefaultNumberConstants . TWO_NUMBER ) ;
}
} else {
updateRollBack ( order , DefaultNumberConstants . ONE_NUMBER ) ;
}
}
} else {
updateRollBack ( order , DefaultNumberConstants . ONE_NUMBER ) ;
}
}
}
}
} catch ( Exception e ) {
updateRollBack ( order , i ) ;
log . error ( "the pc response error time {}" , LocalTime . now ( ) ) ;
return "success" ;
}
}
} catch ( Exception e ) {
updateRollBack ( order , i ) ;
log . error ( "the pc response error time {}" , LocalTime . now ( ) ) ;
throw new TaoMiCommException ( ResponseCode . CALLBACK_FAILED . getDesc ( ) ) ;
}
}
return CommonResult . successfulOperation ( ) ;
return "success" ;
}
}
private void updateRollBack ( PayOrder payOrder , int i ) {
private void updateRollBack ( PayOrder payOrder , int i ) {
@ -206,7 +218,6 @@ public class AccountRechargeServiceImpl implements AccountRechargeService {
String orderNo = String . valueOf ( IdUtil . getSnowflake ( workerId , datacenterId ) . nextId ( ) ) ;
String orderNo = String . valueOf ( IdUtil . getSnowflake ( workerId , datacenterId ) . nextId ( ) ) ;
payTwoOrder . setAnticipateNum ( NumberUtil . div ( payTwoOrder . getAmount ( ) , BigDecimal . valueOf ( amount ) ) . longValue ( ) ) ;
payTwoOrder . setAnticipateNum ( NumberUtil . div ( payTwoOrder . getAmount ( ) , BigDecimal . valueOf ( amount ) ) . longValue ( ) ) ;
Double num = payTwoOrder . getAmount ( ) + payTwoOrder . getIdenticalAmount ( ) ;
Double num = payTwoOrder . getAmount ( ) + payTwoOrder . getIdenticalAmount ( ) ;
// Double num = 0.01;
// 生成返回对象
// 生成返回对象
response = Factory . Payment . Page ( )
response = Factory . Payment . Page ( )
. pay ( PayConstants . PAY_TITLE + orderNo , orderNo , num . toString ( ) , aliPay . getNotifyUrlTwo ( ) ) ;
. pay ( PayConstants . PAY_TITLE + orderNo , orderNo , num . toString ( ) , aliPay . getNotifyUrlTwo ( ) ) ;
@ -215,6 +226,7 @@ public class AccountRechargeServiceImpl implements AccountRechargeService {
payTwoOrder . setStatus ( DefaultNumberConstants . ZERO_NUMBER ) ;
payTwoOrder . setStatus ( DefaultNumberConstants . ZERO_NUMBER ) ;
payTwoOrder . setFinalAmount ( num ) ;
payTwoOrder . setFinalAmount ( num ) ;
payTwoOrder . setOrderStatus ( DefaultNumberConstants . ZERO_NUMBER ) ;
payTwoOrder . setOrderStatus ( DefaultNumberConstants . ZERO_NUMBER ) ;
payTwoOrder . setIsCallback ( DefaultNumberConstants . ZERO_NUMBER ) ;
payTwoOrderRepository . save ( payTwoOrder ) ;
payTwoOrderRepository . save ( payTwoOrder ) ;
return new CommonResult < String > ( ) . success ( response . getBody ( ) ) ;
return new CommonResult < String > ( ) . success ( response . getBody ( ) ) ;
}
}
@ -237,71 +249,93 @@ public class AccountRechargeServiceImpl implements AccountRechargeService {
* @param request
* @param request
* /
* /
@Override
@Override
public CommonResult < String > pcTwoNotifyResponse ( HttpServletRequest request ) {
@Transactional ( rollbackFor = Exception . class )
int i = 0 ;
public String pcTwoNotifyResponse ( HttpServletRequest request ) {
PayTwoOrder order = null ;
//商户订单号
try {
String orderNo = new String ( request . getParameter ( PayConstants . OUT_TRADE_NO ) .
//获取支付宝GET过来反馈信息
getBytes ( StandardCharsets . ISO_8859_1 ) , StandardCharsets . UTF_8 ) ;
Map < String , String > params = new HashMap < > ( DefaultNumberConstants . TWO_NUMBER ) ;
//查询订单信息
// 处理乱码问题
PayTwoOrder order = payTwoOrderRepository . findByOrderNumber ( orderNo ) ;
checkParam ( request , params ) ;
if ( order ! = null & & order . getIsCallback ( ) = = 0 ) {
Boolean flag = Factory . Payment . Common ( ) . verifyNotify ( params ) ;
log . info ( "======================同步支付回调开始时间:{}" , LocalTime . now ( ) ) ;
//商户订单号
//先更新回调状态,防止二次回调
String orderNo = new String ( request . getParameter ( PayConstants . OUT_TRADE_NO ) .
order . setIsCallback ( DefaultNumberConstants . ONE_NUMBER ) ;
getBytes ( StandardCharsets . ISO_8859_1 ) , StandardCharsets . UTF_8 ) ;
payTwoOrderRepository . save ( order ) ;
if ( flag ! = null & & flag ) {
int i = 0 ;
log . info ( " order verify signature success the orderNumber as {}" , orderNo ) ;
try {
order = payTwoOrderRepository . findByOrderNumber ( orderNo ) ;
//获取支付宝GET过来反馈信息
if ( order ! = null & & order . getStatus ( ) = = 0 ) {
// Map<String, String> params = new HashMap<>(DefaultNumberConstants.TWO_NUMBER);
order . setPayTime ( DateUtil . date ( ) ) ;
// 处理乱码问题
order . setStatus ( DefaultNumberConstants . ONE_NUMBER ) ;
// checkParam(request, params);
payTwoOrderRepository . save ( order ) ;
//获取支付宝GET过来反馈信息
i + + ;
Map < String , String > params = getAllRequestParam ( request ) ;
//同步数据
//验签
JSONObject jsonObject = requestCore . savePayTwoOrder ( order ) ;
Boolean flag = Factory . Payment . Common ( ) . verifyNotify ( params ) ;
if ( DefaultNumberConstants . TWO_HUNDRED = = ( Integer ) jsonObject . get ( "code" ) ) {
if ( flag ! = null & & flag ) {
log . info ( " order verify signature success the orderNumber as {}" , orderNo ) ;
if ( order ! = null & & order . getStatus ( ) = = 0 ) {
order . setPayTime ( DateUtil . date ( ) ) ;
order . setStatus ( DefaultNumberConstants . ONE_NUMBER ) ;
payTwoOrderRepository . save ( order ) ;
i + + ;
i + + ;
// 修改账户信息 开通服务
//同步数据
JSONObject jsonObject2 = requestCore . updateSellerAccount ( order , false ) ;
JSONObject jsonObject = requestCore . savePayTwoOrder ( order ) ;
if ( DefaultNumberConstants . TWO_HUNDRED ! = ( Integer ) jsonObject2 . get ( "code" ) ) {
if ( DefaultNumberConstants . TWO_HUNDRED = = ( Integer ) jsonObject . get ( "code" ) ) {
log . error ( "++++++++++++++++修改账户信息,开通淘宝服务失败:{}" , order . getNickName ( ) ) ;
i + + ;
order . setOrderStatus ( i ) ;
// 修改账户信息 开通服务
JSONObject jsonObject2 = requestCore . updateSellerAccount ( order , false ) ;
if ( DefaultNumberConstants . TWO_HUNDRED ! = ( Integer ) jsonObject2 . get ( "code" ) ) {
log . error ( "++++++++++++++++修改账户信息,开通淘宝服务失败:{}" , order . getNickName ( ) ) ;
order . setOrderStatus ( i ) ;
requestCore . updateTwoPayOrder ( order ) ;
}
} else {
log . error ( "++++++++++++++++同步到聚石塔内数据失败:{}" , order . getNickName ( ) ) ;
order . setOrderStatus ( DefaultNumberConstants . ONE_NUMBER ) ;
requestCore . updateTwoPayOrder ( order ) ;
requestCore . updateTwoPayOrder ( order ) ;
}
}
} else {
log . error ( "++++++++++++++++同步到聚石塔内数据失败:{}" , order . getNickName ( ) ) ;
order . setOrderStatus ( DefaultNumberConstants . ONE_NUMBER ) ;
requestCore . updateTwoPayOrder ( order ) ;
}
}
}
}
} catch ( Exception e ) {
order . setOrderStatus ( i ) ;
if ( i > DefaultNumberConstants . ONE_NUMBER ) {
requestCore . updateTwoPayOrder ( order ) ;
}
payTwoOrderRepository . save ( order ) ;
log . error ( "the pc response error time {}" , LocalTime . now ( ) ) ;
return "success" ;
}
}
} catch ( Exception e ) {
order . setOrderStatus ( i ) ;
if ( i > DefaultNumberConstants . ONE_NUMBER ) {
requestCore . updateTwoPayOrder ( order ) ;
}
payTwoOrderRepository . save ( order ) ;
log . error ( "the pc response error time {}" , LocalTime . now ( ) ) ;
throw new TaoMiCommException ( ResponseCode . CALLBACK_FAILED . getDesc ( ) ) ;
}
}
return CommonResult . successfulOperation ( ) ;
return "success" ;
}
}
private void checkParam ( HttpServletRequest request , Map < String , String > params ) {
// private void checkParam(HttpServletRequest request, Map<String, String> params) {
Map < String , String [ ] > requestParams = request . getParameterMap ( ) ;
// Map<String, String[]> requestParams = request.getParameterMap();
if ( CollectionUtils . isNotEmpty ( requestParams . keySet ( ) ) ) {
// if (CollectionUtils.isNotEmpty(requestParams.keySet())) {
for ( String name : requestParams . keySet ( ) ) {
// for (String name : requestParams.keySet()) {
String [ ] values = requestParams . get ( name ) ;
// String[] values = requestParams.get(name);
String valueStr = "" ;
// String valueStr = "";
for ( int i = 0 ; i < values . length ; i + + ) {
// for (int i = 0; i < values.length; i++) {
valueStr = ( i = = values . length - 1 ) ? valueStr + values [ i ]
// valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values [ i ] + StrUtil . COMMA ;
// : valueStr + values[i] + StrUtil.COMMA;
}
// }
//乱码解决,这段代码在出现乱码时使用
// //乱码解决,这段代码在出现乱码时使用
valueStr = new String ( valueStr . getBytes
// valueStr = new String(valueStr.getBytes
( StandardCharsets . ISO_8859_1 ) , StandardCharsets . UTF_8 ) ;
// (StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
params . put ( name , valueStr ) ;
// params.put(name, valueStr);
}
// }
// }
// }
//得到请求的参数
private Map < String , String > getAllRequestParam ( final HttpServletRequest request ) {
Map < String , String > res = new HashMap < > ( ) ;
Enumeration < ? > temp = request . getParameterNames ( ) ;
while ( temp . hasMoreElements ( ) ) {
String en = ( String ) temp . nextElement ( ) ;
String value = request . getParameter ( en ) ;
res . put ( en , value ) ;
}
}
return res ;
}
}
}
}