中山模板自助建站_一级消防工程师考试内容_怎么投诉做网站的公司_设计风格好看的网站

郑州发布会最新消息

天津装饰公司排行榜前十位有哪些、抖音小程序广告怎么跳过、永久使用、不限域名、南京网站设计网站建设

服装品牌策划公司?

中山模板自助建站_一级消防工程师考试内容_怎么投诉做网站的公司_设计风格好看的网站

public class PayController {@Resourceprivate WechatPayConfig wechatPayConfig;@Resourceprivate WechatPayRequest wechatPayRequest;/*** 无需应答签名*/@Resourceprivate CloseableHttpClient wxPayNoSignClient;@ApiOperation(value = "根据订单号查询订单-统一接口", notes = "根据订单号查询订单-统一接口")@ApiOperationSupport(order = 15)@GetMapping("/transactions/{orderNo}")public Map<String, Object> transactionsByOrderNo(@PathVariable("orderNo") String orderNo) {// TODO 如果是扫码支付时,该接口就很有必要,应该前端通过轮询的方式请求该接口查询订单是否支付成功log.info("根据订单号查询订单,订单号: {}", orderNo);String url = wechatPayConfig.getBaseUrl().concat(WechatPayUrlEnum.ORDER_QUERY_BY_NO.getType().concat(orderNo)).concat("?mchid=").concat(wechatPayConfig.getMchId());String res = wechatPayRequest.wechatHttpGet(url);log.info("查询订单结果:{}",res);Map<String, Object> resMap = JSONObject.parseObject(res, new TypeReference<Map<String, Object>>(){});String outTradeNo = resMap.get("out_trade_no").toString();String appId = resMap.get("appid").toString();String mchId = resMap.get("mchid").toString();/*** 交易状态,枚举值:* SUCCESS:支付成功* REFUND:转入退款* NOTPAY:未支付* CLOSED:已关闭* REVOKED:已撤销(仅付款码支付会返回)* USERPAYING:用户支付中(仅付款码支付会返回)* PAYERROR:支付失败(仅付款码支付会返回)*/String tradeState = resMap.get("trade_state").toString();log.info("outTradeNo:"+outTradeNo);log.info("appId:"+appId);log.info("mchId:"+mchId);log.info("tradeState:"+tradeState);return resMap;}/*** 关闭(取消)订单* @param orderNo* @return*/@ApiOperation(value = "关闭(取消)订单-统一接口", notes = "关闭(取消)订单-统一接口")@ApiOperationSupport(order = 20)@PostMapping("/closeOrder/{orderNo}")public void closeOrder(@PathVariable("orderNo") String orderNo) {// TODO 用于在客户下单后,不进行支付,取消订单的场景log.info("根据订单号取消订单,订单号: {}", orderNo);String url = String.format(WechatPayUrlEnum.CLOSE_ORDER_BY_NO.getType(), orderNo);url = wechatPayConfig.getBaseUrl().concat(url);// 设置参数Map<String, String> params = new HashMap<>(2);params.put("mchid", wechatPayConfig.getMchId());String paramsStr = JSON.toJSONString(params);log.info("请求参数 ===> {}" + paramsStr);String res = wechatPayRequest.wechatHttpPost(url,paramsStr);}/*** 申请退款* @param orderNo*/@ApiOperation(value = "申请退款-统一接口", notes = "申请退款-统一接口")@ApiOperationSupport(order = 25)@PostMapping("/refundOrder/{orderNo}")public void refundOrder(@PathVariable("orderNo") String orderNo) {log.info("根据订单号申请退款,订单号: {}", orderNo);String url = wechatPayConfig.getBaseUrl().concat(WechatPayUrlEnum.DOMESTIC_REFUNDS.getType());// 设置参数Map<String, Object> params = new HashMap<>(2);// 订单编号params.put("out_trade_no", orderNo);// 退款单编号 - 自定义int outRefundNo = new Random().nextInt(999999999);log.info("退款申请号:{}",outRefundNo);params.put("out_refund_no",outRefundNo+"");// 退款原因params.put("reason","申请退款");// 退款通知回调地址params.put("notify_url", wechatPayConfig.getRefundNotifyUrl());Map<String, Object> amountMap =new HashMap<>();//退款金额,单位:分amountMap.put("refund", 1);//原订单金额,单位:分amountMap.put("total", 1);//退款币种amountMap.put("currency", "CNY");params.put("amount", amountMap);String paramsStr = JSON.toJSONString(params);log.info("请求参数 ===> {}" + paramsStr);String res = wechatPayRequest.wechatHttpPost(url,paramsStr);log.info("退款结果:{}",res);}/*** 查询单笔退款信息* @param refundNo* @return*/@ApiOperation(value = "查询单笔退款信息-统一接口", notes = "查询单笔退款信息-统一接口")@ApiOperationSupport(order = 30)@GetMapping("/queryRefundOrder/{refundNo}")public Map<String, Object> queryRefundOrder(@PathVariable("refundNo") String refundNo) {log.info("根据订单号查询退款订单,订单号: {}", refundNo);String url = wechatPayConfig.getBaseUrl().concat(WechatPayUrlEnum.DOMESTIC_REFUNDS_QUERY.getType().concat(refundNo));String res = wechatPayRequest.wechatHttpGet(url);log.info("查询退款订单结果:{}",res);Map<String, Object> resMap = JSONObject.parseObject(res, new TypeReference<Map<String, Object>>(){});String successTime = resMap.get("success_time").toString();String refundId = resMap.get("refund_id").toString();/*** 款到银行发现用户的卡作废或者冻结了,导致原路退款银行卡失败,可前往商户平台-交易中心,手动处理此笔退款。* 枚举值:* SUCCESS:退款成功* CLOSED:退款关闭* PROCESSING:退款处理中* ABNORMAL:退款异常*/String status = resMap.get("status").toString();/*** 枚举值:* ORIGINAL:原路退款* BALANCE:退回到余额* OTHER_BALANCE:原账户异常退到其他余额账户* OTHER_BANKCARD:原银行卡异常退到其他银行卡*/String channel = resMap.get("channel").toString();log.info("successTime:"+successTime);log.info("channel:"+channel);log.info("refundId:"+refundId);log.info("status:"+status);// TODO 在查询单笔退款信息时,可以再去查询一次订单的状态,保证该订单已经退款完毕了return resMap;}/*** 申请交易账单* @param billDate 格式yyyy-MM-dd 仅支持三个月内的账单下载申请 ,如果传入日期未为当天则会出错* @param billType 分为:ALL、SUCCESS、REFUND* ALL:返回当日所有订单信息(不含充值退款订单)* SUCCESS:返回当日成功支付的订单(不含充值退款订单)* REFUND:返回当日退款订单(不含充值退款订单)* @return*/@ApiOperation(value = "申请交易账单-统一接口", notes = "申请交易账单-统一接口")@ApiOperationSupport(order = 35)@GetMapping("/tradeBill")public String tradeBill(@RequestParam("billDate") String billDate, @RequestParam("billType") String billType) {log.info("申请交易账单,billDate:{},billType:{}", billDate,billType);String url = wechatPayConfig.getBaseUrl().concat(WechatPayUrlEnum.TRADE_BILLS.getType()).concat("?bill_date=").concat(billDate).concat("&bill_type=").concat(billType);String res = wechatPayRequest.wechatHttpGet(url);log.info("查询退款订单结果:{}",res);Map<String, Object> resMap = JSONObject.parseObject(res, new TypeReference<Map<String, Object>>(){});String downloadUrl = resMap.get("download_url").toString();return downloadUrl;}/**** @param billDate 格式yyyy-MM-dd 仅支持三个月内的账单下载申请,如果传入日期未为当天则会出错* @param accountType 分为:BASIC、OPERATION、FEES* BASIC:基本账户* OPERATION:运营账户* FEES:手续费账户* @return*/@ApiOperation(value = "申请资金账单-统一接口", notes = "申请资金账单-统一接口")@ApiOperationSupport(order = 40)@GetMapping("/fundFlowBill")public String fundFlowBill(@RequestParam("billDate") String billDate, @RequestParam("accountType") String accountType) {log.info("申请交易账单,billDate:{},accountType:{}", billDate,accountType);String url = wechatPayConfig.getBaseUrl().concat(WechatPayUrlEnum.FUND_FLOW_BILLS.getType()).concat("?bill_date=").concat(billDate).concat("&account_type=").concat(accountType);String res = wechatPayRequest.wechatHttpGet(url);log.info("查询退款订单结果:{}",res);Map<String, Object> resMap = JSONObject.parseObject(res, new TypeReference<Map<String, Object>>(){});String downloadUrl = resMap.get("download_url").toString();return downloadUrl;}@ApiOperation(value = "下载账单-统一接口", notes = "下载账单-统一接口")@ApiOperationSupport(order = 45)@GetMapping("/downloadBill")public void downloadBill(String downloadUrl) {log.info("下载账单,下载地址:{}",downloadUrl);HttpGet httpGet = new HttpGet(downloadUrl);httpGet.addHeader("Accept", "application/json");CloseableHttpResponse response =null;try {//使用wxPayClient发送请求得到响应response = wxPayNoSignClient.execute(httpGet);String body = EntityUtils.toString(response.getEntity());int statusCode = response.getStatusLine().getStatusCode();if (statusCode == 200 || statusCode == 204) {log.info("下载账单,返回结果 = " + body);} else {throw new RuntimeException("下载账单异常, 响应码 = " + statusCode+ ", 下载账单返回结果 = " + body);}// TODO 将body内容转为excel存入本地或者输出到浏览器,演示存入本地writeStringToFile(body);}catch (Exception e){throw new RuntimeException(e.getMessage());}finally {if(response!=null) {try {response.close();} catch (IOException e) {e.printStackTrace();}}}}private void writeStringToFile(String body) {FileWriter fw = null;try {String filePath = "C:\Users\lhz12\Desktop\wxPay.txt";fw = new FileWriter(filePath, true);BufferedWriter bw = new BufferedWriter(fw);bw.write(body);} catch (Exception e) {e.printStackTrace();}finally {try {if(fw!=null) {fw.close();}} catch (IOException e) {e.printStackTrace();}}} 织梦模板大全天津工商网上办事大厅多用户商城系统哪个公司的好甘肃网站建设的过程长沙旅游攻略必去的十大景点沈阳建设工程信息网可访问中项网赣州带你飞网络科技有限公司中国建盏形象设计大赛获奖名单干零活一天一结的平台电子商务网站策划书3500字南宁建站服务公司如何制作互联网网站顺义推广建站室内设计联盟注册邀请码型网站建设无锡网络推广方案服务怎样制作微信小程序?seo关键词排名优化提升在线制作logo设计微信推广方式都有哪些建筑工程app高新网站建设多少钱京东app下载安装官网免费下载久久建筑网资料下载公司简介模板简洁大方2022搜索引擎企业cms免费模板长治制作网站珠海市网站建设制作设计平台招聘网站企业招聘怎么做网站编程员工资

猜你喜欢

  • 友情链接:
  • 加州网络公司排名 怎么制作网站下载软件 莱芜app下载 开发公司和权利人 网站个性化 设计兼职网站推荐