微信第三方支付接口java调用详细文档

article/2025/8/19 11:04:04

1.显示支付二维码

  1. 支付流程
    首先用户选好商品后
    跳到结算页面

在点击支付提交时应先将表单的数据保存到数据库(一般都会有订单表一二级)
经过后台保存数据后再转发到前台(二维码是后台调用微信生成的)
看到扫码页面

当用户扫码成功后 更改订单状态为已支付(一般情况 根据业务定)

开始
首先第一步

  1. 当用户选好商品后 点击 支付按钮时发送一个请求到后台控制层

让后跳到扫码页面显示商品信息页面

这个页面应该有一个标签

<img src=”请求的控制类地址” />

注意下面写的方法 就是输出一个二维码
跳到二维码页面img标签会去访问src这个路径方法
让后开始准备

一般会吧微信支付用到的参数封装成一个类,或者properties,xml,yml等等这样的文件(在企业中基本都是后者)这里使用类 方便一些
在这里插入图片描述
导入要使用的jar包和工具类
在这里插入图片描述
在这里插入图片描述
在控制类中加入以下几个工具方法(也可以封装成工具类)

/*** 获取本机IP地址* @return IP*/private static String getRemortIP(HttpServletRequest request) {  if (request.getHeader("x-forwarded-for") == null) {  return request.getRemoteAddr();  }  return request.getHeader("x-forwarded-for");  }/*** 微信支付签名算法sign*/private String getSign(Map<String,Object> map) {StringBuffer sb = new StringBuffer();String[] keyArr = (String[]) map.keySet().toArray(new String[map.keySet().size()]);//获取map中的key转为arrayArrays.sort(keyArr);//对array排序for (int i = 0, size = keyArr.length; i < size; ++i) {if ("sign".equals(keyArr[i])) {continue;}sb.append(keyArr[i] + "=" + map.get(keyArr[i]) + "&");}sb.append("key=" + WeixinPayConfig.key);String sign = Md5Util.string2MD5(sb.toString());return sign;}/*** 通过返回IO流获取支付地址* @param in* @return*/private String getElementValue(InputStream in,String key){SAXReader reader = new SAXReader();Document document=null;try {document = reader.read(in);} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}Element root = document.getRootElement();List<Element> childElements = root.elements();for (Element child : childElements) {System.out.println(child.getName()+":"+child.getStringValue());if(key.equals(child.getName())){return child.getStringValue();}}return null;}/** * 类型转换 * @author chenp * @param matrix * @return */  public static BufferedImage toBufferedImage(BitMatrix matrix) {  int width = matrix.getWidth();  int height = matrix.getHeight();  BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);  for (int x = 0; x < width; x++) {  for (int y = 0; y < height; y++) {  image.setRGB(x, y, matrix.get(x, y) == true ? 0xff000000 : 0xFFFFFFFF);  }  }  return image;  }

以上方法都要用到 可以封住成一个工具类 由于是演示这里直接放在当前类中了

上面这些弄完后就可以开工了

  1. 首先要测试参数
  2. 把刚刚复制的 通过返回IO流获取支付地址getElementValue这个方法里的代码注掉

在这里插入图片描述

请求的方法里面 有如下代码

		 String orderNo=DateUtil.getCurrentDateStr(); // 生成订单号(由项目定)Map<String,Object> map=new HashMap<String,Object>();map.put("appid", WeixinPayConfig.appid); // 公众账号ID(配置文件里的属性)map.put("mch_id", WeixinPayConfig.mch_id); // 商户号(配置文件里的属性)map.put("device_info", WeixinPayConfig.device_info); // 设备号(配置文件里的属性)map.put("notify_url", WeixinPayConfig.notify_url); // 异步通知地址(配置文件里的属性)map.put("trade_type", "NATIVE"); // 交易类型(表示扫码支付 详情看微信公众平台)map.put("out_trade_no", orderNo); // 商户订单号(由项目定)map.put("body", "测试商品"); // 商品描述(由项目定)map.put("total_fee", 100); // 标价金额(单位 '分')// map.put("spbill_create_ip", getRemortIP(request)); // 终端IP(正式环境下用)map.put("spbill_create_ip", "127.0.0.1"); // 终端IP(测试环境)map.put("nonce_str", StringUtil.getRandomString(30)); // 随机字符串(StringUtil工具类提供)map.put("sign", getSign(map)); // 签名(同类中的getSign方法提供)String xml=XmlUtil.genXml(map); //发送xml  (XmlUtil工具类提供)System.out.println(xml);// 发现xml消息(由httpclient-4.5.2.jar,httpcore-4.4.9.jar提供)InputStream in=HttpClientUtil.sendXMLDataByPost(WeixinPayConfig.url, xml).getEntity().getContent(); String code_url=getElementValue(in,""); // 获取二维码地址(同类中的getElementValue方法提供)```

让后测试看到下面这段就说明成功了(控制台)
在这里插入图片描述
如果错误了可以看一下错误原因

成功后在将getElementValue方法里刚刚注掉的代码解注
在这里插入图片描述

然后在访问的方法里继续添加代码
在这里插入图片描述

String orderNo=DateUtil.getCurrentDateStr(); // 生成订单号(由项目定)Map<String,Object> map=new HashMap<String,Object>();map.put("appid", WeixinPayConfig.appid); // 公众账号ID(配置文件里的属性)map.put("mch_id", WeixinPayConfig.mch_id); // 商户号(配置文件里的属性)map.put("device_info", WeixinPayConfig.device_info); // 设备号(配置文件里的属性)map.put("notify_url", WeixinPayConfig.notify_url); // 异步通知地址(配置文件里的属性)map.put("trade_type", "NATIVE"); // 交易类型(表示扫码支付 详情看微信公众平台)map.put("out_trade_no", orderNo); // 商户订单号(由项目定)map.put("body", "测试商品"); // 商品描述(由项目定)map.put("total_fee", 100); // 标价金额(单位 '分')// map.put("spbill_create_ip", getRemortIP(request)); // 终端IP(正式环境下用)map.put("spbill_create_ip", "127.0.0.1"); // 终端IP(测试环境)map.put("nonce_str", StringUtil.getRandomString(30)); // 随机字符串(StringUtil工具类提供)map.put("sign", getSign(map)); // 签名(同类中的getSign方法提供)String xml=XmlUtil.genXml(map); //发送xml  (XmlUtil工具类提供)System.out.println(xml);// 发现xml消息(由httpclient-4.5.2.jar,httpcore-4.4.9.jar提供)InputStream in=HttpClientUtil.sendXMLDataByPost(WeixinPayConfig.url, xml).getEntity().getContent(); String code_url=getElementValue(in,"code_url"); // 获取二维码地址(同类中的getElementValue方法提供)MultiFormatWriter multiFormatWriter = new MultiFormatWriter();  Map hints = new HashMap();  BitMatrix bitMatrix = null;  try {  bitMatrix = multiFormatWriter.encode(code_url, BarcodeFormat.QR_CODE, 250, 250,hints);  BufferedImage image = toBufferedImage(bitMatrix);  //输出二维码图片流  ImageIO.write(image, "png", response.getOutputStream());  } catch (WriterException e1) {  e1.printStackTrace();  }  

完成后 测试一下

出现二维码就说明成功了
在这里插入图片描述

2.异步请求处理

在1中生成的二维码,用户扫描支付后 将会调用公众平台设置的回调地址
接下来根据回调地址来写方法

然后先是拷贝方法 根1一样 封住成工具类或者放在本类

/**  * 是否签名正确,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。  * @return boolean  */    public static boolean isTenpaySign(String characterEncoding, SortedMap<Object, Object> packageParams, String API_KEY) {    StringBuffer sb = new StringBuffer();    Set es = packageParams.entrySet();    Iterator it = es.iterator();    while(it.hasNext()) {    Map.Entry entry = (Map.Entry)it.next();    String k = (String)entry.getKey();    String v = (String)entry.getValue();    if(!"sign".equals(k) && null != v && !"".equals(v)) {    sb.append(k + "=" + v + "&");    }    }    sb.append("key=" + API_KEY);    //算出摘要    String mysign = Md5Util.MD5Encode(sb.toString(), characterEncoding).toLowerCase();    String tenpaySign = ((String)packageParams.get("sign")).toLowerCase();    return tenpaySign.equals(mysign);    }  

然后回调地址的方法里写

//读取参数    InputStream inputStream ;    StringBuffer sb = new StringBuffer();    inputStream = req.getInputStream();    String s ;    BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));    while ((s = in.readLine()) != null){    sb.append(s);    }    in.close();    inputStream.close();  System.out.println("sb:"+sb.toString());//解析xml成map    Map<String, String> m = new HashMap<String, String>();    try {m = XmlUtil.doXMLParse(sb.toString());} catch (JDOMException e) {// TODO Auto-generated catch blocke.printStackTrace();}    //过滤空 设置 TreeMap    SortedMap<Object,Object> packageParams = new TreeMap<Object,Object>();          Iterator<String> it = m.keySet().iterator();    while (it.hasNext()) {    String parameter = it.next();    String parameterValue = m.get(parameter);    String v = "";    if(null != parameterValue) {    v = parameterValue.trim();    } packageParams.put(parameter, v);    }  // 微信支付的API密钥    String key = WeixinPayConfig.key;if(isTenpaySign("UTF-8", packageParams, key)){ // 验证通过if("SUCCESS".equals((String)packageParams.get("result_code"))){  System.out.println("验证通过");}else{System.out.println("支付失败");}}else{System.out.println("验证未通过");}

在验证通过后更改 订单的状态 为已支付

在编写根据订单查询订单状态的方法
在二维码页面每隔多少秒就调用一次查看状态
若为已支付状态就可以跳转页面了

3.HTML在线支付

环境准备
加入
HMACSHA256Uitl.java 工具类

接口调用url
private static String url="https://api.mch.weixin.qq.com/pay/downloadfundflow";
使用到的工具方法

/*** 微信支付签名算法sign*/private static String getSign(Map<String,Object> map) {StringBuffer sb = new StringBuffer();String[] keyArr = (String[]) map.keySet().toArray(new String[map.keySet().size()]);//获取map中的key转为arrayArrays.sort(keyArr);//对array排序for (int i = 0, size = keyArr.length; i < size; ++i) {if ("sign".equals(keyArr[i])) {continue;}sb.append(keyArr[i] + "=" + map.get(keyArr[i]) + "&");}sb.append("key=" + WeixinPayConfig.key);// String sign = Md5Util.string2MD5(sb.toString());String sign=HMACSHA256Uitl.HMACSHA256(sb.toString().getBytes(), WeixinPayConfig.key.getBytes());return sign;}

然后编写方法 因为是测试 这里使用的是main 实际根据业务更改

public static void main(String[] args) throws UnsupportedOperationException, ClientProtocolException, IOException {Map<String,Object> map=new HashMap<String,Object>();map.put("appid", WeixinPayConfig.appid); // 公众账号IDmap.put("mch_id", WeixinPayConfig.mch_id); // 商户号map.put("nonce_str", StringUtil.getRandomString(30)); // 随机字符串map.put("bill_date", "20180419"); // 资金账单日期map.put("account_type", "Basic"); // 资金账户类型map.put("sign", getSign(map)); // 签名String xml=XmlUtil.genXml(map); System.out.println(xml);InputStream in=HttpClientUtil.sendXMLDataByHttpsPost(url, xml).getEntity().getContent(); // 发现xml消息StringBuffer out=new StringBuffer();byte []b=new byte[4096];for(int n;(n=in.read(b))!=-1;){out.append(new String(b,0,n));}System.out.println(out.toString());}

运行结果
在这里插入图片描述
出现以上结果就成功了

出现报错的话 根据提示 更改参数即可

自行根据以上逻辑嵌入到页面中即可

3.查询订单

创建参数

private static String url="https://api.mch.weixin.qq.com/pay/orderquery";

写入配置文件里即可 由于是测试 这里写在类中

再添加工具方法(getElementValue这个方法有重载 跟1,2里的不一样)

/*** 通过返回IO流获取支付地址* @param in* @return*/private static void getElementValue(InputStream in){SAXReader reader = new SAXReader();Document document=null;try {document = reader.read(in);} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}Element root = document.getRootElement();List<Element> childElements = root.elements();for (Element child : childElements) {System.out.println(child.getName()+":"+child.getStringValue());}}

这个和2,1中的方法是同一个

/*** 微信支付签名算法sign*/private static String getSign(Map<String,Object> map) {StringBuffer sb = new StringBuffer();String[] keyArr = (String[]) map.keySet().toArray(new String[map.keySet().size()]);//获取map中的key转为arrayArrays.sort(keyArr);//对array排序for (int i = 0, size = keyArr.length; i < size; ++i) {if ("sign".equals(keyArr[i])) {continue;}sb.append(keyArr[i] + "=" + map.get(keyArr[i]) + "&");}sb.append("key=" + WeixinPayConfig.key);String sign = Md5Util.string2MD5(sb.toString());return sign;}

这里直接写的main方法 具体要求根据业务更改

public static void main(String[] args) throws UnsupportedOperationException, ClientProtocolException, IOException {Map<String,Object> map=new HashMap<String,Object>();map.put("appid", WeixinPayConfig.appid); // 公众账号IDmap.put("mch_id", WeixinPayConfig.mch_id); // 商户号//map.put("transaction_id", "4200000087201804105653326283"); // 微信订单号map.put("out_trade_no", "20180405055656553"); // 商户订单号(项目生成的订单号)map.put("mch_id", WeixinPayConfig.mch_id); // 商户号map.put("nonce_str", StringUtil.getRandomString(30)); // 随机字符串map.put("sign", getSign(map)); // 签名String xml=XmlUtil.genXml(map); System.out.println(xml);InputStream in=HttpClientUtil.sendXMLDataByPost(url, xml).getEntity().getContent(); // 发现xml消息getElementValue(in);}

然后运行
在这里插入图片描述
看见结果后 就成功了
如果有错误根据错误提示 排错即可

4.关闭订单

创建参数

private static String url="https://api.mch.weixin.qq.com/pay/closeorder";

写入配置文件里即可 由于是测试 这里写在类中

这里直接写的main方法 具体要求根据业务更改(还是需要3里面的两个方法)

public static void main(String[] args) throws UnsupportedOperationException, ClientProtocolException, IOException {Map<String,Object> map=new HashMap<String,Object>();map.put("appid", WeixinPayConfig.appid); // 公众账号IDmap.put("mch_id", WeixinPayConfig.mch_id); // 商户号map.put("out_trade_no", "20180404022005421"); // 商户订单号map.put("nonce_str", StringUtil.getRandomString(30)); // 随机字符串map.put("sign", getSign(map)); // 签名String xml=XmlUtil.genXml(map); System.out.println(xml);InputStream in=HttpClientUtil.sendXMLDataByPost(url, xml).getEntity().getContent(); // 发现xml消息getElementValue(in);}

然后运行

在这里插入图片描述
看见结果后 就成功了
如果有错误根据错误提示 排错即可

5.申请退款

首先 退款要用到安全证书
在微信公众平台登陆后 在下面下载

在这里插入图片描述
下载完后放在磁盘内

然后准备工作

将CertUtil.java 导入在工程内(更改里面的安全证书路径,项目中要配置在配置文件中)

在这里插入图片描述

接口调用url
private static String url="https://api.mch.weixin.qq.com/secapi/pay/refund";
使用到的工具方法

		/*** 通过返回IO流获取支付地址* @param in* @return*/private static void getElementValue(InputStream in){SAXReader reader = new SAXReader();Document document=null;try {document = reader.read(in);} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}Element root = document.getRootElement();List<Element> childElements = root.elements();for (Element child : childElements) {System.out.println(child.getName()+":"+child.getStringValue());}}/*** 微信支付签名算法sign*/private static String getSign(Map<String,Object> map) {StringBuffer sb = new StringBuffer();String[] keyArr = (String[]) map.keySet().toArray(new String[map.keySet().size()]);//获取map中的key转为arrayArrays.sort(keyArr);//对array排序for (int i = 0, size = keyArr.length; i < size; ++i) {if ("sign".equals(keyArr[i])) {continue;}sb.append(keyArr[i] + "=" + map.get(keyArr[i]) + "&");}sb.append("key=" + WeixinPayConfig.key);String sign = Md5Util.string2MD5(sb.toString());return sign;}

然后编写方法 因为是测试 这里使用的是main 实际根据业务更改

public static void main(String[] args) throws UnsupportedOperationException, ClientProtocolException, IOException {Map<String,Object> map=new HashMap<String,Object>();map.put("appid", WeixinPayConfig.appid); // 公众账号IDmap.put("mch_id", WeixinPayConfig.mch_id); // 商户号map.put("transaction_id", "4200000094201804192059258077"); // 微信订单号//map.put("out_trade_no", "20180419105343760"); // 商户订单号map.put("nonce_str", StringUtil.getRandomString(30)); // 随机字符串map.put("out_refund_no", DateUtil.getCurrentDateStr()); // 商户退款单号map.put("total_fee", 100); // 订单金额map.put("refund_fee", 10); // 退款金额map.put("sign", getSign(map)); // 签名String xml=XmlUtil.genXml(map); System.out.println(xml);InputStream in=HttpClientUtil.sendXMLDataByHttpsPost(url, xml).getEntity().getContent(); // 发现xml消息getElementValue(in);}

运行程序查看结果

在这里插入图片描述

出现以上结构就成功了

出现报错的话 根据提示 更改参数即可

7 查询退款

接口调用url
private static String url="https://api.mch.weixin.qq.com/pay/refundquery ";

使用到的工具方法

/*** 通过返回IO流获取支付地址* @param in* @return*/private static void getElementValue(InputStream in){SAXReader reader = new SAXReader();Document document=null;try {document = reader.read(in);} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}Element root = document.getRootElement();List<Element> childElements = root.elements();for (Element child : childElements) {System.out.println(child.getName()+":"+child.getStringValue());}}/*** 微信支付签名算法sign*/private static String getSign(Map<String,Object> map) {StringBuffer sb = new StringBuffer();String[] keyArr = (String[]) map.keySet().toArray(new String[map.keySet().size()]);//获取map中的key转为arrayArrays.sort(keyArr);//对array排序for (int i = 0, size = keyArr.length; i < size; ++i) {if ("sign".equals(keyArr[i])) {continue;}sb.append(keyArr[i] + "=" + map.get(keyArr[i]) + "&");}sb.append("key=" + WeixinPayConfig.key);String sign = Md5Util.string2MD5(sb.toString());return sign;}

然后编写方法 因为是测试 这里使用的是main 实际根据业务更改

public static void main(String[] args) throws UnsupportedOperationException, ClientProtocolException, IOException {Map<String,Object> map=new HashMap<String,Object>();map.put("appid", WeixinPayConfig.appid); // 公众账号IDmap.put("mch_id", WeixinPayConfig.mch_id); // 商户号// map.put("transaction_id", "4200000094201804192059258077"); // 微信订单号// map.put("out_trade_no", "20180419105343760"); // 商户订单号// map.put("out_refund_no", "20180427112536831"); // 商户退款单号map.put("refund_id", "50000506552018042704327042706"); // 微信退款单号map.put("nonce_str", StringUtil.getRandomString(30)); // 随机字符串// map.put("offset", 1); // 偏移量map.put("sign", getSign(map)); // 签名String xml=XmlUtil.genXml(map); System.out.println(xml);InputStream in=HttpClientUtil.sendXMLDataByPost(url, xml).getEntity().getContent(); // 发现xml消息getElementValue(in);}

运行程序查看结果

在这里插入图片描述

出现以上结构就成功了

出现报错的话 根据提示 更改参数即可

本文资料+工具类+Demo https://pan.baidu.com/s/1pwnfknFwCLV86aBa3wCQoQ

更多干货,关注微信公众号
在这里插入图片描述


http://chatgpt.dhexx.cn/article/yZZIveMM.shtml

相关文章

微信支付接口配置教程(下)

微信第三方平台微信支付接口配置教程&#xff08;下&#xff09; 上传微信支付证书 登录后台系统&#xff0c;在后台微信商城里&#xff0c;点击微信支付证书。这一步我们需要上传对应的微信支付证书&#xff0c;这个证书就是文章《微信第三方平台微信支付接口配置教程&#…

聊一聊对“事务”的理解

什么是事务 事务即英文Transaction&#xff0c;在软件开发过程中&#xff0c;难免需要考虑处理事务。从微观层面看亦或者从成员最早了解到这个词汇看&#xff0c;事务通常指多条写入数据库的语句需要并发成功执行&#xff0c;从宏观层面看得话则是客户端发出的并发请求需要一致…

聊一聊wifi6

引言 8.11&#xff0c;小米十周年&#xff0c;雷军即将召开发布会&#xff0c;相信又是are you ok 放大招的时候了。作为小米各种产品的使用者&#xff08;包括但不限于手机&#xff0c;路由器&#xff0c;音响&#xff0c;手环&#xff0c;中性笔… &#xff09;&#xff0c;…

聊一聊我对测试开发的看法

前言 在一线大厂&#xff0c;没有测试这个岗位&#xff0c;只有测开这个岗位 即使是做业务测试&#xff0c;那么你的title也是测开 所以想聊一聊测开的看法 但不代表这是正确的看法&#xff0c;仅供参考 还没来阿里之前&#xff0c;我对测开的看法 一直以为专职做自动化测…

聊一聊,我对DDD的关键理解

作者&#xff1a;闵大为 阿里业务平台解决方案团队 当我们在学习DDD的过程中&#xff0c;感觉学而不得的时候&#xff0c;可能会问&#xff1a;我们还要学么&#xff1f;这的确引人深思。本文基于工作经验&#xff0c;尝试谈谈对DDD的一些理解。 一、序 《阿甘正传》中&#xf…

聊一聊Kotlin的泛型

Kotlin的泛型 简介 与java一样&#xff0c;kotlin也支持泛型&#xff0c;用法和java泛型差别不大&#xff0c;kotlin特色是型变支持。 基本用法&#xff1a; 定义类&#xff1a; 跟java相同&#xff0c;定义在类后面的尖括号&#xff1a; open class Basket<T>{}定…

聊一聊学习方法

聊一聊学习方法 为什么学习没效果&#xff1f;你只是看起来很努力自知与不自知&#xff0c;真的不是一字之差什么时候真的能出效果&#xff1f;学习方法一&#xff08;拍照式记忆&#xff09;学习方法二&#xff08;殊途同归&#xff09;学习方法三&#xff08;精细化管理&…

聊一聊ThreadLocal内存泄漏的问题

回答任何一个问题的时候应该要遵循&#xff1a;明确题意-->深入浅出-->举例说明-->总结&#xff0c;这四个步骤很重要&#xff0c;可以让你沉着冷静&#xff0c;思路清晰&#xff0c;避免尴尬。 01 — 明确题意 明确题意的意思就是先明确一下面试官的题目&#xff0…

聊一聊Https

前言 https协议是一种在http的基础上进行加密的协议&#xff0c;在http协议传输过程中&#xff0c;传输的数据都是已明文的方式进行传输&#xff0c;那我们的信息就有可能被他人进行捕获篡改&#xff08;比如你给女神表白却被程序员情敌发现并修改了你的消息&#xff0c;然后你…

SLAM基础——聊一聊信息矩阵

文章目录 前言1 :book: 信息矩阵1-1 :bookmark: 信息矩阵是什么&#xff1f;有什么作用&#xff1f;1-2 :bookmark: 信息矩阵与Hessian矩阵的关系1-2-1 Hessian矩阵和H矩阵的关系1-2-2 Hessian或H矩阵和信息矩阵的关系 2 :book: 信息矩阵与最小二乘的关联2-1 :bookmark: 先谈一…

聊一聊SpringCloud的五大组件

聊一聊SpringCloud的五大组件 1.初始SpringCloud 微服务是一种架构方式&#xff0c;最终肯定需要技术架构去实施。 微服务的实现方式很多&#xff0c;但是最火的莫过于Spring Cloud了。为什么&#xff1f; 后台硬&#xff1a;作为Spring家族的一员&#xff0c;有整个Spring全…

聊一聊Serverless

聊一聊Serverless Serverless是什么云计算发展过程Serverless的优势Serverless的不足云函数冷启动热启动函数实例不同语言冷启动时长排名首次调用超时性能优化 SFFBaaS再会推荐阅读 Serverless是什么 从单词角度理解,server译为服务&#xff0c;less译为少&#xff0c;Serverl…

聊一聊C语言位域/位段

目录 1、概念和定义 2、实例 在做嵌入式开发的时候&#xff0c;我们经常会遇到这样的代码&#xff1a; struct {unsigned int widthValidated : 1;unsigned int heightValidated : 1; } status; 这样定义结构体变量是什么意思呢&#xff1f; 主要原因是&#xff1a;有些信…

【毕业季】今天简单聊一聊这几个问题

今天简单聊一聊这几个问题 我又来参加活动啦~ 活动地址&#xff1a;毕业季进击的技术er 首先我看了下活动模板&#xff0c;有三个身份&#xff0c;| 毕业生 | 在校生 |职场人 &#xff0c;现在呢其实我们应该还算是在校生&#xff0c;但是我们是大三&#xff0c;也可以说是大四…

聊一聊差分放大器

目录 1、共模抑制比&#xff08;CMRR&#xff09; 2、低容差电阻 3、高噪声增益 4、单电容滚降 5、运算放大器输入端之间的电容 大学里的电子学课程说明了理想运算放大器的应用&#xff0c;包括反相和同相放大器&#xff0c;然后将它们进行组合&#xff0c;构建差动放大器…

简单聊一聊单点登录

单点登录 一、单点登录二、演示步骤①简单结构(域名的设置)②创建项目1.sso-server 模块代码LoginController代码如下GulimallTestSsoServerApplication启动类代码login.html代码application.properties配置文件pom.xml文件 2.sso-client1模块代码HelloController代码GulimallT…

聊一聊俞敏洪

2009年&#xff0c;CCTV颁发中国经济年度人物&#xff0c;给出了这样的颁奖词&#xff1a; “一个曾经的留级生&#xff0c;让无数学子的人生升级&#xff1b;他从未留过洋&#xff0c;却组建了一支跨国的船队。他用26个字母拉近了此岸和彼岸的距离。胸怀世界&#xff0c;志在东…

闲暇聊一聊

大家好&#xff0c;我是Tom哥 非常庆幸&#xff0c;早毕业了几年&#xff0c;那时的互联网还没有像现在这么卷&#xff0c;甚至没有 内卷 这个网络流行词 一切都是那么美好&#xff0c;可以自由享受学习技术的快乐 Tom哥是校招进的阿里&#xff0c;当时的技术资料可不像现在…

聊一聊数据库的行存与列存

目录 存储方式比较 优缺点比较 行存与列存实验 选择建议 注意事项 好多人最开始学习数据库的时候&#xff0c;是关系数据库&#xff0c;数据以表格形式存储&#xff0c;一行表示一条记录。其实这种就是典型的行存储&#xff08;Row-based store&#xff09;&#xff0c;将…

聊一聊 AS 的一些好用的功能

聊一聊 AS 的一些好用的功能 文章开始前先墨迹几句&#xff0c;好久没写文章了&#xff0c;这段时间公司确实挺忙&#xff0c;也没抽出时间&#xff0c;上一篇文章还是三月初写的&#xff0c;距今已经两个多月啦&#xff0c;不能再这样下去了&#xff0c;虽然我不能像一些大佬…