post请求处理后 分接口进入需要的service时报错 好像进不去 什么原因 如图

图片说明

其他的service请求都可以进去 这个新添加的service debug的时候进不去 大概有哪些问题 求解

把你post 请求和controller里方法贴出看下

图片说明

把RecvOrder类代码贴出来

package com.netfinworks.mag.web.controller;

import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.net.URLDecoder;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.springframework.web.servlet.view.RedirectView;

import com.meidusa.fastjson.JSON;
import com.netfinworks.common.lang.StringUtil;
import com.netfinworks.mag.constant.ReqConstant;
import com.netfinworks.mag.enums.ProcessStateKind;
import com.netfinworks.mag.enums.ServiceKind;
import com.netfinworks.mag.exception.CommonDefinedException;
import com.netfinworks.mag.exception.ErrorCodeException;
import com.netfinworks.mag.exception.ErrorCodeException.CommonException;
import com.netfinworks.mag.ext.service.MaQueryService;
import com.netfinworks.mag.helper.RequestHelper;
import com.netfinworks.mag.receive.order.ro.RequestBase;
import com.netfinworks.mag.service.base.IMagService;
import com.netfinworks.mag.service.base.ProcessResult;
import com.netfinworks.mag.service.base.SpringContextUtil;
import com.netfinworks.mag.util.sign.VerifyResult;
import com.netfinworks.mag.util.tools.MagCore;
import com.netfinworks.mag.util.tools.NetUtil;
import com.netfinworks.mag.web.verify.VerifyService;
import com.yongda.supermag.core.common.exception.BaseServiceException;
import com.yongda.supermag.core.common.exception.ErrorCode;

