From 8392493854d03fbcc8df911c3f5e7b1430579853 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Tue, 23 Aug 2022 17:24:40 +0800 Subject: [PATCH] 20220822 --- src/main/java/cc/mrbird/febs/pay/util/HttpRespons.java | 181 +++++++++++++++ src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java | 134 +++++++++++ src/main/java/cc/mrbird/febs/pay/service/UnipayService.java | 10 src/test/java/cc/mrbird/febs/ProfitTest.java | 17 + src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 46 +++ src/main/java/cc/mrbird/febs/pay/model/UnipayDto.java | 29 ++ pom.xml | 6 src/main/java/cc/mrbird/febs/pay/util/HttpRequester.java | 204 +++++++++++++++++ src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java | 36 +- 9 files changed, 643 insertions(+), 20 deletions(-) diff --git a/pom.xml b/pom.xml index cef71ae..2b6819d 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,12 @@ <dependencies> <dependency> + <groupId>commons-httpclient</groupId> + <artifactId>commons-httpclient</artifactId> + <version>3.0</version> + </dependency> + + <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>${aliyun-oss.version}</version> diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java index baf7cbb..1deb5c2 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java @@ -1,5 +1,6 @@ package cc.mrbird.febs.mall.service.impl; +import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.*; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.AppContants; @@ -16,18 +17,23 @@ import cc.mrbird.febs.mall.vo.OrderDetailVo; import cc.mrbird.febs.mall.vo.OrderListVo; import cc.mrbird.febs.mall.vo.OrderRefundVo; +import cc.mrbird.febs.pay.model.UnipayDto; import cc.mrbird.febs.pay.service.IPayService; +import cc.mrbird.febs.pay.service.UnipayService; import cc.mrbird.febs.rabbit.producter.AgentProducer; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -61,6 +67,7 @@ private final AgentProducer agentProducer; private final IPayService payService; private final IMallAchieveService mallAchieveService; + private final UnipayService unipayService; @Override @Transactional(rollbackFor = Exception.class) @@ -198,6 +205,13 @@ this.baseMapper.updateById(orderInfo); } + public static void main(String[] args) { + String unipayStr = "{\"r1_MerchantNo\":\"888118000001971\",\"rd_Pic\":\"\",\"r6_FrpCode\":\"ALIPAY_H5\",\"r7_TrxNo\":\"100222082332490699\",\"r0_Version\":\"1.0\",\"r3_Amount\":\"0.01\",\"r4_Cur\":\"1\",\"r2_OrderNo\":\"2022082212510288174\",\"rb_CodeMsg\":\"\",\"hmac\":\"1659BB77DEDDF9956EA4D6DF227C3B14\",\"ra_Code\":100,\"rc_Result\":\"<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><title></title></head><body><script type='text/javascript'>location.href='https://qr.alipay.com/bax019737vbdwoisxcdp00a2';</script></body></html>\"}"; + JSONObject jsonObject = JSONUtil.parseObj(unipayStr); + String r7_trxNo = (String) jsonObject.get("r7_TrxNo"); + System.out.println(r7_trxNo); + } + @Override @Transactional(rollbackFor = Exception.class) public Map<String, Object> payOrder(PayOrderDto payOrderDto) { @@ -212,6 +226,7 @@ } String payResultStr = ""; + String rcResult = ""; switch (payOrderDto.getType()) { case "1": // orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo()); @@ -220,12 +235,32 @@ agentProducer.sendOrderReturn(orderInfo.getId()); break; case "2": - if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) { - payResultStr = orderInfo.getPayOrderNo(); - } else { - payResultStr = payService.aliPay(orderInfo); +// if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) { +// payResultStr = orderInfo.getPayOrderNo(); +// } else { +// payResultStr = payService.aliPay(orderInfo); +// } + UnipayDto unipayDto = new UnipayDto(); +// unipayDto.setAmount(new BigDecimal("0.01")); + unipayDto.setAmount(orderInfo.getAmount()); + unipayDto.setFrpCode("ALIPAY_H5"); + unipayDto.setTradeMerchantNo("777180800385820"); + unipayDto.setOrderNo(orderInfo.getOrderNo()); + List<MallOrderItem> items = orderInfo.getItems(); + if(CollUtil.isEmpty(items)){ + unipayDto.setProductName("商品"); + }else{ + unipayDto.setProductName(items.get(0).getGoodsName()); } - + String unipayStr = unipayService.unipay(unipayDto); + if("fail" == unipayStr){ + throw new FebsException("支付失败"); + }else{ + JSONUtil.parseObj(unipayStr); + JSONObject jsonObject = JSONUtil.parseObj(unipayStr); + payResultStr = (String) jsonObject.get("r7_TrxNo"); + rcResult = (String) jsonObject.get("rc_Result"); + } orderInfo.setPayOrderNo(payResultStr); orderInfo.setPayMethod("支付宝支付"); agentProducer.sendOrderReturn(orderInfo.getId()); @@ -303,6 +338,7 @@ map.put("orderInfo", payResultStr); map.put("orderNo", orderInfo.getOrderNo()); map.put("orderId", orderInfo.getId()); + map.put("rcResult", rcResult); return map; } diff --git a/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java b/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java index 5d9a08d..af48ea8 100644 --- a/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java +++ b/src/main/java/cc/mrbird/febs/pay/controller/UnipayController.java @@ -9,6 +9,7 @@ import cc.mrbird.febs.pay.model.UniPayCallBackDto; import cc.mrbird.febs.rabbit.producter.AgentProducer; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; @@ -51,22 +52,27 @@ log.info("进入汇聚支付回调"+orderNo+";"+orderAmount+";"+payTradeNo+";"+callBackState); if("100".equals(callBackState) && StrUtil.isNotBlank(orderNo)){ MallOrderInfo orderInfo = orderInfoMapper.selectByOrderNo(orderNo); - BigDecimal amount = orderInfo.getAmount(); -// if(amount.compareTo(orderAmount) == 0){ - MallMember member = memberService.getById(orderInfo.getMemberId()); - if (AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())) { - member.setLevel(AgentLevelEnum.FIRST_LEVEL.name()); - memberService.updateById(member); + if(ObjectUtil.isNotEmpty(orderInfo)){ + Integer status = orderInfo.getStatus(); + if(OrderStatusEnum.WAIT_PAY.getValue() == status){ +// BigDecimal amount = orderInfo.getAmount(); +// if(amount.compareTo(orderAmount) == 0){ + MallMember member = memberService.getById(orderInfo.getMemberId()); + if (AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())) { + member.setLevel(AgentLevelEnum.FIRST_LEVEL.name()); + memberService.updateById(member); + } + + orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); + orderInfo.setPayResult("1"); + orderInfo.setPayTime(new Date()); + orderInfo.setPayTradeNo(payTradeNo); + orderInfoMapper.updateById(orderInfo); + + agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId()); +// } } - - orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); - orderInfo.setPayResult("1"); - orderInfo.setPayTime(new Date()); - orderInfo.setPayTradeNo(payTradeNo); - orderInfoMapper.updateById(orderInfo); - - agentProducer.sendAutoLevelUpMsg(orderInfo.getMemberId()); -// } + } } return "success"; } diff --git a/src/main/java/cc/mrbird/febs/pay/model/UnipayDto.java b/src/main/java/cc/mrbird/febs/pay/model/UnipayDto.java new file mode 100644 index 0000000..d6bbfa6 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/pay/model/UnipayDto.java @@ -0,0 +1,29 @@ +package cc.mrbird.febs.pay.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.math.BigDecimal; + +@Data +@ApiModel(value = "UnipayDto", description = "汇聚支付接收参数类") +public class UnipayDto { + + @ApiModelProperty(value = "订单编号", example = "123") + private String orderNo; + + @ApiModelProperty(value = "订单金额", example = "123") + private BigDecimal amount; + + @ApiModelProperty(value = "商品名称", example = "123") + private String productName; + + @ApiModelProperty(value = "交易类型", example = "123") + private String frpCode; + + @ApiModelProperty(value = "报备商户号", example = "123") + private String tradeMerchantNo; + +} diff --git a/src/main/java/cc/mrbird/febs/pay/service/UnipayService.java b/src/main/java/cc/mrbird/febs/pay/service/UnipayService.java new file mode 100644 index 0000000..0069323 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/pay/service/UnipayService.java @@ -0,0 +1,10 @@ +package cc.mrbird.febs.pay.service; + +import cc.mrbird.febs.pay.model.UnipayDto; +import com.sun.org.apache.xpath.internal.operations.Bool; + +public interface UnipayService { + + String unipay(UnipayDto unipayDto); + +} diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java new file mode 100644 index 0000000..0aad1b6 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/pay/service/impl/UnipayServiceImpl.java @@ -0,0 +1,134 @@ +package cc.mrbird.febs.pay.service.impl; + +import cc.mrbird.febs.common.entity.FebsResponse; +import cc.mrbird.febs.pay.model.UnipayDto; +import cc.mrbird.febs.pay.service.UnipayService; +import cc.mrbird.febs.pay.util.HttpRequester; +import cc.mrbird.febs.pay.util.HttpRespons; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.digest.DigestUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.IOException; +import java.util.*; + +@Slf4j +@Service +public class UnipayServiceImpl implements UnipayService { + + public static final String notifyUrl = "http://47.111.90.145:8800/api/unipay/unipayCallBack"; + + @Override + @Transactional + public String unipay(UnipayDto unipayDto) { + String key = "2e95f6a3e11e47fa8a4386d6aefe1735";/** md5密钥商户后台-商户中心-商户设置-密钥管理获取 必填!*/ + Map<String, String> map = new HashMap<String, String>(); + map.put("p0_Version", "1.0");/** 版本号 */ + map.put("p1_MerchantNo", "888118000001971");/** 商户编号 */ + map.put("p2_OrderNo", unipayDto.getOrderNo()); /**商户订单号*/ + map.put("p3_Amount", unipayDto.getAmount().toString());/**订单金额*/ + map.put("p4_Cur", "1"); /**交易币种 */ + map.put("p5_ProductName", unipayDto.getProductName()); /** 商品名称 */ + map.put("p9_NotifyUrl", notifyUrl); /** 服务器异步通知地址 */ + map.put("q1_FrpCode", unipayDto.getFrpCode()); /** 交易类型*/ + map.put("qa_TradeMerchantNo",unipayDto.getTradeMerchantNo()); /** 777开头的报备商户号 必填!*/ + map.put("q7_AppId", "wx42ce0fbc27965fe9"); /** 777开头的报备商户号 必填!*/ + + String Strmap = createLinkStringByGet(map); + // 签名 + String sign = ""; + sign = SignByMD5(Strmap, key); + map.put("hmac", sign);/** 签名数据 */ + System.out.println("发送:" + JSON.toJSONString(map).toString()); + + // post请求参数内容 + HttpRequester hr = new HttpRequester(); + HttpRespons HP = null; + try { + HP = hr.sendPost("https://www.joinpay.com/trade/uniPayApi.action", map); + } catch (IOException e) { + e.printStackTrace(); + } + System.out.println("接收返回参数:" + HP.getContent()); + Boolean result = false; + try { + result = nosign(HP.getContent(), key); + } catch (Exception e) { + e.printStackTrace(); + } + if(result){ + return HP.getContent(); + }else{ + return "fail"; + } + } + + + //参数的拼接整理 + private String createLinkStringByGet(Map<String, String> params){ + // TODO Auto-generated method stub + List<String> keys = new ArrayList<String>(params.keySet()); + Collections.sort(keys); + String str1 =""; + for(int i=0;i<keys.size();i++) { + String key = keys.get(i); + + Object value = params.get(key);//(String) 强制类型转换 + if(value instanceof Integer) { + value = (Integer)value; + } + if(i==keys.size()-1) { + + str1 = str1+value.toString(); + }else { + + str1 = str1+value; + } + } + System.out.println("整理"+str1); + return str1; + } + + /** + * MD5签名 + * + * @param requestSign 请求签名串 + * @param merchantKey 商户秘钥 + */ + private String SignByMD5(String requestSign, String merchantKey) { + + String reqHmac = ""; + try { + reqHmac = DigestUtils.md5Hex(requestSign + merchantKey).toUpperCase(); + } catch (Exception e) {} + + return reqHmac; + } + + /** + * 验证返回参数 + * @param hp + * @param key + * @return + * @throws Exception + */ + private boolean nosign(String hp, String key){ + System.out.println("接收到:" + hp); + JSONObject myJson = JSONObject.parseObject(hp); + Map m = myJson; + + // 返回hmac + String returnHmac = (String) m.remove("hmac"); + System.out.println(m.toString()); + String Strmap = createLinkStringByGet(m); + + // 返回参数组装hmac + String hmac1 = SignByMD5(Strmap, key); + return hmac1.equalsIgnoreCase(returnHmac); + + } + +} diff --git a/src/main/java/cc/mrbird/febs/pay/util/HttpRequester.java b/src/main/java/cc/mrbird/febs/pay/util/HttpRequester.java new file mode 100644 index 0000000..4356812 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/pay/util/HttpRequester.java @@ -0,0 +1,204 @@ +package cc.mrbird.febs.pay.util; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.Charset; +import java.util.Map; +import java.util.Vector; + +public class HttpRequester { + private String defaultContentEncoding; + + public HttpRequester() { + this.defaultContentEncoding = Charset.defaultCharset().name(); + } + + /** + * 发送POST请求 + * + * @param urlString + * URL地址 + * @return 响应对象 + * @throws IOException + */ + public HttpRespons sendPost(String urlString) throws IOException { + return this.send(urlString, "POST", null, null); + } + + /** + * 发送POST请求 + * + * @param urlString + * URL地址 + * @param params + * 参数集合 + * @return 响应对象 + * @throws IOException + */ + public HttpRespons sendPost(String urlString, Map<String, String> params) + throws IOException { + + for(String key : params.keySet()) { + if(params.get(key)!=null&&!"".equals(params.get(key))) { + params.put(key, (String)URLEncoder.encode(params.get(key),"utf-8")) ;//(String) 强制类型转换 + } + } + + + + return this.send(urlString, "POST", params, null); + } + + /** + * 发送POST请求 + * + * @param urlString + * URL地址 + * @param params + * 参数集合 + * @param propertys + * 请求属性 + * @return 响应对象 + * @throws IOException + */ + public HttpRespons sendPost(String urlString, Map<String, String> params, + Map<String, String> propertys) throws IOException { + return this.send(urlString, "POST", params, propertys); + } + + /** + * 发送HTTP请求 + * + * @param urlString + * @return 响映对象 + * @throws IOException + */ + private HttpRespons send(String urlString, String method, + Map<String, String> parameters, Map<String, String> propertys) + throws IOException { + HttpURLConnection urlConnection = null; + + if (method.equalsIgnoreCase("GET") && parameters != null) { + StringBuffer param = new StringBuffer(); + int i = 0; + for (String key : parameters.keySet()) { + if (i == 0) + param.append("?"); + else + param.append("&"); + param.append(key).append("=").append(parameters.get(key)); + i++; + } + urlString += param; + } + URL url = new URL(urlString); + urlConnection = (HttpURLConnection) url.openConnection(); + + urlConnection.setRequestMethod(method); + urlConnection.setDoOutput(true); + urlConnection.setDoInput(true); + urlConnection.setUseCaches(false); + + if (propertys != null) + for (String key : propertys.keySet()) { + urlConnection.addRequestProperty(key, propertys.get(key)); + } + + if (method.equalsIgnoreCase("POST") && parameters != null) { + StringBuffer param = new StringBuffer(); + for (String key : parameters.keySet()) { + param.append("&"); + param.append(key).append("=").append(parameters.get(key)); + } + urlConnection.getOutputStream().write(param.toString().getBytes()); + urlConnection.getOutputStream().flush(); + urlConnection.getOutputStream().close(); + } + + return this.makeContent(urlString, urlConnection); + } + + /** + * 得到响应对象 + * + * @param urlConnection + * @return 响应对象 + * @throws IOException + */ + private HttpRespons makeContent(String urlString, + HttpURLConnection urlConnection) throws IOException { + HttpRespons httpResponser = new HttpRespons(); + try { + InputStream in = urlConnection.getInputStream(); + BufferedReader bufferedReader = new BufferedReader( + new InputStreamReader(in)); + httpResponser.contentCollection = new Vector<String>(); + StringBuffer temp = new StringBuffer(); + String line = bufferedReader.readLine(); + while (line != null) { + httpResponser.contentCollection.add(line); + temp.append(line).append("\r\n"); + line = bufferedReader.readLine(); + } + bufferedReader.close(); + + String ecod = urlConnection.getContentEncoding(); + if (ecod == null) + ecod = this.defaultContentEncoding; + + httpResponser.urlString = urlString; + + httpResponser.defaultPort = urlConnection.getURL().getDefaultPort(); + httpResponser.file = urlConnection.getURL().getFile(); + httpResponser.host = urlConnection.getURL().getHost(); + httpResponser.path = urlConnection.getURL().getPath(); + httpResponser.port = urlConnection.getURL().getPort(); + httpResponser.protocol = urlConnection.getURL().getProtocol(); + httpResponser.query = urlConnection.getURL().getQuery(); + httpResponser.ref = urlConnection.getURL().getRef(); + httpResponser.userInfo = urlConnection.getURL().getUserInfo(); + + httpResponser.content = new String(temp.toString().getBytes(), ecod); + httpResponser.contentEncoding = ecod; + httpResponser.code = urlConnection.getResponseCode(); + httpResponser.message = urlConnection.getResponseMessage(); + httpResponser.contentType = urlConnection.getContentType(); + httpResponser.method = urlConnection.getRequestMethod(); + httpResponser.connectTimeout = urlConnection.getConnectTimeout(); + httpResponser.readTimeout = urlConnection.getReadTimeout(); + + return httpResponser; + } catch (IOException e) { + throw e; + } finally { + if (urlConnection != null) + urlConnection.disconnect(); + } + } + + /** + * 默认的响应字符集 + */ + public String getDefaultContentEncoding() { + return this.defaultContentEncoding; + } + + /** + * 设置默认的响应字符集 + */ + public void setDefaultContentEncoding(String defaultContentEncoding) { + this.defaultContentEncoding = defaultContentEncoding; + } + +} + + + + + + diff --git a/src/main/java/cc/mrbird/febs/pay/util/HttpRespons.java b/src/main/java/cc/mrbird/febs/pay/util/HttpRespons.java new file mode 100644 index 0000000..c028768 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/pay/util/HttpRespons.java @@ -0,0 +1,181 @@ +package cc.mrbird.febs.pay.util; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.methods.InputStreamRequestEntity; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.RequestEntity; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Vector; + + +public class HttpRespons { + String urlString; + + int defaultPort; + + String file; + + String host; + + String path; + + int port; + + String protocol; + + String query; + + String ref; + + String userInfo; + + String contentEncoding; + + String content; + + String contentType; + + int code; + + String message; + + String method; + + int connectTimeout; + + int readTimeout; + + Vector<String> contentCollection; + + public String getContent() { + return content; + } + + public String getContentType() { + return contentType; + } + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + + public Vector<String> getContentCollection() { + return contentCollection; + } + + public String getContentEncoding() { + return contentEncoding; + } + + public String getMethod() { + return method; + } + + public int getConnectTimeout() { + return connectTimeout; + } + + public int getReadTimeout() { + return readTimeout; + } + + public String getUrlString() { + return urlString; + } + + public int getDefaultPort() { + return defaultPort; + } + + public String getFile() { + return file; + } + + public String getHost() { + return host; + } + + public String getPath() { + return path; + } + + public int getPort() { + return port; + } + + public String getProtocol() { + return protocol; + } + + public String getQuery() { + return query; + } + + public String getRef() { + return ref; + } + + public String getUserInfo() { + return userInfo; + } + + + public static String post(String params,String requestUrl) throws IOException { + // TODO Auto-generated method stub +// try { + //HttpRequester request = new HttpRequester(); + // request.setDefaultContentEncoding("utf-8"); + byte[] requestBytes = params.getBytes("utf-8"); // 将参数转为二进制流 + HttpClient httpClient = new HttpClient(); // 客户端实例化 + PostMethod postMethod = new PostMethod(requestUrl); + //设置请求头Authorization +// postMethod.setRequestHeader("Authorization", "Basic " + authorization); + // 设置请求头 Content-Type + postMethod.setRequestHeader("Content-Type", "application/json"); + InputStream inputStream = new ByteArrayInputStream(requestBytes, 0,requestBytes.length); + RequestEntity requestEntity = new InputStreamRequestEntity(inputStream, + requestBytes.length, "application/json; charset=utf-8"); // 请求体 + postMethod.setRequestEntity(requestEntity); + httpClient.executeMethod(postMethod);// 执行请求 + InputStream soapResponseStream = postMethod.getResponseBodyAsStream();// 获取返回的流 + byte[] datas = null; + try { + datas = readInputStream(soapResponseStream);// 从输入流中读取数据 + } catch (Exception e) { + e.printStackTrace(); + } + String result = new String(datas, "UTF-8");// 将二进制流转为String + // 打印返回结果 + // System.out.println(result); + + return result; + } + + + /** + * 从输入流中读取数据 + * + * @param inStream + * @return + * @throws Exception + */ + public static byte[] readInputStream(InputStream inStream) throws Exception { + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int len = 0; + while ((len = inStream.read(buffer)) != -1) { + outStream.write(buffer, 0, len); + } + byte[] data = outStream.toByteArray(); + outStream.close(); + inStream.close(); + return data; + } +} diff --git a/src/test/java/cc/mrbird/febs/ProfitTest.java b/src/test/java/cc/mrbird/febs/ProfitTest.java index 21a7b3d..816d535 100644 --- a/src/test/java/cc/mrbird/febs/ProfitTest.java +++ b/src/test/java/cc/mrbird/febs/ProfitTest.java @@ -7,6 +7,8 @@ import cc.mrbird.febs.mall.service.IAgentService; import cc.mrbird.febs.mall.service.IMallAchieveService; import cc.mrbird.febs.mall.service.IMemberProfitService; +import cc.mrbird.febs.pay.model.UnipayDto; +import cc.mrbird.febs.pay.service.UnipayService; import cc.mrbird.febs.rabbit.consumer.AgentConsumer; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -113,4 +115,19 @@ mallAchieveService.add(83L); } + + + @Autowired + private UnipayService unipayService; + @Test + public void unipay(){ + UnipayDto unipayDto = new UnipayDto(); + unipayDto.setAmount(new BigDecimal("0.01")); + unipayDto.setFrpCode("ALIPAY_H5"); + unipayDto.setTradeMerchantNo("777180800385820"); +// unipayDto.setFrpCode("WEIXIN_APP3"); + unipayDto.setOrderNo("2022082316415386395"); + unipayDto.setProductName("洗护套装"); + unipayService.unipay(unipayDto); + } } -- Gitblit v1.9.1