| | |
| | | import cc.mrbird.febs.mall.service.ICommonService; |
| | | import cc.mrbird.febs.pay.model.LaKaLaBasicReqDate; |
| | | import cc.mrbird.febs.pay.model.LaKaLaCreateOrderReqDate; |
| | | import cc.mrbird.febs.pay.model.LaKaLaQueryOrderReqDate; |
| | | import cc.mrbird.febs.pay.service.LaKaLaService; |
| | | import cc.mrbird.febs.rabbit.producter.AgentProducer; |
| | | import cn.hutool.core.date.DateUtil; |
| | |
| | | public final static String apiUrlCreate = "https://test.wsmsd.cn/sit/api/v3/ccss/counter/order/create"; |
| | | |
| | | public final static String apiUrlCreate_prd = "https://s2.lakala.com/api/v3/ccss/counter/order/create"; |
| | | |
| | | public final static String apiUrlQuery = "https://test.wsmsd.cn/sit/api/v3/ccss/counter/order/query"; |
| | | |
| | | public final static String apiUrlQuery_prd = "https://s2.lakala.com/api/v3/ccss/counter/order/query"; |
| | | /** |
| | | * 支付回调地址 |
| | | */ |
| | |
| | | try { |
| | | String body = JSONUtil.parseObj(laKaLaBasicReqDate).toString(); |
| | | |
| | | log.info("LKL创建请求Body,{}",body); |
| | | String authorization = getAuthorization(body); |
| | | |
| | | String apiUrlCreateHttp = ""; |
| | |
| | | String responseStr = IOUtils.toString(response.getEntity().getContent(), ENCODING); |
| | | System.out.println("responseStr " + responseStr); |
| | | |
| | | log.info("LKL创建请求返回的responseStr,{}",responseStr); |
| | | String source = appid + "\n" + lklapiSerial + "\n" + timestamp + "\n" + nonce + "\n" + responseStr + "\n"; |
| | | |
| | | System.out.println("source " + source); |
| | |
| | | |
| | | @Override |
| | | public String payCallback(JSONObject jsonObject) { |
| | | boolean flag = false; |
| | | String orderStatus = jsonObject.get("order_status").toString(); |
| | | if(2 != Integer.parseInt(orderStatus)){ |
| | | return "FAIL"; |
| | |
| | | |
| | | String orderNo = jsonObject.get("out_order_no").toString(); |
| | | |
| | | LambdaQueryWrapper<MallOrderInfo> query = new LambdaQueryWrapper<>(); |
| | | query.eq(MallOrderInfo::getOrderNo, orderNo); |
| | | MallOrderInfo orderInfo = this.orderInfoMapper.selectOne(query); |
| | | if ("1".equals(orderInfo.getPayResult())) { |
| | | return "SUCCESS"; |
| | | /* |
| | | {"req_time":"1660205634885","version":"3.0","req_data":{"out_order_no":"GHSNVDY8033038232443530","merchant_no":"8222900701107M5"}} |
| | | */ |
| | | |
| | | LaKaLaQueryOrderReqDate laKaLaQueryOrderReqDate = new LaKaLaQueryOrderReqDate(); |
| | | laKaLaQueryOrderReqDate.setOut_order_no(orderNo); |
| | | if ("dev".equals(active) || "test".equals(active)) { |
| | | laKaLaQueryOrderReqDate.setMerchant_no(merchant_no); |
| | | }else{ |
| | | laKaLaQueryOrderReqDate.setMerchant_no(merchant_no_prd); |
| | | } |
| | | |
| | | orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); |
| | | orderInfo.setPayResult("1"); |
| | | orderInfo.setPayTime(new Date()); |
| | | String payOrderNo = jsonObject.get("pay_order_no").toString(); |
| | | orderInfo.setPayTradeNo(payOrderNo); |
| | | orderInfoMapper.updateById(orderInfo); |
| | | String yyyyMMddHHmmss = DateUtil.format(new Date(), "yyyyMMddHHmmss"); |
| | | LaKaLaBasicReqDate laKaLaBasicReqDate = new LaKaLaBasicReqDate(); |
| | | laKaLaBasicReqDate.setReq_time(yyyyMMddHHmmss); |
| | | laKaLaBasicReqDate.setVersion("3.0"); |
| | | JSONObject jsonObjectQuery = JSONUtil.parseObj(laKaLaQueryOrderReqDate); |
| | | laKaLaBasicReqDate.setReq_data(jsonObjectQuery); |
| | | try { |
| | | String body = JSONUtil.parseObj(laKaLaBasicReqDate).toString(); |
| | | log.info("LKL查询请求Body,{}",body); |
| | | String authorization = getAuthorization(body); |
| | | |
| | | commonService.changeWallet(orderInfo.getId(), FlowTypeEnum.WECHAT.getValue()); |
| | | String apiUrlCreateHttp = ""; |
| | | if ("dev".equals(active) || "test".equals(active)) { |
| | | apiUrlCreateHttp = apiUrlQuery; |
| | | }else{ |
| | | apiUrlCreateHttp = apiUrlQuery_prd; |
| | | } |
| | | HttpResponse response = post(apiUrlCreateHttp , body, authorization); |
| | | if (response.getStatusLine().getStatusCode() != 200) { |
| | | return "FAIL"; |
| | | } |
| | | |
| | | /** |
| | | * 插入一条待处理记录 |
| | | * mq处理之后,更新状态 |
| | | */ |
| | | MallMqRecord mallMqRecord = new MallMqRecord(); |
| | | mallMqRecord.setOrderId(orderInfo.getId()); |
| | | mallMqRecord.setState(2); |
| | | mallMqRecord.setRetryTimes(2); |
| | | mallMqRecordMapper.insert(mallMqRecord); |
| | | //发送补贴消息 |
| | | agentProducer.sendPerkMoneyMsg(orderInfo.getId()); |
| | | //发送代理自动升级消息 |
| | | agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId()); |
| | | String appid = getHeadValue(response, "Lklapi-Appid"); |
| | | String lklapiSerial = getHeadValue(response, "Lklapi-Serial"); |
| | | String timestamp = getHeadValue(response, "Lklapi-Timestamp"); |
| | | String nonce = getHeadValue(response, "Lklapi-Nonce"); |
| | | String signature = getHeadValue(response, "Lklapi-Signature"); |
| | | String responseStr = IOUtils.toString(response.getEntity().getContent(), ENCODING); |
| | | System.out.println("responseStr " + responseStr); |
| | | |
| | | return "SUCCESS"; |
| | | log.info("LKL查询返回的responseStr,{}",responseStr); |
| | | |
| | | String source = appid + "\n" + lklapiSerial + "\n" + timestamp + "\n" + nonce + "\n" + responseStr + "\n"; |
| | | |
| | | System.out.println("source " + source); |
| | | String lklCertificatePathNameStr = ""; |
| | | if ("dev".equals(active) || "test".equals(active)) { |
| | | lklCertificatePathNameStr = lklCertificatePathName; |
| | | }else{ |
| | | lklCertificatePathNameStr = lklCertificatePathName_prd; |
| | | } |
| | | InputStream fileInputStream = resourceLoader.getResource(lklCertificatePathNameStr).getInputStream(); |
| | | X509Certificate lklCertificate = loadCertificate(fileInputStream); |
| | | boolean verify = verify(lklCertificate, source.getBytes(ENCODING), signature); |
| | | |
| | | if (verify) { |
| | | System.out.println("验签成功"); |
| | | JSONObject parseObj = JSONUtil.parseObj(responseStr); |
| | | String code = parseObj.get("code").toString(); |
| | | if("000000".equals(code)){ |
| | | Object respData = parseObj.get("resp_data"); |
| | | JSONObject respDataChild = JSONUtil.parseObj(respData); |
| | | String orderStatusQuery = respDataChild.get("order_status").toString(); |
| | | if(2 != Integer.parseInt(orderStatusQuery)){ |
| | | return "FAIL"; |
| | | } |
| | | |
| | | Object trade_info_list = respDataChild.get("order_trade_info_list"); |
| | | JSONObject respChild = JSONUtil.parseObj(trade_info_list); |
| | | String tradeStatus = respChild.get("trade_status").toString(); |
| | | if(!"S".equals(tradeStatus)){ |
| | | return "FAIL"; |
| | | } |
| | | flag = true; |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | if(flag){ |
| | | LambdaQueryWrapper<MallOrderInfo> query = new LambdaQueryWrapper<>(); |
| | | query.eq(MallOrderInfo::getOrderNo, orderNo); |
| | | MallOrderInfo orderInfo = this.orderInfoMapper.selectOne(query); |
| | | if ("1".equals(orderInfo.getPayResult())) { |
| | | return "SUCCESS"; |
| | | } |
| | | |
| | | orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); |
| | | orderInfo.setPayResult("1"); |
| | | orderInfo.setPayTime(new Date()); |
| | | String payOrderNo = jsonObject.get("pay_order_no").toString(); |
| | | orderInfo.setPayTradeNo(payOrderNo); |
| | | orderInfoMapper.updateById(orderInfo); |
| | | |
| | | commonService.changeWallet(orderInfo.getId(), FlowTypeEnum.WECHAT.getValue()); |
| | | |
| | | /** |
| | | * 插入一条待处理记录 |
| | | * mq处理之后,更新状态 |
| | | */ |
| | | MallMqRecord mallMqRecord = new MallMqRecord(); |
| | | mallMqRecord.setOrderId(orderInfo.getId()); |
| | | mallMqRecord.setState(2); |
| | | mallMqRecord.setRetryTimes(2); |
| | | mallMqRecordMapper.insert(mallMqRecord); |
| | | //发送补贴消息 |
| | | agentProducer.sendPerkMoneyMsg(orderInfo.getId()); |
| | | //发送代理自动升级消息 |
| | | agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId()); |
| | | |
| | | return "SUCCESS"; |
| | | }else{ |
| | | return "FAIL"; |
| | | } |
| | | |
| | | } |
| | | |
| | | public static void main(String[] args) { |