public class RecvOrder extends AbstractController {

private static final Logger logger                 = LoggerFactory.getLogger(RecvOrder.class);
// 统一日志
//    private static final Logger wlogger                      = LoggerFactory
//                                                                 .getLogger("mas.order.wlog");

private final String        ERRORCODE              = "ErrorCode";
private final String        ERRORMSG               = "ErrorMsg";

private final Charset       BASIC_REQUEST_ENCODING = Charset.forName("iso8859-1");

private VerifyService       verifyService;

private MaQueryService      maQueryService;

private SpringContextUtil   contextUtil;

private String              submitNetbank          = "<script language='javascript'>document.getElementById('frmBankID').submit();</script>";

public void setContextUtil(SpringContextUtil contextUtil) {
    this.contextUtil = contextUtil;
}

public void setVerifyService(VerifyService verifyService) {
    this.verifyService = verifyService;
}

public void setMaQueryService(MaQueryService maQueryService) {
    this.maQueryService = maQueryService;
}

@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
                                             HttpServletResponse response) throws Exception {
    try {
        Map<?, ?> parameters = request.getParameterMap();
        if (logger.isInfoEnabled()) {
            logger.info(request.getMethod() + ", RecvOrder original request:"
                        + JSON.toJSONString(parameters));
        }

        if (parameters == null || parameters.isEmpty() == true) {
            // 什么参数都没有
            throw CommonDefinedException.REQUIRED_FIELD_NOT_EXIST;
        }
        String referer = request.getHeader(ReqConstant.REFERER); //风控用
        String userAgent = request.getHeader(ReqConstant.USER_AGENT);

        logger.info("referer:" + referer + ",userAgent:" + userAgent);

        Charset charset = getEncoding(request);

        Map<String, String> formattedParameters = new HashMap<String, String>(parameters.size());
        for (Map.Entry<?, ?> entry : parameters.entrySet()) {
            if (entry.getValue() == null || Array.getLength(entry.getValue()) == 0) {
                formattedParameters.put((String) entry.getKey(), null);
            } else {
                if (HttpMethod.GET.name().equals(request.getMethod())) {
                    formattedParameters.put(
                        (String) entry.getKey(),
                        new String(((String) Array.get(entry.getValue(), 0))

// .getBytes(BASIC_REQUEST_ENCODING), charset));
.getBytes(), charset));
// (String) Array.get(entry.getValue(), 0));
} else {
formattedParameters.put(
(String) entry.getKey(),
URLDecoder.decode((String) Array.get(entry.getValue(), 0),
charset.name()));
}
}
}

        if (logger.isInfoEnabled()) {
            logger.info("RecvOrder original request format:"
                        + JSON.toJSONString(formattedParameters));
        }

        String serviceName = getServiceName(formattedParameters);
        IMagService service = (IMagService) contextUtil.getServiceByAnnoName(serviceName);

        //转换为基础对象
        RequestBase baseInfo = RequestHelper.convertBaseTemp(formattedParameters);
        //验签
        verify(baseInfo, charset, formattedParameters); 

        // 防XSS攻击,去掉“<”和“>”
        formattedParameters = auniXSS(formattedParameters);
        //分接口处理
        if(StringUtils.isNotBlank(referer) && referer.indexOf('?') != -1){
            referer = referer.substring(0, referer.indexOf('?'));
        }
        formattedParameters.put(ReqConstant.REFERER, referer); // 加refer信息
        formattedParameters.put(ReqConstant.USERAGENT, userAgent); // 加userAgent信息

        // 获取buyer_ip是,目前不判断钓鱼风险
        if (StringUtils.isEmpty(formattedParameters.get(ReqConstant.BUYER_IP))) {
            formattedParameters.put(ReqConstant.BUYER_IP, NetUtil.getIpAddr(request));
        }

        ProcessResult result = service.process(formattedParameters);

        if (result != null) {
            if (!result.isResult()) {
                respError(response, result.getException(), result.getMemo());
                return null;
            } else if (getGoCashier(formattedParameters) && result.isForwardCashier()) {
                // 跳转收银台
                Map<String, String> tokenParam = new HashMap<String, String>();
                //                    tokenParam.put("token", "1234567");
                if(goH5Cashier(formattedParameters)){
                    respSuccessWithAllInfo(response, result);
                    return null;
                }
                return new ModelAndView(new RedirectView(result.getCashierUrl()), tokenParam);
            } else if (getGoCashier(formattedParameters)
                       && StringUtil.isNotEmpty(result.getNetBankFormUrl())) {
                String goNetbank = result.getNetBankFormUrl() + submitNetbank;
                String formCharset = result.getFormCharset();
                logger.debug("跳转网银:{}, 编码:{}", goNetbank, formCharset);

                if (StringUtils.isEmpty(formCharset)) {
                    formCharset = "GBK";
                }

                // 网银直接跳转
                request.setAttribute("charset", formCharset);
                response.setContentType("text/html;charset=" + formCharset); // chrome兼容
                response.getWriter().write(goNetbank);
                return null;
            } else {
                // 回步返回成功信息
                //respSuccess(response, result);
                respSuccessWithAllInfo(response, result);
            }
        }

    } catch (Exception e) {
        logger.error("Receive error.", e);
        if (e instanceof ErrorCodeException) {
            logger.error(ERRORCODE + ":" + ((ErrorCodeException) e).getErrorCode() + ";"
                         + ERRORMSG + ":" + ((ErrorCodeException) e).getErrorMsg() + ";", e);
            respError(response, (ErrorCodeException) e, ((ErrorCodeException) e).getMemo());
        } else {
            logger.error("系统错误", e);

            BaseServiceException a= (BaseServiceException)e;

            respError(response, CommonDefinedException.SYSTEM_ERROR, "系统错误"+a.getMessage());
        }

        return null;
    }

    return null;
    //        return new ModelAndView(new RedirectView(cashierUrl), null);
}

/**
 * 验签
 * @param tradeInfo
 * @param charset
 * @param formattedParameters
 * @throws CommonException
 */

