/*
package com.kmall.common.utils.wechat.wxglobal;

import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
import com.kmall.common.service.pay.global.CommonWxGlobalPayPropertiesBuilder;
import com.kmall.common.utils.*;
import com.kmall.common.utils.wechat.WechatConfig;
import com.kmall.common.utils.wechat.WechatUtil;
import com.kmall.common.utils.wechat.wxglobal.dto.WechatGlobalQueryApiResult;
import com.kmall.common.utils.wechat.wxglobal.dto.WechatGlobalQueryRateResult;
import com.kmall.common.utils.wechat.wxglobal.dto.WechatGlobalRefundApiResult;
import com.kmall.common.utils.wechat.wxglobal.dto.WechatGlobalRefundQueryResult;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;

import java.math.BigDecimal;
import java.math.MathContext;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

*/
/**
 * <p>Title: 微信退款工具类</p>
 * <p>Description: 微信退款工具类，通过充值客户端的不同初始化不同的工具类，得到相应微信退款相关的appid和muchid</p>
 *
 * @author xubo
 * @date 2017年6月6日  下午5:05:03
 *//*

public class WechatGlobalUtil2 {
    private static Log logger = LogFactory.getLog(WechatGlobalUtil2.class);
    private static final String EMPTY = "";
    private static final String URL_PARAM_CONNECT_FLAG = "&";

    */
/**
     * 菜单类型
     *
     * @author Scott
     * @email
     * @date 2016年11月15日 下午1:24:29
     *//*

    public enum WXTradeState {
        */
/**
         * 支付成功
         *//*

        SUCCESS("SUCCESS", "支付成功"),
        */
/**
         * 转入退款
         *//*

        REFUND("REFUND", "转入退款"),

        */
/**
         * 未支付
         *//*

        NOTPAY("NOTPAY", "未支付"),

        */
/**
         * 已关闭
         *//*

        CLOSED("CLOSED", "已关闭"),

        */
/**
         * 已撤销（付款码支付）
         *//*

        REVOKED("REVOKED", "已撤销"),

        */
/**
         * 用户支付中（付款码支付）
         *//*

        USERPAYING("USERPAYING", "用户支付中"),

        */
/**
         * 支付失败（付款码支付）
         *//*

        PAYERROR("PAYERROR", "支付失败");

        private String code;
        private String codeZn;

        private WXTradeState(String code, String codeZn) {
            this.code = code;
            this.codeZn = codeZn;
        }

        public String getCode() {
            return code;
        }

        public String getCodeZn() {
            return codeZn;
        }
    }

    */
/**
     * 统一下单
     * @param out_trade_no 商户订单号
     * @param body 商品描述
     * @param actual_price 实付金额
     * @param openId 微信openId
     * @return
     *//*

    public static WechatGlobalQueryApiResult unifiedOrder(String out_trade_no,String body,BigDecimal actual_price,String openId) {
        Map<Object, Object> param = new TreeMap<>();
        param.put("appid", CommonWxGlobalPayPropertiesBuilder.instance().getAppId());
        param.put("mch_id", CommonWxGlobalPayPropertiesBuilder.instance().getMchId());// 商家账号
        String randomStr = CharUtil.getRandomNum(18).toUpperCase();
        param.put("nonce_str", randomStr);// 随机字符串
//        if(StringUtils.isNotEmpty(body)) {
//            param.put("body", body);// 商品描述
//        }else{
//            param.put("body", "中网跨境商城-支付");// 商品描述
//        }
        param.put("body", "中网跨境商城-支付");// 商品描述
        param.put("out_trade_no", out_trade_no);// 商户订单编号
        //支付金额
        param.put("total_fee", Math.round(actual_price.multiply(Constant.ONE_HUNDRED).doubleValue()));// 消费金额
        param.put("fee_type",CommonWxGlobalPayPropertiesBuilder.instance().getFeeType());//标价币种
        param.put("spbill_create_ip", CommonWxGlobalPayPropertiesBuilder.instance().getSpbillCreateIp());
        param.put("notify_url", CommonWxGlobalPayPropertiesBuilder.instance().getNotifyUrl());// 回调地址
        param.put("trade_type", CommonWxGlobalPayPropertiesBuilder.instance().getTradeType());// 交易类型APP
        param.put("openid", openId);
        String sign = WechatUtil.arraySign(param, CommonWxGlobalPayPropertiesBuilder.instance().getPaySignKey());
        param.put("sign", sign);// 数字签证

        String xml = MapUtils.convertMap2Xml(param);
        logger.info("xml:" + xml);
        logger.info("*******查询订单（WX Request：" + xml);
        String reponseXml = WechatUtil.sendSSLPostToWx(xml, WechatConfig.getSslcsf(), CommonWxGlobalPayPropertiesBuilder.instance().getUniformorder());
        logger.info("*******查询订单（WX Response：" + reponseXml);
        WechatGlobalQueryApiResult result =
                (WechatGlobalQueryApiResult) XmlUtil.xmlStrToBean(reponseXml, WechatGlobalQueryApiResult.class);

        return result;
    }

    */
