|
|
@@ -19,6 +19,7 @@ import com.iformall.service.pay.PayServiceFactory; |
|
|
|
import com.iformall.service.pay.service.pay.PayAdapterService; |
|
|
|
import io.swagger.annotations.Api; |
|
|
|
import io.swagger.annotations.ApiOperation; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.jdom2.JDOMException; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
@@ -151,30 +152,12 @@ public class CallbackPayController extends BaseController { |
|
|
|
@AuthIgnore |
|
|
|
@ApiOperation("支付回调") |
|
|
|
@PostMapping(value = "/aliNotify") |
|
|
|
public Map<String,Object> _aliNotify(HttpServletRequest request, HttpServletResponse response) { |
|
|
|
public String _aliNotify(HttpServletRequest request, HttpServletResponse response) { |
|
|
|
logger.debug("[" + getIpAddr() + "] CallbackPayController::_aliNotify"); |
|
|
|
|
|
|
|
String body1 = ((BodyReaderHttpServletRequestWrapper) request).getBody(); |
|
|
|
String body = ((BodyReaderHttpServletRequestWrapper) request).getBody(); |
|
|
|
|
|
|
|
logger.info("ali支付回调结果通知1{}"+JSONObject.toJSONString(body1)); |
|
|
|
|
|
|
|
Map< String , String > paranMap = new HashMap < String , String > (); |
|
|
|
Map requestParams = request.getParameterMap(); |
|
|
|
logger.info("ali支付回调结果通知2{}"+JSONObject.toJSONString(requestParams)); |
|
|
|
|
|
|
|
for(Iterator iter = requestParams.keySet().iterator(); iter.hasNext();){ |
|
|
|
String name = (String)iter.next(); |
|
|
|
String[] values = (String [])requestParams.get(name); |
|
|
|
String valueStr = ""; |
|
|
|
for(int i = 0;i < values.length;i ++ ){ |
|
|
|
valueStr = (i==values.length-1)?valueStr + values [i]:valueStr + values[i] + ","; |
|
|
|
} |
|
|
|
//乱码解决,这段代码在出现乱码时使用。 |
|
|
|
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); |
|
|
|
paranMap.put (name,valueStr); |
|
|
|
} |
|
|
|
|
|
|
|
logger.info("ali支付回调结果通知{}"+JSONObject.toJSONString(paranMap)); |
|
|
|
logger.info("ali支付回调结果通知 body{}"+body); |
|
|
|
|
|
|
|
Map<String,Object> resultMap = new HashMap<>(); |
|
|
|
|
|
|
@@ -182,65 +165,43 @@ public class CallbackPayController extends BaseController { |
|
|
|
* ----效验数据来源合法 |
|
|
|
*/ |
|
|
|
try{ |
|
|
|
String body = this.getBody(request); |
|
|
|
logger.info("ali支付回调结果通知---body{}"+body); |
|
|
|
// String msg = (String) paranMap.get("msg"); |
|
|
|
// String type = (String) paranMap.get("type"); |
|
|
|
// |
|
|
|
// Map<String, Object> pMap = JSONObject.parseObject(msg, Map.class); |
|
|
|
// String appid = (String) pMap.get("appid"); |
|
|
|
// WxAppinfo appInfo = wxAppinfoService.getOnlyByAppIdFromRedis(appid); |
|
|
|
// WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); |
|
|
|
// if("payment".equals(type)){ |
|
|
|
// String out_order_no = (String)pMap.get("cp_orderno"); |
|
|
|
// |
|
|
|
// EnumProductOrderPayVendor payVendorEnum = EnumProductOrderPayVendor.PAY_WAY_TT; |
|
|
|
// ProductOrderPay orderPay = productOrderPayService.getByOrder(Long.parseLong(out_order_no), payVendorEnum); |
|
|
|
// |
|
|
|
// PayAdapterService payAdapterService = payServiceFactory.getPayAdapterService(payVendorEnum.getCode()); |
|
|
|
// productOrderPayService.handleProductOrderByQuery(appInfo,payAccount,orderPay,payAdapterService); |
|
|
|
// |
|
|
|
// resultMap.put("err_no",0); |
|
|
|
// resultMap.put("err_tips","success"); |
|
|
|
// } |
|
|
|
Map<String, String> paranMap = handBody(body); |
|
|
|
logger.info("ali支付回调结果通知 paranMap{}"+JSONObject.toJSONString(paranMap)); |
|
|
|
|
|
|
|
String app_id = paranMap.get("app_id"); |
|
|
|
WxAppinfo appInfo = wxAppinfoService.getOnlyByAppIdFromRedis(app_id); |
|
|
|
WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); |
|
|
|
|
|
|
|
String out_trade_no = paranMap.get("out_trade_no"); |
|
|
|
String trade_status = paranMap.get("trade_status"); |
|
|
|
if("TRADE_SUCCESS".equals(trade_status)){ |
|
|
|
EnumProductOrderPayVendor payVendorEnum = EnumProductOrderPayVendor.PAY_WAY_ALIPAY_WAP; |
|
|
|
ProductOrderPay orderPay = productOrderPayService.getByOrder(Long.parseLong(out_trade_no), payVendorEnum); |
|
|
|
|
|
|
|
PayAdapterService payAdapterService = payServiceFactory.getPayAdapterService(payVendorEnum.getCode()); |
|
|
|
productOrderPayService.handleProductOrderByQuery(appInfo,payAccount,orderPay,payAdapterService); |
|
|
|
} |
|
|
|
return "success"; |
|
|
|
}catch(Exception e){ |
|
|
|
logger.error("ali支付回调处理异常"+e); |
|
|
|
resultMap.put("err_no",ErrorCode.SYS_SERVER_ERROR.getCode()); |
|
|
|
resultMap.put("err_tips","ali支付回调处理异常"); |
|
|
|
} |
|
|
|
return resultMap; |
|
|
|
return "fail"; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String getBody(HttpServletRequest request) throws IOException { |
|
|
|
StringBuilder stringBuilder = new StringBuilder(); |
|
|
|
BufferedReader bufferedReader = null; |
|
|
|
try { |
|
|
|
InputStream inputStream = request.getInputStream(); |
|
|
|
if (inputStream != null) { |
|
|
|
bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"utf-8")); |
|
|
|
char[] charBuffer = new char[1024]; |
|
|
|
int bytesRead = -1; |
|
|
|
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { |
|
|
|
stringBuilder.append(charBuffer, 0, bytesRead); |
|
|
|
} |
|
|
|
} else { |
|
|
|
stringBuilder.append(""); |
|
|
|
} |
|
|
|
} catch ( |
|
|
|
IOException ex) { |
|
|
|
throw ex; |
|
|
|
} finally { |
|
|
|
if (bufferedReader != null) { |
|
|
|
try { |
|
|
|
bufferedReader.close(); |
|
|
|
} catch (IOException ex) { |
|
|
|
throw ex; |
|
|
|
private Map<String,String> handBody(String body){ |
|
|
|
Map<String,String> map = new HashMap<>(); |
|
|
|
if(StringUtils.isNotBlank(body)){ |
|
|
|
String[] key_value = body.split("&"); |
|
|
|
if(key_value.length > 0){ |
|
|
|
for (String kv: key_value) { |
|
|
|
String[] split = kv.split("="); |
|
|
|
map.put(split[0],split[1]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return stringBuilder.toString(); |
|
|
|
return map; |
|
|
|
} |
|
|
|
|
|
|
|
} |