微信PC扫码支付(五)-订单查询,关闭订单,下载对账单

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cl11992/article/details/86712544

一、介绍

本文介绍了微信订单查询,退款查询,关闭订单,账单下载的代码实例,如有不足的请提出,我会做出改正。

二、官方文档

订单查询:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_2

关闭订单:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_3

下载对账单:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_6

三、微信SDK安装方法

微信PC扫码支付(一)-maven本地仓库安装:微信支付sdk

四、订单查询

  • 下文PayException为自定义异常类
  • 下文WeixinConfig为微信需要固定参数类
public Object query(Map<String, Object> map) throws PayException{
	Map<String,String> resultMap=new HashMap<>();
	//参数验证
	if(map==null || map.isEmpty()){
		throw new PayException("查询订单参数不能为空");
	}
	//商户订单号
	String outTradeNo=(String)map.get("outTradeNo");
	logger.info("微信查询订单-orderId:"+outTradeNo);
	//微信订单号
	String thirdPayOrderNumber=(String)map.get("thirdPayOrderNumber");
	if(StringUtils.isBlank(outTradeNo) && StringUtils.isBlank(thirdPayOrderNumber)){
		throw new PayException("缺少参数");
	}
	//查询订单
	Map<String,String> wxResult=new HashMap<>();
	try {
		WeixinConfig weixinConfig=new WeixinConfig();
		String nonce_str=Long.toString(System.currentTimeMillis() / 1000);
		logger.info("微信查询订单-nonce_str:"+nonce_str);
		Map<String,String> paramMap=new HashMap<>();
		paramMap.put("appid",weixinConfig.getAppID());
		paramMap.put("mch_id",weixinConfig.getMchID());
		if(StringUtils.isNotBlank(outTradeNo)){
			paramMap.put("out_trade_no",outTradeNo);
		}
		if(StringUtils.isNotBlank(thirdPayOrderNumber)){
			paramMap.put("transaction_id",thirdPayOrderNumber);
		}
		paramMap.put("nonce_str",nonce_str);
		String sign = WXPayUtil.generateSignature(paramMap, weixinConfig.getKey());//签名
		logger.info("微信查询订单-sign:"+sign);
		paramMap.put("sign", sign);
		WXPay wxpay=new WXPay(weixinConfig,WXPayConstants.SignType.MD5,false);//查询订单
		wxResult=wxpay.orderQuery(paramMap);//查询订单结果
	} catch (Exception e) {
		logger.error("微信查询订单发生错误:",e);
		throw new PayException("微信查询订单发生错误");
	}
	//通讯没有成功
	if (!"SUCCESS".equals(wxResult.get("return_code"))) {
		throw new PayException(wxResult.get("return_msg"));
	}
	//订单存在	
	if("SUCCESS".equals(wxResult.get("result_code"))){
		resultMap.put("returnResult", "SUCCESS");
	}else{
		//订单不存在
		resultMap.put("returnResult", "FAIL");
	}
	//订单支付成功	
	if("SUCCESS".equals(wxResult.get("result_code")) && "SUCCESS".equals(wxResult.get("trade_state"))){
		resultMap.put("tradeState", "SUCCESS");
	}else{
		//订单支付失败
		resultMap.put("tradeState", "FAIL");
	}
	return resultMap;
}

四、关闭订单

  • 下文PayException为自定义异常类
  • 下文WeixinConfig为微信需要固定参数类
public Object close(Map<String, Object> map){
	Map<String,String> resultMap=new HashMap<>();
	try {
		if(map.isEmpty()){
			resultMap.put("return_code","FAIL");
			resultMap.put("return_msg","缺少参数");
			return resultMap;
		}
		//商户订单号
		String orderId=(String)map.get("orderId");
		logger.info("微信关闭订单-orderId:"+orderId);
		//微信订单号
		String transactionId=(String)map.get("transaction_id");
		logger.info("微信关闭订单-transactionId:"+orderId);
		if(StringUtils.isBlank(orderId) && StringUtils.isBlank(transactionId)){
			resultMap.put("return_code","FAIL");
			resultMap.put("return_msg","缺少参数");
			return resultMap;
		}
		WeixinConfig weixinConfig=new WeixinConfig();
		String nonce_str=Long.toString(System.currentTimeMillis() / 1000);
		logger.info("微信关闭订单-nonce_str:"+nonce_str);
		Map<String,String> paramMap=new HashMap<>();
		paramMap.put("appid",weixinConfig.getAppID());
		paramMap.put("mch_id",weixinConfig.getMchID());
		paramMap.put("out_trade_no",orderId);
		paramMap.put("transaction_id",transactionId);
		paramMap.put("nonce_str",nonce_str);
		//签名
		String sign = WXPayUtil.generateSignature(paramMap, weixinConfig.getKey());
		logger.info("微信关闭订单-sign:"+sign);
		paramMap.put("sign", sign);
		//关闭订单
		WXPay wxpay=new WXPay(weixinConfig,WXPayConstants.SignType.MD5,false);
		resultMap=wxpay.closeOrder(paramMap);
		return resultMap;
	} catch (Exception e) {
		resultMap.put("return_code","FAIL");
		resultMap.put("return_msg","服务器发生错误");
		logger.error("微信关闭订单发生错误:",e);
		return resultMap; 
	}
}

 五、下载对账单