/**
     * 微信境外查询订单
     * @param
     * @return
     *//*

    public static WechatGlobalQueryApiResult wxOrderQuery(String out_trade_no) {
        //初始化请求微信服务器的配置信息包括appid密钥等
        //构建请求参数
        Map<Object, Object> params = new HashMap<Object, Object>();
        params.put("appid", CommonWxGlobalPayPropertiesBuilder.instance().getAppId());//微信分配的公众账号ID（企业号corpid即为此appId）
        params.put("mch_id", CommonWxGlobalPayPropertiesBuilder.instance().getMchId());//微信支付分配的商户号
        params.put("out_trade_no", out_trade_no);//商户传给微信的订单号
        params.put("nonce_str", CharUtil.getRandomString(16));//随机字符串，不长于32位。推荐随机数生成算法
        //签名前必须要参数全部写在前面
        params.put("sign", WechatUtil.arraySign(params, CommonWxGlobalPayPropertiesBuilder.instance().getPaySignKey()));//签名
        String mapToXml = MapUtils.convertMap2Xml(params);
        //请求微信
        String reponseXml = sendQuerySSLPostToWx(mapToXml, WechatConfig.getSslcsf());
        WechatGlobalQueryApiResult result =
                (WechatGlobalQueryApiResult) XmlUtil.xmlStrToBean(reponseXml, WechatGlobalQueryApiResult.class);
        return result;
    }
    */
/**
     * 微信境外根据支付单查询订单
     * @param
     * @return
     *//*

    public static WechatGlobalQueryApiResult wxOrderQueryByTransactionId(String payTransactionId) {
        //初始化请求微信服务器的配置信息包括appid密钥等
        //构建请求参数
        Map<Object, Object> params = new HashMap<Object, Object>();
        params.put("appid", CommonWxGlobalPayPropertiesBuilder.instance().getAppId());//微信分配的公众账号ID（企业号corpid即为此appId）
        params.put("mch_id", CommonWxGlobalPayPropertiesBuilder.instance().getMchId());//微信支付分配的商户号
        params.put("transaction_id", payTransactionId);//微信的订单号
        params.put("nonce_str", CharUtil.getRandomString(16));//随机字符串，不长于32位。推荐随机数生成算法
        //签名前必须要参数全部写在前面
        params.put("sign", WechatUtil.arraySign(params, CommonWxGlobalPayPropertiesBuilder.instance().getPaySignKey()));//签名
        String mapToXml = MapUtils.convertMap2Xml(params);
        //请求微信
        String reponseXml = sendQuerySSLPostToWx(mapToXml, WechatConfig.getSslcsf());
        WechatGlobalQueryApiResult result =
                (WechatGlobalQueryApiResult) XmlUtil.xmlStrToBean(reponseXml, WechatGlobalQueryApiResult.class);
        return result;
    }
    */
