vx 小程序退款操作

本文主要介绍了在小程序中进行退款的操作,重点关注退款代码部分,并提到了配置退款回调接口时需注意的事项,要求开发者正确设置crmUrl以确保功能正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

退款重点代码:

        退款代码

 //保证金退款
    public void depositRefund(){
        String id = request.getParameter("id");
        String refundMoney = request.getParameter("refundMoney");
        String bak1 = request.getParameter("bak1");
        ActivityBaseInfo activityBaseInfo = activityBaseInfoMapper.getActivityId(Long.valueOf(id));
        ActivityDepositLq activityDepositLq = activityDepositLqMapper.selectByActivityId(Long.parseLong(id));
        Long orderId = activityDepositLq.getId();
        long userId=Long.valueOf(activityBaseInfo.getUserId());
        //确认审核通过、有缴纳保证金
        if (CommonConstant.CheckSucc.equals(activityBaseInfo.getBak1()) && activityBaseInfo.getDepositPrice()>0){
            //验证码
//            String outRefundNo = DateFormatUtil.formatToStringTimeDetail(new Date()) + RandomSecurityCode.getSecurityCode();

            //设置回调地址  返回参数
            Map refundMap = getRefundMap(activityDepositLq, refundMoney);

            String return_code = refundMap.get("return_code").toString();
            Object result_code = refundMap.get("result_code");
            if ("SUCCESS".equals(return_code) && result_code != null && result_code.toString().equals("SUCCESS")) {

               
                //set参数 数据库中插入退款记录

                int i = activityRefundLqMapper.insertSelective(entity);
                if(i==1){
                    String remarkTitle = "您的保证金已退款,费用稍后会返回,请注意查收。点击查看详情";
                    String replyName =  "保证金退款!" ;
                    String replyContent = "点击查看详情";
                    String remarkContent = "";
                    boolean result = wechatMsgSendDubboService.sendPublicMsgService(userId,
                            ToMiniPageUrlConstant.Page_refundDetail+"?orderId="+activityBaseInfo.getOrgId(),
                            remarkTitle, remarkContent, replyName, replyContent);
                    if(result){
                        //微信公众号推送成功
                        this.writeJson("操作成功", true);
                    }else {
                        UserBaseInfoDubbo userBaseInfoDubbo = userBaseInfoDubboService.selectRedisUserByUid(userId);
                        Long phoneNumber = userBaseInfoDubbo.getPhoneNumber();
                        if(phoneNumber == null || phoneNumber == 0 || String.valueOf(phoneNumber).length() != 11){
                            this.writeJson("退款成功,信息发送失败", true);
//                            return "退款成功,但发送短信通知失败:用户手机号有问题:"+phoneNumber;
                        }
                        String context = systemParameterInfoDubboService.selectValueByKey("sms_context_refund_succ");
                        //微信公众号推送失败  发短信通知
                        boolean r = commonMsgRecordDubboService.sendSms(userId, String.valueOf(phoneNumber), context);
                        if(r){
                            this.writeJson("退款成功,信息发送失败", true);
                        }else {
                            this.writeJson("退款成功,但发送短信通知失败,可能发送短信通道问题", true);
                        }
                    }

                }else{
                    this.writeJson("微信退款成功,但是我方退款记录没更新", true);

                }
            }else {
                //退款失败
                this.writeJson("退款失败,调用微信接口失败!可能客户微信账号异常", false);
            }

        }else {
            this.writeJson("退款失败", false);

        }
    }
    public Map getRefundMap(ActivityDepositLq activityDepositLq, String refundMoney){
        //微信生成的订单号
        String wechatOrderNum = activityDepositLq.getWechatOrderNum();
        //我方生成的订单号
        String ownOrderNum = activityDepositLq.getOwnOrderNum();
        //支付的金额
        Double price = activityDepositLq.getPrice();
        String outRefundNo = DateFormatUtil.formatToStringTimeDetail(new Date()) + RandomSecurityCode.getSecurityCode();
        try {
            WXPayConfig wxPayConfig = WXPayConfigImpl.getInstance();
            WXPay wxpay = new WXPay(wxPayConfig);
            String xcxHttpUrl = ResourceBundleImp.getFileDirValue("crmUrl");
//根据自己使用的框架 看需要怎么配置地址
            System.out.println("设置回调地址:"+xcxHttpUrl + "/activity/ActivityBaseInfo._wechatRefundCallback.do");
            Map<String, String> refundMap = wxpay.refund(  xcxHttpUrl+"/activity/ActivityBaseInfo_wechatRefundCallback.do",
                    wechatOrderNum, ownOrderNum, outRefundNo,
                    String.valueOf(price),
                    String.valueOf(refundMoney), "CRM后台审核退款");
            return refundMap;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

注意配置回调接口时 crmUrl 需要按自己需要配置

 

退款回调接口

public void wechatRefundCallback(){

        try{
            System.out.println("---------------订单退款回调-------------");
            InputStream inStream = request.getInputStream();
            ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = inStream.read(buffer)) != -1) {
                outSteam.write(buffer, 0, len);
            }
            outSteam.close();
            inStream.close();
            String notityXml  = new String(outSteam.toByteArray(),"utf-8");//获取微信调用我们notify_url的返回信息
            System.out.println("接收到的报文:" + notityXml);
            if(StringUtil.isEmpty(notityXml)){
                return;
            }
            Map<String, Object> map = XMLUtil.doXMLParse(notityXml);
            String returnCode = map.get("return_code").toString();
            if(!StringUtil.isEmpty(returnCode) && returnCode.equals("SUCCESS")){
                String reqInfo = map.get("req_info").toString();
                String xmlData = AESUtil.decryptData(reqInfo);
                Map<String, String> mapData = XMLUtil.doXMLParse(xmlData);
                System.out.println("mapData" + mapData);
                String refund_id = mapData.get("refund_id");
                String resultCode = mapData.get("result_code");
                System.out.println("result_code :" + resultCode);
                if (resultCode == null){
                    resultCode = mapData.get("refund_status");
                }
                if(!StringUtil.isEmpty(resultCode) && resultCode.equals("SUCCESS")){
                    int i = activityRefundLqMapper.updateByWeiXinPaymentNoSucc(refund_id,CommonConstant.ActiActivity_refund_success);
                    if(i==1){
                        logger.info("回调函数,更新数据库成功,id:"+refund_id);
                        response.getWriter().write(PayCommonUtil.setXML("SUCCESS", "操作成功"));
                    }else{
                        logger.info("回调函数,更新数据库失败,id:"+refund_id);

                        response.getWriter().write(PayCommonUtil.setXML("FAIL", "操作失败"));
                    }
                }else{
                    //修改 shop_refund_record.deal_status改为payFail

                    int i = activityRefundLqMapper.updateByWeiXinPaymentNoSucc(refund_id,CommonConstant.ActiActivity_refund_success);
                    if(i==1){
                        response.getWriter().write(PayCommonUtil.setXML("SUCCESS", "操作成功"));
                    }else{
                        response.getWriter().write(PayCommonUtil.setXML("FAIL", "操作失败"));
                    }
                }
            }else{
                logger.error("returnMsg:"+map.get("return_msg").toString());
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值