huanghongfa
2021-04-20 3887287e4c11d32049f910dcce13a6b1e1e40cab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.panzhihua.common.utlis;
 
import com.alibaba.fastjson.JSONObject;
import com.panzhihua.common.constants.PayCpmstant;
 
import java.math.BigDecimal;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
 
public class WxPayUtils {
 
    public static String getUnifiedorder(String body, String openid, String outTradeNo, BigDecimal money) throws Exception{
        String nonceStr = PayUtil.makeUUID(32);
        SortedMap<Object, Object> params = new TreeMap<>();
        params.put("appid", "wx0cef797390444b75");
        params.put("body", body);
        params.put("mch_id", "1608439275");
        params.put("nonce_str",nonceStr);
        params.put("notify_url", "http://387405oo37.zicp.vip/api/applets/wx/notify");
        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("UTF-8", params, "01A9CB2234D7CBD0AC61B75EB1263805"));//MD5签名
        //转换成xml
        String xmlData = PayUtil.getRequestXml(params);
        //请求微信后台,获取支付id
        String resXml = HttpClientUtil.httpsRequest(PayCpmstant.UNIFIEDORDER_URL, xmlData);
        System.out.println(resXml);
 
        JSONObject data = XMLUtils.xml2Json(resXml);
        JSONObject result = new JSONObject();
        if(data.get("return_msg").equals("OK")){
            //将微信统一下单成功的参数拼接再签名
            //统一下单返回prepay_id
            String prepay_id = "prepay_id=" + data.getString("prepay_id");
            //时间戳
            Long timeStamp = System.currentTimeMillis()/1000;
            //封装需要签名的字段
            SortedMap<Object, Object> payParams = new TreeMap<>();
            params.put("appid", "wx0cef797390444b75");
            params.put("nonce_str",nonceStr);
            params.put("package",nonceStr);
            params.put("signType",nonceStr);
            params.put("timeStamp",nonceStr);
            //将参数以及签名计算完成封装返回给前端
            result.put("timeStamp",timeStamp);
            result.put("nonceStr",nonceStr);
            result.put("package",prepay_id);
            result.put("signType","MD5");
            result.put("paySign",PayUtil.createSign("UTF-8", payParams, "01A9CB2234D7CBD0AC61B75EB1263805"));
        }
        return result.toJSONString();
    }
 
    public static SortedMap<Object, Object> prepayId(Map<String, String> map) {
        SortedMap<Object, Object> parameters = new TreeMap<>();
        parameters.put("appId", "");
        parameters.put("timeStamp", PayUtil.create_timestamp());
        parameters.put("nonceStr", map.get("nonce_str"));
        parameters.put("package", "prepay_id=" + map.get("prepay_id"));
        parameters.put("signType", "MD5");
        String sign = PayUtil.createSign("UTF-8", parameters, "商户秘钥");
        parameters.put("prepay_id", "prepay_id=" + map.get("prepay_id"));
        parameters.put("paySign", sign);
        return parameters;
    }
 
 
 
 
}