/**
     * 请求查询订单微信
     **//*

    private static String sendQuerySSLPostToWx(String mapToXml, SSLConnectionSocketFactory sslcsf) {
        logger.info("*******查询订单（WX Request：" + mapToXml);
        String xmlStr = WechatUtil.sendSSLPostToWx(mapToXml, sslcsf, CommonWxGlobalPayPropertiesBuilder.instance().getOrderquery());
        logger.info("*******查询订单（WX Response：" + xmlStr);
        return xmlStr;
    }

    */
/**
     * 微信查询汇率
     * @param out_trade_no
     * @return
     *//*

    public static WechatGlobalQueryRateResult wxQueryexchagerate(String out_trade_no) {
        //初始化请求微信服务器的配置信息包括appid密钥等
        //构建请求参数
        Map<Object, Object> params = new HashMap<Object, Object>();
        params.put("appid", CommonWxGlobalPayPropertiesBuilder.instance().getAppId());//微信分配的公众账号ID（企业号corpid即为此appId）
        params.put("mch_id", CommonWxGlobalPayPropertiesBuilder.instance().getMchId());//微信支付分配的商户号
        params.put("fee_type", CommonWxGlobalPayPropertiesBuilder.instance().getFeeType());//外币币种
        params.put("date", DateUtils.format(new Date(),DateUtils.DATE_TIME_PATTERN_YYYY_MM_DD));//格式为yyyyMMdd
        //签名前必须要参数全部写在前面
        params.put("sign", WechatUtil.arraySign(params, CommonWxGlobalPayPropertiesBuilder.instance().getPaySignKey()));//签名
        String mapToXml = MapUtils.convertMap2Xml(params);
        //请求微信
        String reponseXml = WechatUtil.sendSSLPostToWx(mapToXml, WechatConfig.getSslcsf(), CommonWxGlobalPayPropertiesBuilder.instance().getRatequery());

        WechatGlobalQueryRateResult result =
                (WechatGlobalQueryRateResult) XmlUtil.xmlStrToBean(reponseXml, WechatGlobalQueryRateResult.class);
        return result;
    }

    */
/**
     * 微信境外申请退款
     * @param out_trade_no 商户订单编号
     * @param orderMoney 订单总金额
     * @param refundMoney 申请退款金额
     * @return
     *//*

    public static WechatGlobalRefundApiResult wxRefund(String out_trade_no, Double orderMoney, Double refundMoney) {
        //初始化请求微信服务器的配置信息包括appid密钥等
        //转换金钱格式
        BigDecimal bdOrderMoney = new BigDecimal(orderMoney, MathContext.DECIMAL32);
        BigDecimal bdRefundMoney = new BigDecimal(refundMoney, MathContext.DECIMAL32);
        //构建请求参数
        Map<Object, Object> params = new HashMap<Object, Object>();
        params.put("appid", CommonWxGlobalPayPropertiesBuilder.instance().getAppId());//微信分配的公众账号ID（企业号corpid即为此appId）
        params.put("mch_id", CommonWxGlobalPayPropertiesBuilder.instance().getMchId());//微信支付分配的商户号
        params.put("nonce_str", CharUtil.getRandomString(16));//随机字符串，不长于32位。推荐随机数生成算法
        params.put("out_trade_no", out_trade_no);//商户传给微信的订单号
        params.put("out_refund_no", System.currentTimeMillis() + "");//商户系统内部的退款单号，商户系统内部唯一，同一退款单号多次请求只退一笔
        params.put("total_fee", Math.round(bdOrderMoney.multiply(Constant.ONE_HUNDRED).doubleValue()));//订单总金额，单位为分，只能为整数
        params.put("refund_fee", Math.round(bdRefundMoney.multiply(Constant.ONE_HUNDRED).doubleValue()));//退款总金额，订单总金额，单位为分，只能为整数
        params.put("op_user_id", CommonWxGlobalPayPropertiesBuilder.instance().getMchId());//操作员帐号, 默认为商户号
        params.put("notify_url", CommonWxGlobalPayPropertiesBuilder.instance().getRefundNotifyUrl());
        //签名前必须要参数全部写在前面
        params.put("sign", WechatUtil.arraySign(params, CommonWxGlobalPayPropertiesBuilder.instance().getPaySignKey()));//签名
        String mapToXml = MapUtils.convertMap2Xml(params);

        //请求微信
        String reponseXml = sendRefundSSLPostToWx(mapToXml, WechatConfig.getSslcsf());
        WechatGlobalRefundApiResult result =
                (WechatGlobalRefundApiResult) XmlUtil.xmlStrToBean(reponseXml, WechatGlobalRefundApiResult.class);
        result.setOut_refund_no((String) params.get("out_refund_no"));
        return result;
    }

    */
