package com.kmall.common.utils.wechat;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
import com.kmall.common.service.pay.wxpay.CommonWxPayPropertiesBuilder;
import com.kmall.common.utils.*;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.MathContext;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
/**
*
Title: 微信退款工具类
* Description: 微信退款工具类,通过充值客户端的不同初始化不同的工具类,得到相应微信退款相关的appid和muchid
*
* @author xubo
* @date 2017年6月6日 下午5:05:03
*/
public class WechatUtil {
private static Log logger = LogFactory.getLog(WechatUtil.class);
/**
* 充值客户端类型--微信公众号
*/
public static Integer CLIENTTYPE_WX = 2;
/**
* 充值客户端类型--app
*/
public static Integer CLIENTTYPE_APP = 1;
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;
}
}
/**
* 方法描述:微信退款逻辑
* 创建时间:2017年4月12日 上午11:04:25
* 作者: xubo
*
* @param
* @return
*/
public static WechatRefundApiResult 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