{'@RequestMapping':{'value':'/yunpay/app/aliPayAppPayV2Notify','method':'POST'},'aliPayAppPayV2Notify':{'params':[{'name':'req','type':'HttpServletRequest'},{'name':'resp','type':'HttpServletResponse'}],'body':'LOGGER.info('支付宝app(钱包)支付V2.0->交易结果通知->开始');\nlong start = System.currentTimeMillis();\ndealWhitAliPayAppV2Req(req, resp, 'aliPayAppPayV2Notify', ALIPAY_APPPAY_V2_KEY);\nlong end = System.currentTimeMillis();\nLOGGER.info('支付宝app(钱包)支付V2.0->交易结果通知->结束,耗时:{}', end - start);'},'dealWhitAliPayAppV2Req':{'params':[{'name':'req','type':'HttpServletRequest'},{'name':'resp','type':'HttpServletResponse'},{'name':'transCode','type':'String'},{'name':'redisKey','type':'String'}],'body':'/* 编码格式 */\nString charset = req.getCharacterEncoding();\nif (StringUtil.isEmpty(charset)) {\n charset = CHARSET;\n}\n//String merNo = '';\nMap<String, String> paramMap = getParams(req);\nif (null == paramMap) {\n LOGGER.error('支付宝手机app(钱包)支付V2->钱包支付结果异步通知->请求报文为空');\n return;\n}\nJSONObject json = new JSONObject();\nfor (Map.Entry<String, String> entry : paramMap.entrySet()) {\n String key = entry.getKey();\n String value = entry.getValue();\n json.put(key, value);\n}\nString jsonString = json.toJSONString();\nLOGGER.info('支付宝手机app(钱包)支付V2->钱包支付结果异步通知->请求数据:{}', jsonString);\n\n//读取惠付发往通道订单号\nString merNo = paramMap.get(AliPayV2CommonConstans.APP_ID);\nJSONObject secureFld = null;\ntry {\n //截取通道商户号//读取安全域\n//merNo = serialNo.substring(0, 16); //共38位 通道商户号为16位\n Map<String, String> secureFldMap = redisInstance.getObj(HashMap.class, redisKey);\n String secureFldStr = secureFldMap.get(merNo);\n secureFld = JSONObject.parseObject(secureFldStr);\n} catch (Exception e) {\n LOGGER.error('支付宝手机app(钱包)支付V2->钱包支付结果异步通知->安全域读取失败或解析失败:{}', e);\n return;\n}\nif (secureFld == null) {\n LOGGER.error('支付宝手机app(钱包)支付V2->钱包支付结果异步通知->安全域读取失败或解析失败');\n return;\n}\ntry {\n LOGGER.info('请求客户端地址:{}', HttpUtils.getReqIPAddr(req));\n// //除去sign、sign_type两个参数\n// paramMap.remove(AliPayV2CommonConstans.SIGN);\n// paramMap.remove(AliPayV2CommonConstans.SIGN_TYPE);\n //验签 调用支付宝SDK\n boolean signVerify = false;\n if (alipayV2Flag) {\n signVerify = true;\n } else {\n signVerify = AlipaySignature.rsaCheckV1(paramMap, secureFld.getString(AliPayV2CommonConstans.ALIPAY_PUBLIC_KEY), charset, AliPayV2CommonConstans.SIGN_TYPE_RSA2);\n }\n if (signVerify) {\n //验签成功后对比交易请求的金额与异步返回是否一致\n String total_amount = secureFld.getString(AliPayV2CommonConstans.TOTAL_AMOUNT);//支付金额\n// JSONArray array = JSONArray.parseArray(paramMap.get('fund_bill_list'));\n String returnAmout = paramMap.get(AliPayV2CommonConstans.TOTAL_AMOUNT);//返回金额\n if (!StringUtil.equals(total_amount, returnAmout)){\n LOGGER.error('支付宝APP支付V2->APP支付结果异步通知->支付与返回的交易金额不一致');\n return;\n }\n IYunPayGateWayService notifyService = yunPayGateWayServiceFactory\n .getServiceByServiceName(transCode);\n notifyService.execute(paramMap);\n writeToResp(resp, AliPayV2CommonConstans.SUCCESS);\n } else {\n LOGGER.error('异步通知异常:{}', '验签失败');\n throw new SanxiaPayBizException(\n EnumRespMsg.VERIFY_FAILED.getRespCode(),\n EnumRespMsg.VERIFY_FAILED.getRespMsg());\n }\n} catch (Exception e) {\n LOGGER.error('异步通知异常:{}', e);\n}\n}'}}

