`

微信退款

 
阅读更多

退款需要安装证书等。

界面调用取消支付ajax

$.ajax({
																type : "POST",
																url : path + "/wxpay/refund.do",
																data : {
																	orderNum : orderNum,
																	payType:payType
																},
																dataType : 'json',
																success : function(data) {
																	if (data.success) {
																		location.reload();
																	}else{
																		myAlert(data.msg);
																	}
																}
															});

 refund 方法

@Action(value = "refund")
	public String refund() throws Exception {
		try{
			BaseDao dao = this.getDao();
			Map<String, Object> returnMap = new HashMap<String, Object>();
			FwhtemplateService fwhtemplateService = new FwhtemplateServiceImpl();
			
				if(model.getPayType().equals(Constants.cashpay)){
					//现金支付
					model.setOrderStatus(Constants.ORDER_STATUS_3);
					model.setCancelTime(DateUtil.newDate());
					dao.updateSql("order.upt_order", model);
					OrderModel o = (OrderModel) dao.selectObject("order.getOrder", model);
					//发送信鸽
					fwhtemplateService.cancelOrderToWorker(o);
					
					returnMap.put("success", true);
					this.doResponseWithJson(returnMap);
					return NONE;
					
				}else{
					//微信支付
					// 先判断对应的交易流水号在dd_trade_wxpay中是否存在,传入交易流水号
					String orderNum = model.getOrderNum();
					List<Notice> noticeList = dao.selectForList("wxpay.getTradeByNum", orderNum);
					if (ObjUtil.isNullOrEmpty(noticeList)) {
						returnMap.put("success", false);
						returnMap.put("msg", "退款失败");
						this.doResponseWithJson(returnMap);
						return NONE;
					}
					
					Notice notice = noticeList.get(0);
					
					String transaction_id = notice.getTransaction_id();
					String out_trade_no = notice.getOut_trade_no();
					double total_fee_str = notice.getTotal_fee();
					
					RefundReqData xmlObj = new RefundReqData(transaction_id, out_trade_no,
							null, total_fee_str);
					// 向微信发送接口数据
					String result = WeixinUtil.weixinKeyPostXml(Configure.REFUND, xmlObj);
					// 微信返回的数据
					RefundRespData retModel = (RefundRespData) Util.getObjectFromXML(
							result, RefundRespData.class);
					
					if (ObjUtil.isNullOrEmpty(retModel)) {
						// 支付请求失败
						returnMap.put("success", false);
						returnMap.put("msg", "退款请求失败");
						this.doResponseWithJson(returnMap);
						return NONE;
					}

					if (!"SUCCESS".equals(retModel.getReturn_code().toUpperCase())) {
						// 支付请求失败
						returnMap.put("success", false);
						returnMap.put("msg", retModel.getReturn_msg());
						this.doResponseWithJson(returnMap);
						return NONE;
					}

					if (!"SUCCESS".equals(retModel.getResult_code().toUpperCase())) {
						returnMap.put("success", false);
						returnMap.put("msg", retModel.getErr_code_des());
						this.doResponseWithJson(returnMap);
						return NONE;
					}
					
					// 退款成功,需要加入对应的数据库
					// 查看对应的订单号是否已经更新成退款的状态
					TradeWxpayRefund refund = (TradeWxpayRefund) dao.getObject("wxpay.getRefundById", retModel.getTransaction_id());
					
					if (ObjUtil.isNullOrEmpty(refund)) {
						// 说明还未退款成功,则执行退款的相关库表更新
						// 插入退款表
						refund = new TradeWxpayRefund();
						refund.setId(retModel.getTransaction_id());
						refund.setCouponRefundFee(retModel.getCoupon_refund_fee());
						refund.setOutRefundNo(retModel.getOut_refund_no());
						refund.setOutTradeNo(retModel.getOut_trade_no());
						refund.setRefundChannel(retModel.getRefund_channel());
						refund.setRefundFee(retModel.getRefund_fee());
						refund.setRefundId(retModel.getRefund_id());
						refund.setCreateTime(DateUtil.newDate());
						
						// 更新交易表dd_trade_wxpay,先根据Transaction_id找到对应的记录
						Notice pay = (Notice) dao.getObject("wxpay.getTradeByTid", retModel.getTransaction_id());
						if (!ObjUtil.isNullOrEmpty(pay)) {
							pay.setTrade_state("REFUND");
						} else {
							returnMap.put("success", false);
							returnMap.put("msg", "找不到对应的交易记录,请联系商家");
							this.doResponseWithJson(returnMap);
							return NONE;
						}
						
						// 更新订单表
						List<OrderModel> orderList = dao.selectForList("wxpay.getOrderByTno", retModel.getOut_trade_no());
						OrderModel order = null;
						if (!ObjUtil.isNullOrEmpty(orderList)) {
							order = orderList.get(0);
							order.setOrderStatus(Constants.ORDER_STATUS_3);
							order.setCancelTime(DateUtil.newDate());
						} else {
							returnMap.put("success", false);
							returnMap.put("msg", "找不到对应的交易记录,请联系商家");
							this.doResponseWithJson(returnMap);
							return NONE;
						}
						// 启动事务
						DaoUtil.getDaoManager().startTransaction();
						dao.insertSql("wxpay.insertRefund", refund);
						dao.updateSql("wxpay.upt_wxpayByTid", pay);
						dao.updateSql("wxpay.upt_orderByNum", order);

						DaoUtil.getDaoManager().commitTransaction();
						DaoUtil.getDaoManager().endTransaction();
						//发送信鸽
						fwhtemplateService.cancelOrderToWorker(order);
					}
					
					returnMap.put("success", true);
					returnMap.put("msg", "订单取消成功,相应款项已退回您的账下");
					this.doResponseWithJson(returnMap);
					return NONE;
				}
		}catch(Exception e){
			e.printStackTrace();
		}
		return NONE;
	}

 

分享到:
评论

相关推荐

    java 微信退款接口

    Java微信退款接口是微信支付提供的一种服务,允许商家在用户退款请求时,通过API与微信服务器进行交互,完成退款操作。这个过程涉及到的关键技术主要包括Java编程、HTTPS通信、数字证书以及JSON数据格式处理。 首先...

    微信退款demo java版

    微信退款demo java版 亲测可行 改成自己就可以

    2023-JAVA微信支付-工具类,包含微信退款,微信支付,微信相关V2版本V3接口集成

    内容:微信支付-工具类,包含微信退款,微信支付,微信相关V2版本V3接口集成 适用人群:JAVA 使用场景:集成好微信支付,可自由调整相关类,自由编写业务场景 说明: 将工具类导入该自行项目,将maven-jar 的配置...

    微信退款iis配置

    微信退款iis配置:今天给网站配置了加密证书文件,用类X509Certificate2加载证书文件时,一直报出现了内部错误,但是Demo中用控制台程序加载证书没任何问题.解决方法

    微信退款工具类,拿走放到web项目中可直接使用

    微信退款工具类是一种用于处理微信支付退款流程的代码模块,它可以方便地集成到Web应用程序中,简化退款操作。本文将详细解析这个工具类的核心功能、使用方法以及涉及到的关键技术。 首先,`MD5Util.java` 文件是...

    java实现微信退款

    java实现微信支付的退款,根据微信用户的openid和订单号进行退款

    java微信退款(支持部分退款)

    Java微信退款功能主要涉及到微信支付接口的调用,支持对订单进行部分退款操作。这个过程通常包括以下几个关键步骤和技术要点: 1. **TenpayUtil**: `TenpayUtil` 类是微信支付的核心工具类,它封装了与微信服务器...

    微信退款回调AES解密

    本示例将详细介绍如何对微信退款回调中的AES加密数据进行解密。 首先,我们需要理解AES加密的基本原理。AES是一种对称加密算法,其工作模式包括ECB、CBC、CFB、OFB和CTR等。在微信支付中,一般采用CBC(Cipher ...

    Java微信退款功能

    在Java微信退款功能中,开发者通常需要利用微信支付提供的API接口来实现退款操作。这个功能主要服务于电商、线上服务等需要处理用户支付退款的场景。微信支付提供了详细的官方文档,即使是初学者也能按照指南逐步...

    微信退款报文AES解密参考代码

    本文将详细介绍如何使用AES解密微信退款报文的参考代码。 1. **AES加密原理**: AES是一种分组密码,它将明文分为128位的数据块进行加密。它使用了多次置换和替换操作,包括字节代换、行移位、列混淆和轮密钥加等...

    java微信支付工具类v3版:微信支付v3版+微信退款v3版+微信交易状态查询+企业打款

    2. 微信退款v3版 3. 微信交易状态查询 4. 企业打款到个人零钱(旧版) 本人在企业项目中使用,自己封装的的微信交易相关的一套工具类。 直接调用方法传入对应的参数即可。 如果有什么问题可以留言讨论。

    微信退款回调加密信息-加密解密类

    微信退款回调加密信息-加密解密类,经测试有效,记得导入包

    微信退款加密字段AES解密

    微信退款加密数据解密工具代码,真的没搞懂微信怎么想的,微信退款,公众号消息,小程序,微信支付的加密解密方式全都不一样,每一个都要单独调试,简直要死人,那我就调试好一个就传一个上来

    java微信退款的代码片段 支持部分退款

    ### Java微信退款功能详解 #### 一、概述 在电商及各类在线交易场景中,退款功能是必不可少的一个环节。微信支付作为国内主流的第三方支付工具之一,提供了丰富的API接口来支持商家实现各种支付与退款需求。本文将...

    Java微信退款

    Java微信退款是一个涉及微信支付平台接口调用的Java应用程序,主要功能是实现对用户支付的退款操作。在微信支付的生态系统中,商户需要通过特定的API接口与微信服务器交互,处理退款请求。以下是对这个Java项目的...

    微信支付、退款等操作实例C#版

    2. **调用退款接口**:使用商户ID、商户秘钥、预支付交易单号和退款信息等,调用微信退款API发起退款请求。 3. **处理退款结果**:同样,退款结果会以异步通知的形式返回,需要在后台处理并更新订单状态。 三、...

    Java实现微信支付/微信退款/企业微信转账

    本资源包属于Java开发的一个工具包,包含各类微信支付,微信退款,企业微信转账; 微信支付包括:1,app支付;2,微信网页支付(jsapi);3,微信扫码支付(native) 微信网页支付:是指在微信中打开的网页,在其他...

    JAVA微信退款(亲测绝对好用)

    在Java开发领域,微信退款是常见的业务需求,特别是在电商或者支付相关的系统中。本文将详细介绍如何使用Java实现微信退款功能,并结合提供的资源进行操作。首先,我们来看标题"JAVA微信退款(亲测绝对好用)",这...

    微信退款AES解密包

    在本例中,我们关注的是“微信退款AES解密包”,这通常是指一个用于处理微信退款流程中涉及的AES(Advanced Encryption Standard)加密数据的工具或代码库。AES是一种广泛应用的对称加密算法,因其高效和安全性而被...

    微信登录、微信支付、微信退款、微信企业付款,asp.net mvc 代码版本的。

    在本文中,我们将深入探讨如何在ASP.NET MVC框架下实现微信相关的功能,包括微信登录、微信支付、微信退款以及微信企业付款。这些都是现代电子商务网站和应用程序中不可或缺的组件,尤其在中国市场,微信作为一款...

Global site tag (gtag.js) - Google Analytics