@Action("payCallback") public void payCallback() { try { long localOrderID = Long.parseLong(dealseq); UOrder order = orderManager.getOrder(localOrderID); if (order == null || order.getChannel() == null) { Log.d("The order is null or the channel is null.orderID:" + dealseq); this.renderState(false, "notifyId 错误"); return; } if (order.getState() == PayState.STATE_COMPLETE) { Log.d("The order is already completed.local orderID:%s; orderID:%s", localOrderID, orderid); this.renderState(true, "该订单已经被处理,或者CP订单号重复"); return; } if (!isValid(order.getChannel())) { Log.d("The sign is not valid, sign:%s; orderID:%s", sign, dealseq); this.renderState(false, "签名错误"); return; } RSAEncrypt encrypt = new RSAEncrypt(); encrypt.loadPublicKey(order.getChannel().getCpPayKey()); byte[] dcDataStr = Base64.decode(notify_data); byte[] plainData = encrypt.decrypt(encrypt.getPublicKey(), dcDataStr); // 获取到加密通告信息 String notifyDataStr = new String(plainData, "UTF-8"); Map<String, String> notifyData = HttpUtils.parseUrlParams(notifyDataStr); String feeStr = notifyData.containsKey("fee") ? notifyData.get("fee") : null; String payresultStr = notifyData.containsKey("payresult") ? notifyData.get("payresult") : null; int fee = (int) (Float.valueOf(feeStr) * 100); int payresult = Integer.valueOf(payresultStr); if (order.getMoney() != fee) { Log.e( "订单金额不一致, local orderID:%s;local money:%s;money:%s", localOrderID, fee, order.getMoney()); } if (payresult != 0) { Log.e("平台支付失败 local orderID:%s; pay result:%s", localOrderID, payresult); this.renderState(false, "联想支付中心返回的结果是支付失败"); return; } order.setChannelOrderID(orderid); order.setRealMoney(fee); order.setSdkOrderTime(""); order.setCompleteTime(new Date()); order.setState(PayState.STATE_SUC); orderManager.saveOrder(order); SendAgent.sendCallbackToServer(this.orderManager, order); this.renderState(true, ""); } catch (Exception e) { e.printStackTrace(); try { this.renderState(false, "未知错误"); } catch (IOException e1) { e1.printStackTrace(); } } }
@Action("payCallback") public void payCallback() { try { WDJPayCallbackContent data = (WDJPayCallbackContent) JsonUtils.decodeJson(content, WDJPayCallbackContent.class); if (data == null) { Log.e("The content parse error..."); return; } long localOrderID = Long.parseLong(data.getOut_trade_no()); UOrder order = orderManager.getOrder(localOrderID); if (order == null || order.getChannel() == null) { Log.d("The order is null or the channel is null."); this.renderState(false, "notifyId 错误"); return; } if (order.getState() == PayState.STATE_COMPLETE) { Log.d("The state of the order is complete. The state is " + order.getState()); this.renderState(true, "该订单已经被处理,或者CP订单号重复"); return; } int orderMoney = Integer.valueOf(data.getMoney()); // 转换为分 if (order.getMoney() != orderMoney) { Log.e( "订单金额不一致! local orderID:" + localOrderID + "; money returned:" + data.getMoney() + "; order money:" + order.getMoney()); this.renderState(false, "订单金额不一致"); return; } if (isValid(order.getChannel())) { order.setChannelOrderID(data.getOrderId()); order.setState(PayState.STATE_SUC); orderManager.saveOrder(order); SendAgent.sendCallbackToServer(this.orderManager, order); this.renderState(true, ""); } else { order.setChannelOrderID(data.getOrderId()); order.setState(PayState.STATE_FAILED); orderManager.saveOrder(order); this.renderState(false, "sign 错误"); } } catch (Exception e) { e.printStackTrace(); try { this.renderState(false, "未知错误"); } catch (IOException e1) { e1.printStackTrace(); } } }