微信工具类

微信登录工具类 微信API操作Controller类 import com.mytest.edu.entity.MemberCenter; import com.mytest.edu.service.MemberCenterService; import com.mytest.edu.utils.HttpClientUtils; import com.mytest.edu.utils.JwtUtils; import com.mytest.gson.Gson; import org.springframework.bean 阅读详情
package com.yxb.makerhomeapi.common.util;

import com.yxb.base.util.MD5Util;
import com.yxb.common.base.constant.WechartConstant;
import com.yxb.common.base.entity.wx.AccessToken;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class WxUtil {

    public static String map2XmlString(Map<String, String> map) {
        String xmlResult = "";

        StringBuffer sb = new StringBuffer();
        sb.append("<xml>");
        for (String key : map.keySet()) {
            String value = map.get(key);
            if ("attach".equalsIgnoreCase(key) || "body".equalsIgnoreCase(key)){
                value = "<![CDATA[" + map.get(key) + "]]>";
            }
            sb.append("<" + key + ">" + value + "</" + key + ">");
        }
        sb.append("</xml>");
        xmlResult = sb.toString();

        return xmlResult;
    }

    /**
     * @description 将xml字符串转换成map
     * @param xml
     * @return Map
     */
    public static Map<String, String> readStringXmlOut(String xml) {
        Map<String, String> map = new HashMap<String, String>();
        Document doc = null;
        try {
            doc = DocumentHelper.parseText(xml); // 将字符串转为XML
            Element rootElt = doc.getRootElement(); // 获取根节点
            @SuppressWarnings("unchecked")
            List<Element> list = rootElt.elements();// 获取根节点下所有节点
            for (Element element : list) { // 遍历节点
                map.put(element.getName(), element.getText()); // 节点的name为map的key,text为map的value
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }
    /**
     * 新版微信创建创建sign签名 需要使用的方法
     *
     * @param paraMap
     * @param paykey
     * @return
     */
    public static String createSign(Map<String, String> paraMap, String paykey) {
        StringBuffer sb = new StringBuffer();

        Set<String> keySet = paraMap.keySet();
        String[] str = new String[paraMap.size()];
        // 进行字典排序
        str = keySet.toArray(str);
        Arrays.sort(str);
        for (int i = 0; i < str.length; i++) {
            if(StringUtils.isBlank(paraMap.get(str[i]))){
                continue;
            }
            if("sign".equals(str[i])){
                continue;
            }
            sb.append(str[i]).append("=").append(paraMap.get(str[i])).append("&");
        }
        if (null != paykey) {
            sb.append("key=" + paykey);
        }
        return MD5Util.EncoderByMd5(sb.toString()).toUpperCase();
    }

    public static String getTimeStamp() {
        return String.valueOf(System.currentTimeMillis() / 1000);
    }


    public static String reciverWx(HttpServletRequest request) throws IOException
    {
        InputStream inputStream;
        StringBuffer sb = new StringBuffer();
        inputStream = request.getInputStream();
        String s;
        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
        while ((s = in.readLine()) != null)
        {
            sb.append(s);
        }
        in.close();
        inputStream.close();
        return sb.toString();
    }

    /**
     * 编写Get请求的方法。但没有参数传递的时候,可以使用Get请求
     *
     * @param url 需要请求的URL
     * @return 将请求URL后返回的数据,转为JSON格式,并return
     */
    public static JSONObject doGetStr(String url) throws ClientProtocolException, IOException {
        DefaultHttpClient client = new DefaultHttpClient();//获取DefaultHttpClient请求
        HttpGet httpGet = new HttpGet(url);//HttpGet将使用Get方式发送请求URL
        JSONObject jsonObject = null;
        HttpResponse response = client.execute(httpGet);//使用HttpResponse接收client执行httpGet的结果
        HttpEntity entity = response.getEntity();//从response中获取结果,类型为HttpEntity
        if(entity != null){
            String result = EntityUtils.toString(entity,"UTF-8");//HttpEntity转为字符串类型
            jsonObject = JSONObject.fromObject(result);//字符串类型转为JSON类型
        }
        return jsonObject;
    }

    /**
     * 编写Post请求的方法。当我们需要参数传递的时候,可以使用Post请求
     *
     * @param url 需要请求的URL
     * @param outStr  需要传递的参数
     * @return 将请求URL后返回的数据,转为JSON格式,并return
     */
    public static JSONObject doPostStr(String url,String outStr) throws ClientProtocolException, IOException {
        DefaultHttpClient client = new DefaultHttpClient();//获取DefaultHttpClient请求
        HttpPost httpost = new HttpPost(url);//HttpPost将使用Get方式发送请求URL
        JSONObject jsonObject = null;
        httpost.setEntity(new StringEntity(outStr,"UTF-8"));//使用setEntity方法,将我们传进来的参数放入请求中
        HttpResponse response = client.execute(httpost);//使用HttpResponse接收client执行httpost的结果
        String result = EntityUtils.toString(response.getEntity(),"UTF-8");//HttpEntity转为字符串类型
        jsonObject = JSONObject.fromObject(result);//字符串类型转为JSON类型
        return jsonObject;
    }

    /**
     * 获取AccessToken
     * @return 返回拿到的access_token及有效期
     */
    public static AccessToken getAccessToken() throws IOException{
        AccessToken token = new AccessToken();
        String url = WechartConstant.ACCESS_TOKEN_URL.replace("APPID", WechartConstant.appId).replace("APPSECRET", WechartConstant.secret);
        JSONObject jsonObject = doGetStr(url);
        if(jsonObject != null){
            token.setToken(jsonObject.getString("access_token"));
            token.setExpiresIn(jsonObject.getInt("expires_in"));
        }
        return token;
    }

    /**
     * 根据accessToken 获取jsapi_ticket
     * @param accessToken
     * {
        "errcode":0,
        "errmsg":"ok",
        "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
        "expires_in":7200
        }
     * @return
     */
    public static String getJSTicket(String accessToken) throws Exception{
        String url = WechartConstant.JSAPI_TICKET_URL.replace("ACCESS_TOKEN",accessToken);
        JSONObject jsonObject = doGetStr(url);
        if(jsonObject != null && 0 == jsonObject.getInt("errcode")){ //如果返回不为空,将返回结果封装进AccessToken实体类
            return jsonObject.getString("ticket");
        }
        return null;
    }

    /**
     * SHA1 安全加密算法
     * @param para 需要加密的para参数
     * @return
     * @throws Exception
     */
    public static String SHA1(String para) {

        //指定sha1算法
        MessageDigest digest = null;
        try {
            digest = MessageDigest.getInstance("SHA-1");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
        digest.update(para.getBytes());
        //获取字节数组
        byte messageDigest[] = digest.digest();
        // Create Hex String
        StringBuffer hexString = new StringBuffer();
        // 字节数组转换为 十六进制 数
        for (int i = 0; i < messageDigest.length; i++) {
            String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
            if (shaHex.length() < 2) {
                hexString.append(0);
            }
            hexString.append(shaHex);
        }
        return hexString.toString().toUpperCase();
    }
}

微信下载交易账单API工具类 本文是基于微信支付V2版本的工具类,如果使用V3的版本请参考官网:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/api.shtml 因为图方便,所以引入了两个公共的工具包 来处理https 请求 以及 加密,里面也封装了快速替换下面两个依赖的方式 <dependency> <groupId>cn.hutool</groupId> <a 阅读详情

相关推荐

Java微信APP支付工具类实战指南

微信支付作为当下中国最流行的支付方式之一,在移动应用程序中集成微信支付功能是许多开发者和企业所追求的目标。为了实现这一功能,我们需要了解微信APP支付的整个流程,它包括准备环境、集成支付工具类、处理支付请求、进行签名与验签、以及接收和处理支付结果通知等一系列步骤。本章旨在为读者提供一个全面且由浅入深的理解,帮助读者掌握微信APP支付的基础知识,并为进一步深入研究支付集成做好铺垫。

weixin_36001279的博客 1018

微信三方登录(OAuth2.0)-SpringBoot项目

微信的三方登录OAuth2.0

weixin_48133130的博客 5671

Java后台微信支付集成工具类详解

本文还有配套的精品资源,点击获取 简介:Java后台微信支付工具类为开发者提供了一套完整的支付流程实现方案,包括支付请求处理、支付结果通知和订单状态查询等关键功能。工具类简化了与微信支付服务的交互,使开发更高效。本文将详细说明微信支付的基本步骤和工具类的核心组件,同时提供作者的博客链接供读者获取更深入的理解和示例代码。 1. 微信支付基本流程介绍 微信支付已...

weixin_26907223的博客 1026

微信公众号开发常用工具类

package com.leenleda.project.manager.common.utils; import com.alibaba.fastjson.JSONObject; import com.leenleda.project.manager.common.config.LeenledaConfig; import com.leenleda.project.manager.com...

u013811335的专栏 143

Java版微信支付工具类封装与实战

微信支付接口要求请求参数以 key-value 形式提供,并且通常以 XML 或 JSON 格式进行数据交换。在构建类时,我们通常使用来存储参数对,确保参数的结构清晰、便于扩展。if (key!= null) {代码逻辑分析:- 使用Map存储参数,保证 key 唯一性与快速查找。方法用于添加参数,增加了非空校验,防止空值污染数据。方法提供对外访问接口,便于后续构建 XML 或签名操作。参数验证示例:if (!

weixin_42602241的博客 798

微信开发工具类

置换微信各种方法,换上appid和开发者密码就可以使用。

微信推送工具类

@Component @Slf4j public class WeChatUtil { @Autowired private RedisService redisService; /** * 日志管理器 */ private static final Logger LOGGER = LoggerFactory.getLogger(WeChatU...

qq_39543482的博客 409

微信授权登陆

慕课网中,微信授权登陆需要的jar包。

微信支付的封装工具类,集成微信支付

1.前言微信支付逻辑比较麻烦,这里附上微信支付的工具类,方便快速集成微信支付2集成过程1.集成lib到工程和一些配置和注意点 集成lib到工程不想做太多的废话详情看微信的官方文档 注意点 : (1).复制WXPayEntryActivity.java到项目工程 一定要放到根目录下的wxapi包下 (2).千万不要忘记在manfest文件下做配置

Yasin Yao的博客 3249

微信接口工具类

微信接口工具类,涉及微信分组的获取和管理、图文消息的发送、群组消息的发送,请自行下载相关jar包。

微信授权登录使用jar包

微信授权登录使用jar包,可以用于微信公众号拉起denglu

java封装一个企业微信机器人的工具类

package cn.tools; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.apache.http.HttpStatus; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.ap.

qq_40308101的博客 4950

微信公众号工具类

微信公众号工具类,大家一起学习学习 oauth.zip oauth.zip oauth.zip

JAVA -微信工具类.

【代码】JAVA -微信工具类.

迷迷糊糊,懵懵懂懂 538

UUVsimulator仿真

pub -r 10 /cmd_vel geometry_msgs/Twist控制运动没有反应。通过键盘控制运动,接收不到/cmd_vel消息。

Fatal__的博客 4608

Android Studio安装常见问题详解——Android Emulator Hypervisor Driver for AMD Processors installation failed.

目录一、问题描述二、解决方案2.1 开启CPU虚拟化2.2 禁用Hyper-V2.3 使用管理员命令行在驱动程序包中执行“silent_install.bat” 一、问题描述 新买的AMD轻薄本,在安装Android Studio时遇到问题: Android Emulator Hypervisor Driver for AMD Processors installation failed. 笔记本配置为: 二、解决方案 2.1 开启CPU虚拟化 设置虚拟化的步骤这里不进行详细介绍了。如果需要,可以自行百

Wendy的博客 4万+

微信支付用到的几个java工具类

把微信支付demo里面的一些工具类整理了下,以备用! 目录 HttpUtil 工具类 MD5Util 工具类 PayUtil 工具类 RandomUtil 工具类 SignUtil 工具类 XMLUtil 工具类 ZxingUtil 工具类 HttpUtil 工具类 package util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; ..

每天进步一点点儿 1809

告别调参烦恼:用Simulink手把手实现自适应模糊PID温度控制(附模型下载)

本文详细介绍了如何使用Simulink实现自适应模糊PID温度控制,解决传统PID调参难题。通过模糊推理引擎动态调整PID参数,系统能自动适应不同工况,显著提升控制精度和响应速度。文章包含完整的建模步骤、参数优化技巧和工业应用扩展,并附赠可下载模型,帮助工程师快速掌握这一智能控制技术。

weixin_30872499的博客 154

微信开发处理工具类

package com.code.web; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java....

LGF的专栏 277

【100%通过率】2024华为OD机试真题E卷 C++语言 实现【流浪地球】

流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N-1。 1) 初始状态下所有的发动机都是未启动状态; 2) 发动机起动的方式分为“手动启动”和“关联启动”两种方式; 3) 如果在时刻1一个发动机被启动,下一个时刻2与之相邻的两个发动机就会被“关联启动”; 4) 如果准备启动某个发动机时,它已经被启动了,则什么都不用做; 5) 发动机0与发动机N-1是相邻; 地球联合政府准备挑选某些发动机在某些时刻进行“手动启动”,当然最终所有的发动机都会被启动。 哪些发动机最晚被启动呢?

MISAYAONE的博客 4213

【ComfyUI】Wan 2.2 14B 首尾帧转视频 平滑过渡

本文介绍了基于 Wan2.2 ComfyUI 的视频生成工作流,通过预训练模型、提示词与参考图像的结合,实现高质量视频合成。工作流采用高低噪声模型与 LoRA 模块优化风格与细节,确保画面过渡平滑稳定。核心流程包括模型加载、图像输入、提示词编码、潜空间采样、解码与视频合成,最终生成动态转场视频。节点设计涵盖 CLIPTextEncode、KSamplerAdvanced 等关键模块,协同完成从文本到视频的全链路生成。正向提示词作为核心驱动力,直接影响视频的动作、镜头与画面变化。

Mr数据杨 1705
上一篇: 公共的工具类CommonUtil
下一篇: 加密工具类MD5Util
hit、run
博客等级 码龄10年 163粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值