小程序微信支付回调

package com.jzez.b2b.controller.weixin;

import com.jzez.b2b.config.Permission;
import com.jzez.b2b.controller.BaseController;
import com.jzez.b2b.service.weixin.WeixinService;
import com.jzez.b2b.vo.input.weixin.InputWXPayVO;
import com.jzez.core.bean.Result;
import com.jzez.core.exception.GlobalException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.perf4j.aop.Profiled;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;


/**
 * @Author LK
 * @Date 2019/7/24
 * @Time 18:32
 */
@Api(value = "WXPay", description = "业主小程序微信支付")
@RestController
@RequestMapping("/wx")
public class WXPayController extends BaseController {

    public static final Logger LOGGER = LoggerFactory.getLogger(WXPayController.class);

    @Autowired
    private WeixinService weixinService;



    @ApiOperation(value = "业主微信支付回调接口")
    @PostMapping(value = "/callback",produces={"text/html;charset=UTF-8;","application/json;"})
    @ResponseBody
    public String callback(HttpServletRequest request) throws GlobalException {
        return weixinService.callback(request);
    }

}
  /**
     * 微信支付回调
     *
     * @param request
     * @return
     * @throws GlobalException
     */
    @Override
    public String callback(HttpServletRequest request) throws GlobalException {
        String responseResult = "";
        logger.info("================================================开始处理微信小程序发送的异步通知");
        //1 获取微信支付异步回调结果
        String xmlResult = PayUtil.getPostStr(request);
        Map resultMap = null;
        try {
            //将结果转成map
            resultMap = PayUtil.xmlToMap(xmlResult);
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        //订单号
        String payOrderId = resultMap.get("out_trade_no");
        String resultCode;
        String resultMsg;
        String deal_no = resultMap.get("attach");
		logger.info("商家订单号:------------------" + payOrderId + "结束----------");
		String result_code = resultMap.get("result_code");
		//回调返回的加密签名 保存下来 下面会进行对比
		String sign = resultMap.get("sign");
		//去掉sign和利用微信回调回来的信息重新加密
		resultMap.remove("sign");
		String sign1 = "";
		try {
			//重新加密 获取加密的签名
			sign1 = PayUtil.generateSignature(resultMap, WechatConfig.KEY, WechatConfig.SIGNTYPE);
		} catch (Exception e) {
			logger.info("签名生成失败", e);
		}
		//对比微信回调的加密与重新加密是否一致  一致即为通过 不一致说明呗改动过 加密不通过
		logger.info("==============================================开始对比加密++++++++++++++++++++++++++++++++++++++");
		if (sign.equals(sign1)) {
			logger.info("==============================================验签通过++++++++++++++++++++++++++++++++++++++");
			//业务结果为SUCCESS
			if (WechatConfig.SUCCESS.equals(result_code)) {
				//校验付款金额是否与实际应付金额相符
				if ("获取系统订单实际金额" == Integer.parseInt(resultMap.get("total_fee"))) {
					//校验成功,开始处理实际业务…………
				
					//处理完成返回给微信成功标识…………
					
					resultCode = "SUCCESS";
					resultMsg = "成功";
				} else {
					resultCode = "FAIL";
					resultMsg = "付款金额有误";
				}
			} else {
				resultCode = "FAIL";
				resultMsg = "业务结果为FAIL";
			}
		} else {
			resultCode = "FAIL";
			resultMsg = "验签未通过";
		}
        responseResult =
            "   \n" +
                "  \n" +
                "  \n" +
                "  ";
        logger.info("微信支付回调结果========" + responseResult + "");
        return responseResult;
    }

util工具类在上一篇里面都有!!!

你可能感兴趣的:(小程序微信支付回调)