/* private void verify(RequestBase baseInfo, Charset charset,
Map formattedParameters) throws CommonException {
String signContent = MagCore.createLinkString(MagCore.paraFilter(formattedParameters),
false);

    if (logger.isInfoEnabled()) {
        logger.info("verify signature: { content:" + signContent + ", signMsg:"
                    + baseInfo.getSign() + "}");
    }

    VerifyResult result = verifyService.verify(baseInfo.getPartnerId(), baseInfo.getService(),
        signContent, baseInfo.getSign(), charset.name(), baseInfo.getSignType());
    if (!result.isSuccess()) {
        //验签未通过
        logger.error(ERRORCODE + ":" + CommonDefinedException.ILLEGAL_SIGN.getErrorCode() + ";"
                     + ERRORMSG + ":" + CommonDefinedException.ILLEGAL_SIGN.getErrorMsg()
                     + ";request dosen't pass verify.");
        throw CommonDefinedException.ILLEGAL_SIGN;
    }

    //验证结果为需要进行证书持有者校验,则校验会员标识是否是证书的持有者
    if (result.isNeedPostCheck()) {
        //校验合作者身份ID的会员标识与证书持有者是否一致
        String identityNo = maQueryService.queryIdentityNoByMemberId(formattedParameters.get("partner_id"));
        Map<String, Object> map = result.getInfo();
        if (map != null) {
            if (!identityNo.equalsIgnoreCase(String.valueOf(map.get(VerifyResult.identityNo)))) {
                logger.error("合作者身份ID会员标识与证书持有者不匹配,合作者身份ID:"+formattedParameters.get("partner_id")+",证书持有者:"+map.get(VerifyResult.identityNo));
                throw CommonDefinedException.IDENTITY_NO_ERROR;
            }
        }
        //如果传入的会员标识不为空,则校验会员标识与证书持有者是否一致
        identityNo = formattedParameters.get("identity_no");
        if(StringUtil.isNotBlank(identityNo)){
            if (map != null) {
                if (!identityNo.equalsIgnoreCase(String.valueOf(map.get(VerifyResult.identityNo)))) {
                    logger.error("会员标识与证书持有者不匹配,会员标识:"+identityNo+",证书持有者:"+map.get(VerifyResult.identityNo));
                    throw CommonDefinedException.IDENTITY_NO_ERROR;
                }
            }
        }
    }

    baseInfo.setState(ProcessStateKind.ACCEPT);
    if (logger.isDebugEnabled()) {
        logger.debug("invoke verify end:" + result.isSuccess());
    }
}

/
/
*
* 验签
* @param tradeInfo
* @param charset
* @param formattedParameters
* @throws CommonException
*/
private void verify(RequestBase baseInfo, Charset charset,
Map formattedParameters) throws CommonException {
String signContent = MagCore.createLinkString(MagCore.paraFilter(formattedParameters),
false);

    if (logger.isInfoEnabled()) {
        logger.info("verify signature: { content:" + signContent + ", signMsg:"
                    + baseInfo.getSign() + "}");
    }

    VerifyResult result = verifyService.verify(baseInfo.getPartnerId(), baseInfo.getService(),
        signContent, baseInfo.getSign(), charset.name(), baseInfo.getSignType());
    if (!result.isSuccess()) {
        //验签未通过
        logger.error(ERRORCODE + ":" + CommonDefinedException.ILLEGAL_SIGN.getErrorCode() + ";"
                     + ERRORMSG + ":" + CommonDefinedException.ILLEGAL_SIGN.getErrorMsg()
                     + ";request dosen't pass verify.");
        throw CommonDefinedException.ILLEGAL_SIGN;
    }

    //验证结果为需要进行证书持有者校验,则校验会员标识是否是证书的持有者
    if (result.isNeedPostCheck()) {
        //校验合作者身份ID的会员标识与证书持有者是否一致
        String identityNo = maQueryService.queryIdentityNoByMemberId(formattedParameters.get("partner_id"));
        Map<String, Object> map = result.getInfo();
        if (map != null) {
            if (!identityNo.equalsIgnoreCase(String.valueOf(map.get(VerifyResult.identityNo)))) {
                logger.error("合作者身份ID会员标识与证书持有者不匹配,合作者身份ID:"+formattedParameters.get("partner_id")+",证书持有者:"+map.get(VerifyResult.identityNo));
                throw CommonDefinedException.IDENTITY_NO_ERROR;
            }
        }
        //如果传入的会员标识不为空,则校验会员标识与证书持有者是否一致
        identityNo = formattedParameters.get("identity_no");
        if(StringUtil.isNotBlank(identityNo)){
            if (map != null) {
                if (!identityNo.equalsIgnoreCase(String.valueOf(map.get(VerifyResult.identityNo)))) {
                    logger.error("会员标识与证书持有者不匹配,会员标识:"+identityNo+",证书持有者:"+map.get(VerifyResult.identityNo));
                    throw CommonDefinedException.IDENTITY_NO_ERROR;
                }
            }
        }
    }

    baseInfo.setState(ProcessStateKind.ACCEPT);
    if (logger.isDebugEnabled()) {
        logger.debug("invoke verify end:" + result.isSuccess());
    }
}

