退款需要安装证书等。
界面调用取消支付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; }
相关推荐
微信退款demo java版 亲测可行 改成自己就可以
内容:微信支付-工具类,包含微信退款,微信支付,微信相关V2版本V3接口集成 适用人群:JAVA 使用场景:集成好微信支付,可自由调整相关类,自由编写业务场景 说明: 将工具类导入该自行项目,将maven-jar 的配置...
微信退款iis配置:今天给网站配置了加密证书文件,用类X509Certificate2加载证书文件时,一直报出现了内部错误,但是Demo中用控制台程序加载证书没任何问题.解决方法
2. 微信退款v3版 3. 微信交易状态查询 4. 企业打款到个人零钱(旧版) 本人在企业项目中使用,自己封装的的微信交易相关的一套工具类。 直接调用方法传入对应的参数即可。 如果有什么问题可以留言讨论。
微信退款回调加密信息-加密解密类,经测试有效,记得导入包
Java微信退款功能,修改参数就可以使用,不会微信开发可以参考微信官方文档,修改参数直接使用,
本资源是针对在微信退款开发时遇到的问题。对应的是本篇文章http://blog.csdn.net/xueshenghu/article/details/78059832
注意PKCS12证书 是从微信商户平台-》账户设置-》 API安全 中下载的
java实现微信支付的退款,根据微信用户的openid和订单号进行退款
本资源包属于Java开发的一个工具包,包含各类微信支付,微信退款,企业微信转账; 微信支付包括:1,app支付;2,微信网页支付(jsapi);3,微信扫码支付(native) 微信网页支付:是指在微信中打开的网页,在其他...
微信native支付, 微信JSAPI支付, 微信退款, 微信提现, 微信付款查询, 所有方法都已经封装实现, main方法可直接调用体验, maven项目
这是微信工具类,里面包括支付,生成签名,cha算法都有,全额退款和部分退款等代码,很全。
当商户申请的退款有结果后,微信会把相关结果发送给商户,商户需要接收处理,并返回应答。退款结果对重要的数据进行了加密,商户需要用商户秘钥进行解密后才能获得结果通知的内容。退款报文解密参考代码
微信登录、微信支付、微信退款、微信企业付款,asp.net mvc 代码版本的。
实例环境:PHP+Apache+MySQL。代码框架:ThinkPHP5.0。退款、企业付款功能需要下载证书。
最新微信退款通知解密 微信退款 AES256 PK7 ECB加密解密
根据u010660575大佬的博客改的,附上了MD5和BASE64工具类
微信退款加密数据解密工具代码,真的没搞懂微信怎么想的,微信退款,公众号消息,小程序,微信支付的加密解密方式全都不一样,每一个都要单独调试,简直要死人,那我就调试好一个就传一个上来
代码包含微信的 jsapi支付和扫码支付 还有微信退款。下载后请阅读readme.txt。你值得拥有