工商银行支付接口-处理工行支付成功后的消息通知

来源:互联网 发布:触点软件下载 编辑:程序博客网 时间:2024/04/29 04:25

由于工行的支付接口目前是没有向B2B商户提供按订单号查询订单状态的,因此处理订单成功支付后的消息就显得非常重要了,以下为鲁炬在做银行支付项目时处理工行订单支付成功通知的核心代码。

 

  /**   * 处理工行支付成功通知   */  public void notifyDate(String notifyDataBase64, String signMsg, String merVAR, String realPath) {    String encoding = "gbk";    log.debug("接收工行通知信息原文:notifyData:" + notifyDataBase64);    log.debug("接收工行通知信息原文:signMsg:" + signMsg);    log.debug("接收工行通知信息原文:merVAR:" + merVAR);    byte[] notifyDataBytes = null;    String notifyData = null;    try {      notifyDataBytes = ReturnValue.base64dec(notifyDataBase64.getBytes(encoding));      notifyData = new String(notifyDataBytes, encoding);      log.debug("接收工行通知信息:notifyData:base64解码后:" + notifyData);    } catch(UnsupportedEncodingException e) {      log.error("工行解析通知内容出错:", e);      throw new RuntimeException(e);    }    String dir = realPath + "/resources/files/bank/icbc/crt/";    //获取工行证书    byte[] bCert = null;    try {      FileInputStream fis = new FileInputStream(dir + "admin.crt");      bCert = new byte[fis.available()];      fis.read(bCert);      fis.close();    } catch(IOException e) {      log.error("读取admin.crt,文件出错:", e);      throw new RuntimeException(e);    }    byte[] bSign = cn.com.infosec.icbc.ReturnValue.base64dec((signMsg.getBytes()));    byte[] bSrc = notifyDataBytes;    //开始验签    int recode = -1;    try {      recode = cn.com.infosec.icbc.ReturnValue.verifySign(bSrc, bSrc.length, bCert, bSign);    } catch(Exception e) {      log.error("验签出错:", e);      throw new RuntimeException(e);    }    if(recode != 0) {      log.debug("工行验签失败验证返回码:" + recode);      return;    }    log.debug("工行验签成功,开始解析通知内容");    //解析通知内容 : 订单号、是否支付成功、金额    //notifyData    XmlParser xmlParser = new XmlParser(new ByteArrayInputStream(notifyDataBytes));    String orderId = xmlParser.getElementText("/B2CRes/orderInfo/subOrderInfoList/subOrderInfo/orderid");    String amount = xmlParser.getElementText("/B2CRes/orderInfo/subOrderInfoList/subOrderInfo/amount");    String tranStat = xmlParser.getElementText("/B2CRes/bank/tranStat");    log.debug("工行订单支付成功通知: 订单号:" + orderId + " 支付状态:" + tranStat + " 金额:" + amount);    if(!"1".equals(tranStat)) {      log.debug("订单状态为未支付成功,返回");      return;    }    //查询订单信息    ExamOrder examOrder = this.examOrderService.queryExamOrderByOrderNum(orderId);    int examOrderMoney = (new Double(examOrder.getMoney() * 100)).intValue();    if(!amount.equals(Integer.valueOf(examOrderMoney).toString())) {      log.debug("实际支付订单金额与应付金额不等,返回");      return;    }    //更新订单状态为已结算    try {      log.debug("更新订单" + orderId + "状态为已结算");      this.examOrderService.updateSuccessOrder(orderId);    } catch(Exception e) {      log.error("更新订单状态为已结算出错", e);      throw new RuntimeException(e);    }  }


 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 护肤品开封后一年还没用完怎么办 兰蔻化妆品套装正品和假怎么办 月经期间卫生巾搞得屁股疼怎么办 大姨妈特别多用卫生巾老是漏怎么办 夏天用卫生巾不透气摩擦红了怎么办 在日本的洗手间用完的姨妈巾怎么办 想穿短裙但是膝盖怕凉怎么办 裤子被卫生巾粘住扯不下来怎么办 医生说来姨妈不可以用卫生巾怎么办 隆胸以后摸起来感觉假体会动怎么办 产后15个月说恶露没排干净怎么办 母猪产后两天肚子里还有小猪怎么办 背心式无痕运动文胸显得胸小怎么办 卫生巾过敏起疙瘩反复挠不好怎么办 去健身房办卡老板跑了怎么办 买货我已经拒收商家不退款怎么办 在京东买了东西拒收不退款怎么办 罗马仕充电宝进入休眠状态怎么办 广发信用卡寄到家没拿到快递怎么办 包邮商家要买家出物流费怎么办? 美团外卖下单转化率低怎么办 京东退款不小心点了取消退款怎么办 近邻宝开了箱又关了怎么办 近邻宝箱子打开了东西忘记拿怎么办 京东取消订单商家总不取消怎么办 京东快递退货取件一直取不到怎么办 在京东线上付款了但没收到货怎么办 寄快递收件人电话号码写错了怎么办 京东购物实名认证被别人占用怎么办 货已发出单号还没填买家退货怎么办 自提柜还有一个包忘记拿怎么办 当顾客说衣服太贵的时候怎么办 京东快递送错了被别人签收了怎么办 乐视1s玩王者荣耀卡怎么办 京东商城买东西发现地址错了怎么办 京东分期付款买手机额度不够怎么办 亮皮银色高跟鞋时间放久变色怎么办 饿了么商家钱包提现被锁了怎么办 在淘手游买的游戏账号被找回怎么办 交易猫买手游梦幻号被找回了怎么办 绑定着苹果账号的邮箱忘记了怎么办