huanghongfa
2021-09-02 177249c76aeea0b4bf8d8816d4994e3b445b45ce
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxPayUtils.java
@@ -1,61 +1,65 @@
package com.panzhihua.common.utlis;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.panzhihua.common.constants.PayCpmstant;
import lombok.extern.slf4j.Slf4j;
import org.json.XML;
import java.math.BigDecimal;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import org.json.XML;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.panzhihua.common.constants.PayCpmstant;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class WxPayUtils {
    public static String getUnifiedorder(String appid, String mchId, String payKey, String notifyUrl, String body, String openid, String outTradeNo, BigDecimal money){
    public static String getUnifiedorder(String appid, String mchId, String payKey, String notifyUrl, String body,
        String openid, String outTradeNo, BigDecimal money) {
        String nonceStr = PayUtil.makeUUID(32);
        SortedMap<Object, Object> params = new TreeMap<>();
        params.put("appid", appid);
        params.put("body", body);
        params.put("mch_id", mchId);
        params.put("nonce_str",nonceStr);
        params.put("nonce_str", nonceStr);
        params.put("notify_url", notifyUrl);
        params.put("openid", openid);
        params.put("out_trade_no", outTradeNo);//商品订单号
        params.put("spbill_create_ip", PayUtil.getLocalIp());//服务部署的ip
        params.put("total_fee", PayUtil.moneyToIntegerStr(money));//费用的参数转型
        params.put("trade_type", "JSAPI");//对接类型
        params.put("sign", PayUtil.createSign(PayCpmstant.DEFAULT_ENCODING, params, payKey));//MD5签名
        //转换成xml
        params.put("out_trade_no", outTradeNo);// 商品订单号
        params.put("spbill_create_ip", PayUtil.getLocalIp());// 服务部署的ip
        params.put("total_fee", PayUtil.moneyToIntegerStr(money));// 费用的参数转型
        params.put("trade_type", "JSAPI");// 对接类型
        params.put("sign", PayUtil.createSign(PayCpmstant.DEFAULT_ENCODING, params, payKey));// MD5签名
        // 转换成xml
        String xmlData = PayUtil.getRequestXml(params);
        //请求微信后台,获取支付id
        // 请求微信后台,获取支付id
        String resXml = HttpClientUtil.httpsRequest(PayCpmstant.UNIFIEDORDER_URL, xmlData);
        log.info("请求微信支付返回参数:" + resXml);
        org.json.JSONObject resultData = XML.toJSONObject(resXml);
        JSONObject data = JSON.parseObject(resultData.get("xml").toString());
        JSONObject result = new JSONObject();
        if(data.get("return_msg").equals(PayCpmstant.RETURN_MSG) && data.get("return_code").equals(PayCpmstant.RETURN_CODE)){
            //将微信统一下单成功的参数拼接再签名
            //统一下单返回prepay_id
        if (data.get("return_msg").equals(PayCpmstant.RETURN_MSG)
            && data.get("return_code").equals(PayCpmstant.RETURN_CODE)) {
            // 将微信统一下单成功的参数拼接再签名
            // 统一下单返回prepay_id
            String prepayId = "prepay_id=" + data.getString("prepay_id");
            //时间戳
            Long timeStamp = System.currentTimeMillis()/1000;
            //封装需要签名的字段
            // 时间戳
            Long timeStamp = System.currentTimeMillis() / 1000;
            // 封装需要签名的字段
            SortedMap<Object, Object> payParams = new TreeMap<>();
            payParams.put("appId", appid);
            payParams.put("nonceStr",nonceStr);
            payParams.put("package",prepayId);
            payParams.put("signType",PayCpmstant.SIGN_TYPE);
            payParams.put("timeStamp",timeStamp);
            //将参数以及签名计算完成封装返回给前端
            result.put("timeStamp",timeStamp);
            result.put("nonceStr",nonceStr);
            result.put("package",prepayId);
            result.put("signType",PayCpmstant.SIGN_TYPE);
            result.put("paySign",PayUtil.createSign(PayCpmstant.DEFAULT_ENCODING, payParams, payKey));
            payParams.put("nonceStr", nonceStr);
            payParams.put("package", prepayId);
            payParams.put("signType", PayCpmstant.SIGN_TYPE);
            payParams.put("timeStamp", timeStamp);
            // 将参数以及签名计算完成封装返回给前端
            result.put("timeStamp", timeStamp);
            result.put("nonceStr", nonceStr);
            result.put("package", prepayId);
            result.put("signType", PayCpmstant.SIGN_TYPE);
            result.put("paySign", PayUtil.createSign(PayCpmstant.DEFAULT_ENCODING, payParams, payKey));
        }
        return result.toJSONString();
    }
@@ -72,8 +76,5 @@
        parameters.put("paySign", sign);
        return parameters;
    }
}