下面介绍的是下载微信账单并进行解析成list返回

  • 下文PayException为自定义异常类
  • 下文WeixinConfig为微信需要固定参数类
public Object downloadBill(Map<String, Object> map) throws PayException{
	if(map.isEmpty()){
		throw new PayException("缺少参数");
	}
	//对账账单日期
	String billDate=(String)map.get("bill_date");
	logger.info("微信下载账单-billDate:"+billDate);
	//账单类型
	String billType=(String)map.get("bill_type");
	logger.info("微信下载账单-billType:"+billType);
	Map<String,String> paramMap=new HashMap<>();
	WeixinConfig weixinConfig=new WeixinConfig();
	paramMap.put("appid", weixinConfig.getAppID());
	paramMap.put("mch_id",weixinConfig.getMchID());
	paramMap.put("nonce_str",Long.toString(System.currentTimeMillis() / 1000));
	paramMap.put("bill_date",billDate);
	paramMap.put("bill_type",billType);
	try {
		//签名
		String sign = WXPayUtil.generateSignature(paramMap, weixinConfig.getKey());
		logger.info("微信下载账单-sign:"+sign);
		paramMap.put("sign", sign);
		//下载对账单
		WXPay wxpay=new WXPay(weixinConfig,WXPayConstants.SignType.MD5,false);
		Map<String,String> resultMap=wxpay.downloadBill(paramMap);
		String returnCode = resultMap.get("return_code");
		logger.info("微信下载账单-returnCode:"+returnCode);
		String returnMsg = resultMap.get("return_msg");
		logger.info("微信下载账单-returnMsg:"+returnMsg);
		//code 标记成功失败,默认0:成功,1:失败、用于alert,2:失败、用于confirm
		if (StringUtils.isBlank(returnCode) || !"SUCCESS".equals(returnCode)) {
			throw new PayException(returnMsg);
		}
		String data = resultMap.get("data");
		String tradeMsg = data.substring(data.indexOf("`"));//把第一行表头去掉
		String tradeInfo = tradeMsg.substring(0, tradeMsg.indexOf("总")).replace("`", "");// 去掉汇总数据,并且去掉'`'
		String[] tradeArray = tradeInfo.split("%");  // 根据%来区分
		List<TradeWxBill> tradeWxBillList = new ArrayList<>();
		for (String tradeDetailInfo : tradeArray) {
            String[] tradeDetailArray = tradeDetailInfo.split(",");
            TradeWxBill tradeWxBill = new TradeWxBill();//微信下载账单返回类	
            tradeWxBill.setTransDate(DateUtils.parseDate(tradeDetailArray[0], "yyyy-MM-ddHH: MI: SS"));
            tradeWxBill.setCommonId(tradeDetailArray[1]);// 公众账号ID
            tradeWxBill.setBusinessNo(tradeDetailArray[2]);// 商户号
            tradeWxBill.setChildBusinessNo(tradeDetailArray[3]);// 子商户号
            tradeWxBill.setEquipmentNo(tradeDetailArray[4]);// 设备号
            tradeWxBill.setWxOrderNo(tradeDetailArray[5]);// 微信订单号
            tradeWxBill.setBusinessOrderNo(tradeDetailArray[6]);// 商户订单号
            tradeWxBill.setUserIdentity(tradeDetailArray[7]);// 用户标识
            tradeWxBill.setTransType(tradeDetailArray[8]);// 交易类型
            tradeWxBill.setTransStatus(tradeDetailArray[9]);// 交易状态
            tradeWxBill.setPaymentBank(tradeDetailArray[10]);// 付款银行
            tradeWxBill.setCurrency(tradeDetailArray[11]);// 货币种类
            tradeWxBill.setTotalAmount(tradeDetailArray[12]);// 总金额
            tradeWxBill.setRedEnvelopesAmount(tradeDetailArray[13]);// 企业红包金额
            tradeWxBill.setWxRefundNo(tradeDetailArray[14]);// 微信退款单号
            tradeWxBill.setBusinessRefundNo(tradeDetailArray[15]);// 商户退款单号
            tradeWxBill.setRefundAmount(tradeDetailArray[16]);// 退款金额
            tradeWxBill.setRedEnvelopesRefundAmount(tradeDetailArray[17]);// 企业红包退款金额
            tradeWxBill.setRefundType(tradeDetailArray[18]);// 退款类型
            tradeWxBill.setRefundStatus(tradeDetailArray[19]);// 退款状态
            tradeWxBill.setBusinessName(tradeDetailArray[20]);// 商品名称
            tradeWxBill.setBusinessData(tradeDetailArray[21]);// 商户数据包
            tradeWxBill.setFee(tradeDetailArray[22]);// 手续费
            tradeWxBill.setRate(tradeDetailArray[23] + "%");// 费率
            tradeWxBillList.add(tradeWxBill);
		}
		return tradeWxBillList;
	} catch (Exception e) {
		logger.error("微信下载对账单发生错误:",e);
		throw new PayException("服务器发生错误");
	}
}

猜你喜欢

转载自blog.csdn.net/cl11992/article/details/86712544
今日推荐