| | |
| | | package com.panzhihua.common.utlis; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.Map; |
| | | import java.util.SortedMap; |
| | | import java.util.TreeMap; |
| | | |
| | | import com.panzhihua.common.utlis.wx.WXPayUtil; |
| | | import org.json.XML; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | |
| | | public class WxPayUtils { |
| | | |
| | | public static String getUnifiedorder(String appid, String mchId, String payKey, String notifyUrl, String body, |
| | | String openid, String outTradeNo, BigDecimal money) { |
| | | String openid, String outTradeNo, BigDecimal money,String attach) { |
| | | String nonceStr = PayUtil.makeUUID(32); |
| | | SortedMap<Object, Object> params = new TreeMap<>(); |
| | | params.put("appid", appid); |
| | |
| | | params.put("nonce_str", nonceStr); |
| | | params.put("notify_url", notifyUrl); |
| | | params.put("openid", openid); |
| | | //附加数据 |
| | | if(StringUtils.isNotEmpty(attach)){ |
| | | params.put("attach", attach); |
| | | } |
| | | params.put("out_trade_no", outTradeNo);// 商品订单号 |
| | | params.put("spbill_create_ip", PayUtil.getLocalIp());// 服务部署的ip |
| | | params.put("total_fee", PayUtil.moneyToIntegerStr(money));// 费用的参数转型 |
| | |
| | | return parameters; |
| | | } |
| | | public static String h5pay(String appid, String mchId, String payKey, String notifyUrl, String body, |
| | | String openid, String outTradeNo, BigDecimal money, String tradeType) { |
| | | String openid, String outTradeNo, BigDecimal money, String tradeType, String clientIp) { |
| | | String nonceStr = PayUtil.makeUUID(32); |
| | | SortedMap<Object, Object> params = new TreeMap<>(); |
| | | params.put("appid", appid); |
| | |
| | | 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("spbill_create_ip", clientIp);// 用户真实ip |
| | | params.put("total_fee", PayUtil.moneyToIntegerStr(money));// 费用的参数转型 |
| | | params.put("trade_type", tradeType);// 对接类型 |
| | | params.put("sign", PayUtil.createSign(PayCpmstant.DEFAULT_ENCODING, params, payKey));// MD5签名 |
| | |
| | | result.put("package", prepayId); |
| | | result.put("signType", PayCpmstant.SIGN_TYPE); |
| | | result.put("paySign", PayUtil.createSign(PayCpmstant.DEFAULT_ENCODING, payParams, payKey)); |
| | | } |
| | | else if(tradeType.equals("NATIVE")){ |
| | | result.put("codeUrl",data.getString("code_url")); |
| | | } |
| | | } |
| | | else if(tradeType.equals("NATIVE")) { |
| | | result.put("codeUrl",data.getString("code_url")); |
| | | } else if(tradeType.equals("MWEB")) { |
| | | result.put("mWebUrl",data.getString("mweb_url")); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | return result.toJSONString(); |
| | | } |
| | | |
| | | public static String refund(String appid,String mchId,String orderNo,BigDecimal totalFee,BigDecimal refundFee,String refundNo,Boolean isTest) throws Exception { |
| | | //创建请求地址 |
| | | String url = PayCpmstant.REFUND_URL; |
| | | Map<String, String> paramMap = new LinkedHashMap<>(); |
| | | paramMap.put("appid",appid); |
| | | paramMap.put("mch_id",mchId); |
| | | paramMap.put("nonce_str", WXPayUtil.generateNonceStr()); |
| | | paramMap.put("out_refund_no",refundNo); |
| | | paramMap.put("out_trade_no",orderNo); |
| | | paramMap.put("refund_fee",String.valueOf(refundFee.multiply(BigDecimal.valueOf(100)).longValue())); |
| | | paramMap.put("total_fee",String.valueOf(totalFee.multiply(BigDecimal.valueOf(100)).longValue())); |
| | | paramMap.put("sign",WXPayUtil.generateSignature(paramMap,PayCpmstant.REFUND_KEY)); |
| | | log.info("微信退款请求参数:{},{},{},{}",url,WXPayUtil.mapToXml(paramMap),mchId,isTest); |
| | | //接收请求返回值 |
| | | return HttpClientUtil.doRefund(url,WXPayUtil.mapToXml(paramMap),mchId,isTest); |
| | | |
| | | } |
| | | } |