123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- package com.kmall.common.utils.pingan;
- import com.kmall.common.utils.DateUtils;
- import com.kmall.common.utils.MapUtils;
- import com.kmall.common.utils.StringUtils;
- import com.kmall.common.utils.pingan.dto.PinganPayOrderDto;
- import com.kmall.common.utils.pingan.dto.PinganResponseDto;
- import com.kmall.common.utils.pingan.properties.PinganPayPropertiesBuilder;
- import com.kmall.common.utils.pingan.utils.InterfaceParams;
- import com.kmall.common.utils.pingan.utils.TLinx2Util;
- import com.kmall.common.utils.pingan.utils.TLinxAESCoder;
- import com.kmall.common.utils.pingan.utils.TLinxSHA1;
- import com.kmall.common.utils.wechat.WechatRefundQueryResult;
- import net.sf.json.JSONObject;
- import org.apache.log4j.Logger;
- import java.util.Date;
- import java.util.TreeMap;
- public class PinganUtil {
- private static final String SUCCESS_CODE = "0";
- private static Logger logger = Logger.getLogger(PinganUtil.class);
- /**
- * 构建平安支付订单信息
- */
- public static PinganPayOrderDto buildPayOrderDto(JSONObject dataObject) {
- PinganPayOrderDto payorder = new PinganPayOrderDto();
- payorder.setOutNo(MapUtils.getString("out_no", dataObject).equals("null") ? null : MapUtils.getString("out_no", dataObject));
- payorder.setPmtName(MapUtils.getString("pmt_name", dataObject).equals("null") ? null : MapUtils.getString("pmt_name", dataObject));
- payorder.setPmtTag(MapUtils.getString("pmt_tag", dataObject).equals("null") ? null : MapUtils.getString("pmt_tag", dataObject));
- payorder.setOrdMctId(MapUtils.getInteger("ord_mct_id", dataObject));
- payorder.setOrdShopId(MapUtils.getInteger("ord_shop_id", dataObject));
- payorder.setOrdCurrency(MapUtils.getString("ord_currency", dataObject).equals("null") ? null : MapUtils.getString("ord_currency", dataObject));
- payorder.setCurrencySign(MapUtils.getString("currency_sign", dataObject).equals("null") ? null : MapUtils.getString("currency_sign", dataObject));
- payorder.setOrdNo(MapUtils.getString("ord_no", dataObject).equals("null") ? null : MapUtils.getString("ord_no", dataObject));
- payorder.setOrdType(MapUtils.getInteger("ord_type", dataObject));
- payorder.setOriginalAmount(MapUtils.getInteger("original_amount", dataObject));
- payorder.setDiscountAmount(MapUtils.getInteger("discount_amount", dataObject));
- payorder.setIgnoreAmount(MapUtils.getInteger("ignore_amount", dataObject));
- payorder.setTradeAccount(MapUtils.getString("trade_account", dataObject).equals("null") ? null : MapUtils.getString("trade_account", dataObject));
- payorder.setTradeNo(MapUtils.getString("trade_no", dataObject).equals("null") ? null : MapUtils.getString("trade_no", dataObject));
- payorder.setTradeAmount(MapUtils.getInteger("trade_amount", dataObject));
- payorder.setTradeQrcode(MapUtils.getString("trade_qrcode", dataObject).equals("null") ? null : MapUtils.getString("trade_qrcode", dataObject));
- payorder.setAmount(MapUtils.getString("amount", dataObject).equals("null") ? null : MapUtils.getString("amount", dataObject));
- payorder.setTradeTime(MapUtils.getString("trade_time", dataObject) == null || MapUtils.getString("trade_time", dataObject).equals("null") ? null : DateUtils.strToDate(MapUtils.getString("trade_time", dataObject)));
- payorder.setTradePayTime(MapUtils.getString("trade_pay_time", dataObject) == null || MapUtils.getString("trade_pay_time", dataObject).equals("null") ? null : DateUtils.strToDate(MapUtils.getString("trade_pay_time", dataObject)));
- payorder.setPayTime(MapUtils.getString("pay_time", dataObject).equals("null") ? null : MapUtils.getString("pay_time", dataObject));
- payorder.setStatus(MapUtils.getInteger("status", dataObject));
- payorder.setTradeResult(MapUtils.getString("trade_result", dataObject).equals("null") ? null : MapUtils.getString("trade_result", dataObject));
- payorder.setJsapiPayUrl(MapUtils.getString("jsapi_pay_url", dataObject).equals("null") ? null : MapUtils.getString("jsapi_pay_url", dataObject));
- payorder.setJsapiPayUrl(MapUtils.getString("rand_str", dataObject).equals("null") ? null : MapUtils.getString("rand_str", dataObject));
- payorder.setAppid(MapUtils.getString("appId", dataObject).equals("null") ? null : MapUtils.getString("appId", dataObject));
- payorder.setNoncestr(MapUtils.getString("nonceStr", dataObject).equals("null") ? null : MapUtils.getString("nonceStr", dataObject));
- payorder.setSigntype(MapUtils.getString("signType", dataObject).equals("null") ? null : MapUtils.getString("signType", dataObject));
- payorder.setPrepayId(MapUtils.getString("package", dataObject).equals("null") ? null : MapUtils.getString("package", dataObject));
- payorder.setPaysign(MapUtils.getString("paySign", dataObject).equals("null") ? null : MapUtils.getString("paySign", dataObject));
- return payorder;
- }
- public static WechatRefundQueryResult buildWechatRefundQueryResult(JSONObject tradeResult, int count) {
- WechatRefundQueryResult refundQueryResult = new WechatRefundQueryResult();
- refundQueryResult.setOut_refund_no(MapUtils.getString("out_refund_no_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("out_refund_no_" + (count), tradeResult));
- refundQueryResult.setRefund_account(MapUtils.getString("refund_account_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_account_" + (count), tradeResult));
- refundQueryResult.setRefund_channel(MapUtils.getString("refund_channel_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_channel_" + (count), tradeResult));
- refundQueryResult.setRefund_fee(MapUtils.getString("refund_fee_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_fee_" + (count), tradeResult));
- refundQueryResult.setRefund_id(MapUtils.getString("refund_id_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_id_" + (count), tradeResult));
- refundQueryResult.setRefund_recv_accout(MapUtils.getString("refund_recv_accout_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_recv_accout_" + (count), tradeResult));
- refundQueryResult.setRefund_status(MapUtils.getString("refund_status_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_status_" + (count), tradeResult));
- refundQueryResult.setRefund_success_time(MapUtils.getString("refund_success_time_" + (count), tradeResult).equals("null") ? null : MapUtils.getString("refund_success_time_" + (count), tradeResult));
- return refundQueryResult;
- }
- /**
- * 平安订单退款接口
- */
- public static PinganResponseDto pinganPayRefund(String outNo, String refundOutNo, Integer refundAmount, String tradeNo) {
- // 初始化参数
- String timestamp = new Date().getTime() / 1000 + ""; // 时间
- PinganResponseDto response = null;
- try {
- // 固定参数
- TreeMap<String, String> postmap = new TreeMap<String, String>(); // 请求参数的map
- postmap.put("open_id", PinganPayPropertiesBuilder.instance().getPayOpenId());
- postmap.put("timestamp", timestamp);
- TreeMap<String, String> datamap = new TreeMap<String, String>(); // data参数的map
- datamap.put("out_no", outNo);
- datamap.put("refund_out_no", refundOutNo);
- datamap.put("refund_amount", refundAmount + "");
- datamap.put("trade_no", tradeNo);
- datamap.put("shop_pass", TLinxSHA1.SHA1("123456"));
- TLinx2Util.handleEncrypt(datamap, postmap);
- postmap.put("sign_type", "RSA");
- TLinx2Util.handleSignRSA(postmap);
- String rspStr = TLinx2Util.handlePost(postmap, InterfaceParams.PAYREFUND);
- System.out.println("返回字符串=" + rspStr);
- JSONObject respObject = JSONObject.fromObject(rspStr);
- logger.info("返回错误码:【" + MapUtils.getString("errcode", respObject) + "】");
- logger.info("返回错误提示【" + MapUtils.getString("msg", respObject) + "】");
- logger.info("平安支付下单返回数据:【" + MapUtils.getString("data", respObject) + "】");
- logger.info("接口签名【" + MapUtils.getString("sign", respObject) + "】");
- response = new PinganResponseDto();
- response.setErrcode(MapUtils.getString("errcode", respObject));
- response.setMsg(MapUtils.getString("msg", respObject));
- response.setData(MapUtils.getString("data", respObject));
- response.setSign(MapUtils.getString("sign", respObject));
- if (StringUtils.isNotEmpty(MapUtils.getString("timestamp", respObject))) {
- Long tstm = Long.parseLong(MapUtils.getString("timestamp", respObject)) * 1000;
- response.setTimestamp(new Date(tstm));
- }
- response.setReqInterface(InterfaceParams.PAYREFUND);
- if (SUCCESS_CODE.equals(MapUtils.getString("errcode", respObject))) {
- Object dataStr = MapUtils.getString("data", respObject);
- if (!rspStr.isEmpty() && (dataStr != null)) {
- if (TLinx2Util.verifySign(respObject)) { // 验签成功
- String respData = TLinxAESCoder.decrypt(dataStr.toString(), PinganPayPropertiesBuilder.instance().getPayOpenKey());
- System.out.println("==================响应data内容:" + respData);
- response.setDatajson(respData);
- } else {
- System.out.println("=====验签失败=====");
- }
- } else {
- System.out.println("=====没有返回data数据=====");
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return response;
- }
- /**
- * 平安订单取消接口
- * 1、接口适用于所有等待支付的订单。
- * 2、已成功支付的只支持“微信刷卡”类型的订单取消。
- * 3、仅当日订单可以触发,已支付订单按支付完成时间,未支付订单按订单下单时间。
- * 4、下单后,系统会在12分钟后自动取消未支付订单,调用本接口前请先查询订单状态。
- */
- public static PinganResponseDto pinganPayCancel(String ordNo, String outNo) {
- // 初始化参数
- String timestamp = new Date().getTime() / 1000 + ""; // 时间
- PinganResponseDto response = null;
- try {
- // 固定参数
- TreeMap<String, String> postmap = new TreeMap<String, String>(); // 请求参数的map
- postmap.put("open_id", PinganPayPropertiesBuilder.instance().getPayOpenId());
- postmap.put("timestamp", timestamp);
- TreeMap<String, String> datamap = new TreeMap<String, String>(); // data参数的map
- datamap.put("out_no", outNo);
- datamap.put("ord_no", ordNo);
- TLinx2Util.handleEncrypt(datamap, postmap);
- //签名方式
- postmap.put("sign_type", "RSA");
- System.out.println("postmap---:" + postmap);
- TLinx2Util.handleSignRSA(postmap);
- String rspStr = TLinx2Util.handlePost(postmap, InterfaceParams.PAYCANCEL);
- System.out.println("返回字符串=" + new String(rspStr.getBytes("UTF-8")));
- JSONObject respObject = JSONObject.fromObject(rspStr);
- logger.info("返回错误码:【" + MapUtils.getString("errcode", respObject) + "】");
- logger.info("返回错误提示【" + MapUtils.getString("msg", respObject) + "】");
- logger.info("平安支付下单返回数据:【" + MapUtils.getString("data", respObject) + "】");
- logger.info("接口签名【" + MapUtils.getString("sign", respObject) + "】");
- response = new PinganResponseDto();
- response.setErrcode(MapUtils.getString("errcode", respObject));
- response.setMsg(MapUtils.getString("msg", respObject));
- response.setData(MapUtils.getString("data", respObject));
- response.setSign(MapUtils.getString("sign", respObject));
- if (StringUtils.isNotEmpty(MapUtils.getString("timestamp", respObject))) {
- Long tstm = Long.parseLong(MapUtils.getString("timestamp", respObject)) * 1000;
- response.setTimestamp(new Date(tstm));
- }
- response.setReqInterface(InterfaceParams.PAYCANCEL);
- if (SUCCESS_CODE.equals(MapUtils.getString("errcode", respObject))) {
- Object dataStr = MapUtils.getString("data", respObject);
- if (!rspStr.isEmpty() || (dataStr != null)) {
- if (TLinx2Util.verifySign(respObject)) { // 验签成功
- String respData = TLinxAESCoder.decrypt(dataStr.toString(), PinganPayPropertiesBuilder.instance().getPayOpenKey());
- System.out.println("==================响应data内容:" + respData);
- response.setDatajson(respData);
- } else {
- System.out.println("=====验签失败=====");
- }
- } else {
- System.out.println("=====没有返回data数据=====");
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return response;
- }
- /**
- * 平安查询付款状态
- */
- public static PinganResponseDto pinganPaystatus(String outNo) {
- // 初始化参数
- String timestamp = new Date().getTime() / 1000 + ""; // 时间
- PinganResponseDto response = null;
- try {
- // 固定参数
- TreeMap<String, String> postmap = new TreeMap<String, String>(); // 请求参数的map
- postmap.put("open_id", PinganPayPropertiesBuilder.instance().getPayOpenId());
- postmap.put("timestamp", timestamp);
- TreeMap<String, String> datamap = new TreeMap<String, String>(); // data参数的map
- datamap.put("out_no", outNo);
- TLinx2Util.handleEncrypt(datamap, postmap);
- TLinx2Util.handleSign(postmap);
- String rspStr = TLinx2Util.handlePost(postmap, InterfaceParams.QUERYPAYSTATUS);
- System.out.println("返回字符串=" + rspStr);
- JSONObject respObject = JSONObject.fromObject(rspStr);
- logger.info("返回错误码:【" + MapUtils.getString("errcode", respObject) + "】");
- logger.info("返回错误提示【" + MapUtils.getString("msg", respObject) + "】");
- logger.info("平安支付下单返回数据:【" + MapUtils.getString("data", respObject) + "】");
- logger.info("接口签名【" + MapUtils.getString("sign", respObject) + "】");
- response = new PinganResponseDto();
- response.setErrcode(MapUtils.getString("errcode", respObject));
- response.setMsg(MapUtils.getString("msg", respObject));
- response.setData(MapUtils.getString("data", respObject));
- response.setSign(MapUtils.getString("sign", respObject));
- if (StringUtils.isNotEmpty(MapUtils.getString("timestamp", respObject))) {
- Long tstm = Long.parseLong(MapUtils.getString("timestamp", respObject)) * 1000;
- response.setTimestamp(new Date(tstm));
- }
- response.setReqInterface(InterfaceParams.QUERYPAYSTATUS);
- if (SUCCESS_CODE.equals(MapUtils.getString("errcode", respObject))) {
- Object dataStr = MapUtils.getString("data", respObject);
- if (!rspStr.isEmpty() || (dataStr != null)) {
- if (TLinx2Util.verifySign(respObject)) { // 验签成功
- String respData = TLinxAESCoder.decrypt(dataStr.toString(), PinganPayPropertiesBuilder.instance().getPayOpenKey());
- System.out.println("==================响应data内容:" + respData);
- response.setDatajson(respData);
- } else {
- System.out.println("=====验签失败=====");
- }
- } else {
- System.out.println("=====没有返回data数据=====");
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return response;
- }
- /**
- * 平安订单退款查询
- */
- public static PinganResponseDto pinganQueryRefund(String refund_out_no, String refund_ord_no) {
- // 初始化参数
- String timestamp = new Date().getTime() / 1000 + ""; // 时间
- PinganResponseDto response = null;
- try {
- // 固定参数
- TreeMap<String, String> postmap = new TreeMap<String, String>(); // 请求参数的map
- postmap.put("open_id", PinganPayPropertiesBuilder.instance().getPayOpenId());
- postmap.put("timestamp", timestamp);
- TreeMap<String, String> datamap = new TreeMap<String, String>(); // data参数的map
- datamap.put("refund_out_no", refund_out_no);
- datamap.put("refund_ord_no", refund_ord_no);
- TLinx2Util.handleEncrypt(datamap, postmap);
- TLinx2Util.handleSign(postmap);
- String rspStr = TLinx2Util.handlePost(postmap, InterfaceParams.QUERYPAYREFUND);
- System.out.println("返回字符串=" + rspStr);
- JSONObject respObject = JSONObject.fromObject(rspStr);
- logger.info("返回错误码:【" + MapUtils.getString("errcode", respObject) + "】");
- logger.info("返回错误提示【" + MapUtils.getString("msg", respObject) + "】");
- logger.info("平安支付下单返回数据:【" + MapUtils.getString("data", respObject) + "】");
- logger.info("接口签名【" + MapUtils.getString("sign", respObject) + "】");
- response = new PinganResponseDto();
- response.setErrcode(MapUtils.getString("errcode", respObject));
- response.setMsg(MapUtils.getString("msg", respObject));
- response.setData(MapUtils.getString("data", respObject));
- response.setSign(MapUtils.getString("sign", respObject));
- if (StringUtils.isNotEmpty(MapUtils.getString("timestamp", respObject))) {
- Long tstm = Long.parseLong(MapUtils.getString("timestamp", respObject)) * 1000;
- response.setTimestamp(new Date(tstm));
- }
- response.setReqInterface(InterfaceParams.QUERYPAYREFUND);
- if (SUCCESS_CODE.equals(MapUtils.getString("errcode", respObject))) {
- Object dataStr = MapUtils.getString("data", respObject);
- if (!rspStr.isEmpty() && (dataStr != null)) {
- if (TLinx2Util.verifySign(respObject)) { // 验签成功
- String respData = TLinxAESCoder.decrypt(dataStr.toString(), PinganPayPropertiesBuilder.instance().getPayOpenKey());
- System.out.println("==================响应data内容:" + respData);
- response.setDatajson(respData);
- } else {
- System.out.println("=====验签失败=====");
- }
- } else {
- System.out.println("=====没有返回data数据=====");
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return response;
- }
- }
|