/**
     * 请求退款微信
     **//*

    public static String sendRefundSSLPostToWx(String mapToXml, SSLConnectionSocketFactory sslcsf) {
        logger.info("*******退款（WX Request：" + mapToXml);
        String xmlStr = WechatUtil.sendSSLPostToWx(mapToXml, sslcsf, CommonWxGlobalPayPropertiesBuilder.instance().getRefundUrl());
        logger.info("*******退款（WX Response：" + xmlStr);
        return xmlStr;
    }
    */
/**
     * 微信境外查询退款
     * @param
     * @return
     *//*

    public static WechatGlobalRefundQueryResult wxRefundquery(String out_trade_no) {
        Map<Object, Object> params = new HashMap<Object, Object>();
        params.put("appid", CommonWxGlobalPayPropertiesBuilder.instance().getAppId());//微信分配的公众账号ID（企业号corpid即为此appId）
        params.put("mch_id", CommonWxGlobalPayPropertiesBuilder.instance().getMchId());//微信支付分配的商户号
        params.put("nonce_str", CharUtil.getRandomString(16));//随机字符串，不长于32位。推荐随机数生成算法
        params.put("out_trade_no", out_trade_no);//商户侧传给微信的订单号
        //签名前必须要参数全部写在前面
        params.put("sign", WechatUtil.arraySign(params, CommonWxGlobalPayPropertiesBuilder.instance().getPaySignKey()));//签名
        String mapToXml = MapUtils.convertMap2Xml(params);
        String reponseXml = sendRefundQerutySSLPostToWx(mapToXml, WechatConfig.getSslcsf());
        System.out.println(reponseXml);
        WechatGlobalRefundQueryResult result =
                (WechatGlobalRefundQueryResult) XmlUtil.xmlStrToBean(reponseXml, WechatGlobalRefundQueryResult.class);
        result.setXmlStr(reponseXml);
        return result;
    }
    public static String sendRefundQerutySSLPostToWx(String mapToXml, SSLConnectionSocketFactory sslcsf) {
        logger.info("*******退款查询（WX Request：" + mapToXml);
        String xmlStr = WechatUtil.sendSSLPostToWx(mapToXml, sslcsf, CommonWxGlobalPayPropertiesBuilder.instance().getRefundqueryUrl());
        logger.info("*******退款查询（WX Response：" + xmlStr);
        return xmlStr;
    }

    public static void main(String[] args) throws Exception {
//        Map<Object, Object> parame = new TreeMap<Object, Object>();
//        parame.put("mch_id", "");//
//        String randomStr = CharUtil.getRandomNum(18).toUpperCase();
//        parame.put("nonce_str", randomStr);//
//        String sign = WechatUtil.arraySign(parame, "");
//        parame.put("sign", sign);// 数字签证
//
//        String xml = MapUtils.convertMap2Xml(parame);
//        logger.info("xml:" + xml);
//        Map<String, Object> resultUn = XmlUtil.xmlStrToMap(
//                WechatUtil.requestOnce("https://apitest.mch.weixin.qq.com/sandboxnew/pay/getsignkey", xml));
//        System.out.print(resultUn);
        System.out.println(Math.round(new BigDecimal("21.6366").multiply(Constant.ONE_HUNDRED).doubleValue()));
    }
}
*/
