/** * 验证签名 * * @param map * @return */ public boolean verifyWeixinNotify(Map<Object, Object> map) { SortedMap<String, String> parameterMap = new TreeMap<String, String>(); String sign = (String) map.get("sign"); for (Object keyValue : map.keySet()) { if (!keyValue.toString().equals("sign")) { parameterMap.put(keyValue.toString(), map.get(keyValue).toString()); } } String createSign = pay.getSign(parameterMap); if (createSign.equals(sign)) { return true; } else { logger.error("微信支付 ~~~~~~~~~~~~~~~~验证签名失败"); return false; } } /** * 申请退款 * * @param out_trade_no * 订单号 * @param total_fee * 总金额(元) * @param refund_fee * 退款金额(元) * @return * @throws Exception */ public JsonView Refund(String out_trade_no, String total_fee, String refund_fee) throws Exception { Map<String, Object> result = new HashMap<String, Object>(); // 元转分 total_fee = AmountUtils.changeY2F(total_fee); refund_fee = AmountUtils.changeY2F(refund_fee); String out_refund_no = "";// 退款单号 logger.error("微信退款 ----WECHAT_APPID=" + pay.WECHAT_APPID); SortedMap<String, String> packageParams = new TreeMap<String, String>(); packageParams.put("appid", pay.WECHAT_APPID);// 微信公众号apid packageParams.put("mch_id", pay.MCH_ID);// 微信商户id packageParams.put("nonce_str", pay.create_nonce_str(16));// 随机字符串 packageParams.put("out_trade_no", out_trade_no);// 订单号 packageParams.put("out_refund_no", out_trade_no); packageParams.put("total_fee", total_fee);// 总金额 单位为分,只能为整数 packageParams.put("refund_fee", refund_fee);// 退款金额 单位为分,只能为整数 packageParams.put("op_user_id", pay.MCH_ID);// 操作员帐号, 默认为商户号 String sign = pay.getSign(packageParams); packageParams.put("sign", sign); String xml = pay.ArrayToXml(packageParams); logger.error("微信退款 ----请求的POST XML数据 我要疯了=" + xml); String createOrderURL = "https://api.mch.weixin.qq.com/secapi/pay/refund"; String backxml = ""; try { backxml = ClientCustomSSL.doRefund(createOrderURL, xml); } catch (Exception e) { // TODO Auto-generated catch block logger.error("微信退款 ----请求异常" + e); e.printStackTrace(); } logger.error("微信退款 ----收到的xml=" + backxml); Map<Object, Object> map = Xmlunit.xml2map(backxml, false); if (map.get("result_code").toString().equalsIgnoreCase("SUCCESS")) { if (verifyWeixinNotify(map)) { logger.error("微信退款 ----验证签名成功"); // 退款成功操作 int editres = Wechat_Order.execute("UPDATE wechat_order SET orderstatus =? WHERE orderno=?", new Object[] { EnumOrderStatus.refund.getValue(), map.get("out_trade_no") }); result.put("result", editres); } else { result.put("result", "微信退款成功,验证签名失败,未修改订单状态"); logger.error("[" + out_trade_no + "]微信退款成功,验证签名失败,未修改订单状态=" + backxml); } } else { result.put("result", "微信退款失败"); logger.error("[" + out_trade_no + "]微信退款失败=" + backxml); } logger.error("微信退款 ----最后的结果=" + backxml); return new JsonView(result); }
微信支付一 :公众号支付3 申请退款
最新推荐文章于 2021-08-01 13:36:29 发布