代码说明:

  1. 创建JSONObject对象: java JSONObject json = new JSONObject(); 2. 遍历表单参数Map: java for (Map.Entry<String, String> entry : paramMap.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); json.put(key, value); } 3. 将JSONObject转换为字符串: java String jsonString = json.toJSONString(); 4. 将JSON字符串输出到日志: java LOGGER.info('支付宝手机app(钱包)支付V2->钱包支付结果异步通知->请求数据:{}', jsonString);

**将上述代码替换掉原代码中的:**javaLOGGER.info('支付宝手机app(钱包)支付V2->钱包支付结果异步通知->请求数据:{}', paramMap);

**最后,完整的代码如下:**java@RequestMapping(value = '/yunpay/app/aliPayAppPayV2Notify', method = RequestMethod.POST)public void aliPayAppPayV2Notify(HttpServletRequest req, HttpServletResponse resp) { LOGGER.info('支付宝app(钱包)支付V2.0->交易结果通知->开始'); long start = System.currentTimeMillis(); dealWhitAliPayAppV2Req(req, resp, 'aliPayAppPayV2Notify', ALIPAY_APPPAY_V2_KEY); long end = System.currentTimeMillis(); LOGGER.info('支付宝app(钱包)支付V2.0->交易结果通知->结束,耗时:{}', end - start);}

private void dealWhitAliPayAppV2Req(HttpServletRequest req, HttpServletResponse resp, String transCode, String redisKey) { /* 编码格式 */ String charset = req.getCharacterEncoding(); if (StringUtil.isEmpty(charset)) { charset = CHARSET; }// String merNo = ''; Map<String, String> paramMap = getParams(req); if (null == paramMap) { LOGGER.error('支付宝手机app(钱包)支付V2->钱包支付结果异步通知->请求报文为空'); return; } JSONObject json = new JSONObject(); for (Map.Entry<String, String> entry : paramMap.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); json.put(key, value); } String jsonString = json.toJSONString(); LOGGER.info('支付宝手机app(钱包)支付V2->钱包支付结果异步通知->请求数据:{}', jsonString);

//读取惠付发往通道订单号    String merNo = paramMap.get(AliPayV2CommonConstans.APP_ID);    JSONObject secureFld = null;    try {        //截取通道商户号//读取安全域//            merNo = serialNo.substring(0, 16);  //共38位 通道商户号为16位        Map<String, String> secureFldMap = redisInstance.getObj(HashMap.class, redisKey);        String secureFldStr = secureFldMap.get(merNo);        secureFld = JSONObject.parseObject(secureFldStr);    } catch (Exception e) {        LOGGER.error('支付宝手机app(钱包)支付V2->钱包支付结果异步通知->安全域读取失败或解析失败:{}', e);        return;    }    if (secureFld == null) {        LOGGER.error('支付宝手机app(钱包)支付V2->钱包支付结果异步通知->安全域读取失败或解析失败');        return;    }    try {        LOGGER.info('请求客户端地址:{}', HttpUtils.getReqIPAddr(req));//            //除去sign、sign_type两个参数//            paramMap.remove(AliPayV2CommonConstans.SIGN);//            paramMap.remove(AliPayV2CommonConstans.SIGN_TYPE);        //验签 调用支付宝SDK        boolean signVerify = false;        if (alipayV2Flag) {            signVerify = true;        } else {            signVerify = AlipaySignature.rsaCheckV1(paramMap, secureFld.getString(AliPayV2CommonConstans.ALIPAY_PUBLIC_KEY), charset, AliPayV2CommonConstans.SIGN_TYPE_RSA2);        }        if (signVerify) {            //验签成功后对比交易请求的金额与异步返回是否一致            String total_amount = secureFld.getString(AliPayV2CommonConstans.TOTAL_AMOUNT);//支付金额//                JSONArray array = JSONArray.parseArray(paramMap.get('fund_bill_list'));            String returnAmout = paramMap.get(AliPayV2CommonConstans.TOTAL_AMOUNT);//返回金额            if (!StringUtil.equals(total_amount, returnAmout)){                LOGGER.error('支付宝APP支付V2->APP支付结果异步通知->支付与返回的交易金额不一致');                return;            }            IYunPayGateWayService notifyService = yunPayGateWayServiceFactory                    .getServiceByServiceName(transCode);            notifyService.execute(paramMap);            writeToResp(resp, AliPayV2CommonConstans.SUCCESS);        } else {            LOGGER.error('异步通知异常:{}', '验签失败');            throw new SanxiaPayBizException(                    EnumRespMsg.VERIFY_FAILED.getRespCode(),                    EnumRespMsg.VERIFY_FAILED.getRespMsg());        }    } catch (Exception e) {        LOGGER.error('异步通知异常:{}', e);
支付宝APP支付V2.0异步通知处理

原文地址: https://www.cveoy.top/t/topic/pT05 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录