private Charset getEncoding(HttpServletRequest request) {
    Charset utf8Charset = Charset.forName("UTF-8");
    Charset gbkCharset = Charset.forName("GBK");
    Charset gb2312Charset = Charset.forName("GB2312");
    String inputCharset = request.getParameter(ReqConstant.INPUT_CHARSET);
    if ("utf-8".equalsIgnoreCase(inputCharset)) {
        return utf8Charset;
    } else if ("gbk".equalsIgnoreCase(inputCharset)) {
        return gbkCharset;
    } else if ("gb2312".equalsIgnoreCase(inputCharset)) {
        return gb2312Charset;
    }
    return utf8Charset;
}

private boolean getGoCashier(Map<String, String> parameters) {
    boolean result = true;
    String goCashierStr = parameters.get(ReqConstant.GO_CASHIER);
    if (goCashierStr != null && "Y".equalsIgnoreCase(goCashierStr)) {
        result = true;
    }
    if (goCashierStr != null && "N".equalsIgnoreCase(goCashierStr)) {
        result = false;
        logger.debug("强制不跳转收银台");
    }
    return result;
}

private boolean goH5Cashier(Map<String, String> parameters) {
    boolean result = false;
    String serviceStr = parameters.get(ReqConstant.SERVICE);
    ServiceKind service = ServiceKind.getByCode(serviceStr);
    if(service != null){
        if(service == ServiceKind.create_instant_pay_mobile){
            result = true;
        }
    }
    return result;
}

/**
 * 取得service并验证支付方式
 * @param request
 * @return
 * @throws Exception
 */
private String getServiceName(Map<String, String> parameters) throws Exception {
    String serviceName = parameters.get(ReqConstant.SERVICE);
    String partnerId = parameters.get(ReqConstant.PARNTER_ID);

// String payMethod = parameters.get(ReqConstant.PAY_METHOD);

    if (StringUtil.isEmpty(partnerId)) {
        CommonException exp = CommonDefinedException.REQUIRED_FIELD_NOT_EXIST;
        exp.setMemo("合作者身份ID");
        throw exp;
    } else if (partnerId.length() > 32) {
        CommonException exp = CommonDefinedException.FIELD_LENGTH_EXCEEDS_LIMIT;
        exp.setMemo("合作者身份ID");
        throw exp;
    }

    if (StringUtil.isNotEmpty(serviceName)) {
        serviceName = serviceName.toLowerCase();
    } else {
        CommonException exp = CommonDefinedException.REQUIRED_FIELD_NOT_EXIST;
        exp.setMemo("接口名称");
        throw exp;
    }
    ServiceKind service = ServiceKind.getByCode(serviceName);

    if (service == null) {
        throw CommonDefinedException.ILLEGAL_SERVICE;
    }

// PartnerInfo partnerInfo = AcsTask.getPartnerPublicKey(partnerId);
// List payList = partnerInfo.getPayChannelList();
// if (ServiceKind.operator_substitute_recharge.equals(service)) {
// // 代充的支付方式不一样
// PayChannelKind payKind = PayChannelKind.getByMsg(payMethod);
// if (payKind == null) {
// throw CommonDefinedException.PAY_METHOD_ERROR; // 支付方式错误
// }
// if (!payList.contains(payKind.getCode())) {
// throw CommonDefinedException.ILLEGAL_PAY_METHOD; // 未授权
// }
// } else {
// List payMethodList = Tools.str2PayMethodList(payMethod);
// if (payMethodList != null) {
// for (PayMethod pay : payMethodList) {
// PayChannelKind payKind = pay.getPayChannel();
// if (!payList.contains(payKind.getCode())) {
// throw CommonDefinedException.ILLEGAL_PAY_METHOD; // 未授权
// }
// }
// }
// }

    //        ILLEGAL_PAY_METHOD
    // 去掉了充值接口
    if (ServiceKind.create_deposit.equals(service)) {
        throw CommonDefinedException.ILLEGAL_SERVICE;
    }
    return serviceName;
}

