退款重点代码:
退款代码
//保证金退款
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();
}
}