private void respError(HttpServletResponse response, ErrorCodeException e, String memo)
                                                                                       throws Exception {
    String errorInfo = "is_success=F&_input_charset=UTF-8&";
    response.setCharacterEncoding("utf8");
    response.setHeader("content-type", "text/html;charset=UTF-8");
    StringBuilder sb = new StringBuilder();
    sb.append(errorInfo).append("error_code=").append(e.getErrorCode())
        .append("&error_message=").append(e.getErrorMsg());
    if (StringUtil.isNotEmpty(memo)) {
        sb.append("&memo=").append(memo);
    }

    response.getWriter().write(sb.toString());
}

private void respSuccess(HttpServletResponse response, ProcessResult result) throws Exception {
    String succInfo = "is_success=T&_input_charset=UTF-8";
    response.setCharacterEncoding("utf8");
    response.setHeader("content-type", "text/html;charset=UTF-8");
    StringBuilder sb = new StringBuilder();
    sb.append(succInfo);

    if (StringUtil.isNotEmpty(result.getInner_trade_no())) {
        sb.append("&inner_trade_no=").append(result.getInner_trade_no());
    }
    if (StringUtil.isNotEmpty(result.getOuter_trade_no())) {
        sb.append("&outer_trade_no=").append(result.getOuter_trade_no());
    }
    if (StringUtil.isNotEmpty(result.getPartner_id())) {
        sb.append("&partner_id=").append(result.getPartner_id());
    }
    /*if (StringUtil.isNotEmpty(result.getPos_pay_no())) {
        sb.append("&pos_pay_no=").append(result.getPos_pay_no());
    }*/
    if (StringUtil.isNotEmpty(result.getInstPayInfo())) {
        sb.append("&inst_pay_info=").append(result.getInstPayInfo());
    }
    if (StringUtil.isNotEmpty(result.getMemo())) {
        sb.append("&memo=").append(result.getMemo());
    }
    if (StringUtil.isNotEmpty(result.getTradeList())) {
        sb.append("&trade_list=").append(result.getTradeList());
    }
    if (StringUtil.isNotEmpty(result.getPayeeId())) {
        sb.append("&payee_id=").append(result.getPayeeId());
    }
    if (StringUtil.isNotEmpty(result.getPayeeIdType())) {
        sb.append("&payee_id_type=").append(result.getPayeeIdType());
    }
    if (StringUtil.isNotEmpty(result.getPageNo())) {
        sb.append("&page_no=").append(result.getPageNo());
    }
    if (StringUtil.isNotEmpty(result.getPageSize())) {
        sb.append("&page_size=").append(result.getPageSize());
    }
    if (StringUtil.isNotEmpty(result.getTotalItem())) {
        sb.append("&total_item=").append(result.getTotalItem());
    }
    if (StringUtil.isNotEmpty(result.getDetailList())) {
        sb.append("&detail_list=").append(result.getDetailList());
    }
    response.getWriter().write(sb.toString());
}

private void respSuccessWithAllInfo(HttpServletResponse response, ProcessResult result)
                                                                                       throws Exception {
    String succInfo = "is_success=T&_input_charset=UTF-8";
    response.setCharacterEncoding("UTF-8");
    response.setHeader("content-type", "text/html;charset=UTF-8");
    StringBuilder sb = new StringBuilder();
    sb.append(succInfo);

    for (Field f : ProcessResult.class.getDeclaredFields()) {
        f.setAccessible(true);
        if (f.get(result) != null && StringUtils.isNotBlank(f.get(result).toString())) {
            sb.append("&" + f.getName() + "=").append(f.get(result).toString());
        }
        f.setAccessible(false);
    }

    logger.info("生成响应结果:" + sb.toString());
    response.getWriter().write(sb.toString());
}

private Map<String, String> auniXSS(Map<String, String> reqMap) {
    Map<String, String> result = new HashMap<String, String>(reqMap.size());
    for (Map.Entry<String, String> entry : reqMap.entrySet()) {
        if (entry.getValue() == null) {
            result.put((String) entry.getKey(), null);
        } else {
            String value = entry.getValue().replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;").replaceAll("'", "&acute;");
            result.put((String) entry.getKey(), value);
        }
    }

    return result;
}

}