.NET微信扫码支付模式二API接口开发测试

.NET微信扫码支付模式二API接口开发测试

主要实现微信扫码支付,官网的SDKdemo 就不要使用 一直不能调试通过的,还是自己按照API接口文档一步一步来实现,吐槽下微信一点责任感都木有,能不能demo搞个正常的吗,不要坑惨了一大群码农们有点社会责任感吧 还是多学学你的Alibaba 直接上干货

具体文档接口都直接参考文档说明干

具体代码一步一步呈上

Index.aspx 显示二维码页面:

复制代码

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server"><meta http-equiv="content-type" content="text/html;image/gif;charset=utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>微信支付样例-扫码支付</title>
</head>
<body><div style="margin-left: 10px;color:#00CD00;font-size:30px;font-weight: bolder;">扫码支付模式二</div><br/><asp:Image ID="Image2" runat="server" style="width:200px;height:200px;"/></body></html>

复制代码

复制代码

protected void Page_Load(object sender, EventArgs e){//支付金额string PayPrice = Request.GetString("payprice").ToString("filtersql");//支付单号string Payorder = Request.GetString("payorder").ToString("filtersql");//公众号jsapi支付 H5支付传参数string Openid = Request.GetString("openid").ToString("filtersql");//扫码支付 模式二string productId = Request.GetString("productId").ToString("filtersql");WechatPayHelper wxpay = new WechatPayHelper();int total_fee = (Convert.ToInt32(decimal.Parse("0.01") * 100)); //扫码支付模式二 Native   Pay  trade_type=NATIVE时(即扫码支付),此参数必传。此参数为二维码中包含的商品ID,商户自行定义主要参数依次是 订单号 金额 openid 公众号  产品productidstring return_response = wxpay.GetUnifiedOrderResultNative("2017100882002", total_fee, "财政专费", "oC88888JeOjjkgvlWf6p999Jgu4", "456888888");//将url生成二维码图片Image2.ImageUrl = "http://localhost:1200/NotivePayAPI/MakeQRCode.aspx?data=" + HttpUtility.UrlEncode(return_response);

复制代码

 

复制代码

public class WechatPayHelper
{private string RequestUrl = "";private string key = "";private string appid = "";//应用IDprivate string mch_id = "";//商户号private string nonce_str = "";//随机字符串private string sign = "";//签名// private string body = "";//商品描述// private string out_trade_no = "";//商户订单号private string spbill_create_ip = "";//终端IPprivate string notify_url = "";//通知地址private string trade_type = "";//交易类型private string pay_url = "";//字符编码格式 目前支持 utf-8private string input_charset = "utf-8";//签名方式private string sign_type = "MD5";public WechatPayHelper(){HttpContext Context = System.Web.HttpContext.Current;DataTable dt = null;//native 扫码支付配置  读取配置文件XMLstring strXML = "Wechat_Pay_Native.xml";//object objValue = Common.DataCache.GetCache(strXML);if (objValue == null){dt = GetConfigXml("//Config//PayConfig/" + strXML);Common.DataCache.SetCache(strXML, dt);}else{dt = (DataTable)objValue;}if (dt != null){appid = dt.Rows[0]["appid"].ToString();mch_id = dt.Rows[0]["mch_id"].ToString();notify_url = dt.Rows[0]["notify_url"].ToString();pay_url = dt.Rows[0]["pay_url"].ToString();spbill_create_ip = GetUserIp();nonce_str=StrRodamNo(16);trade_type = dt.Rows[0]["trade_type"].ToString();key = dt.Rows[0]["key"].ToString();}}/// <summary>/// 生成直接支付url 调用统一下单,获得下单结果 扫码支付模式二   支付url有效期为2小时,/// </summary>/// <param name="out_trade_no"></param>/// <param name="total_fee"></param>/// <param name="body"></param>/// <returns></returns>public string GetUnifiedOrderResultNative(string out_trade_no, int total_fee, string body, string openid, string productId){//请求业务参数详细StringBuilder sb = new StringBuilder();sb.AppendFormat("<xml><appid>{0}</appid><mch_id>{1}</mch_id> <body>{2}</body><nonce_str>{3}</nonce_str>", appid, mch_id, body, nonce_str);sb.AppendFormat("<out_trade_no>{0}</out_trade_no><total_fee>{1}</total_fee> <spbill_create_ip>{2}</spbill_create_ip><trade_type>{3}</trade_type>", out_trade_no, total_fee.ToString(), spbill_create_ip, trade_type);sb.AppendFormat("<notify_url>{0}</notify_url>", notify_url);sb.AppendFormat("<openid>{0}</openid>", openid);sb.AppendFormat("<product_id>{0}</product_id>", productId);//把请求参数打包成数组Dictionary<string, string> softdic = new Dictionary<string, string>();softdic.Add("appid", appid);softdic.Add("mch_id", mch_id);softdic.Add("nonce_str", nonce_str);softdic.Add("body", body);softdic.Add("out_trade_no", out_trade_no);softdic.Add("total_fee", total_fee.ToString());softdic.Add("spbill_create_ip", spbill_create_ip);softdic.Add("trade_type", trade_type);softdic.Add("notify_url", notify_url);softdic.Add("openid", openid);softdic.Add("product_id", productId);//请求参数体string strRequest = "";//加密签名string strSign = MakeSignData(softdic, ref strRequest);strRequest += "&sign=" + strSign;//打包xmlsb.AppendFormat("<sign>{0}</sign></xml>", strSign);//发送请求string strResponse = RequestWechatpay(sb.ToString());//URLDECODE返回的信息Encoding code = Encoding.GetEncoding(input_charset);strResponse = HttpUtility.UrlDecode(strResponse, code);string ResponseURL = ReadXmlNode(strResponse);//获得统一下单接口返回的二维码链接code_urlreturn ResponseURL;}/// <summary>/// 签名原始串/// </summary>/// <param name="dicParm">所有非空参数</param>/// <param name="strQueryString">请求串</param>/// <returns>签名串</returns>public string MakeSignData(Dictionary<string, string> dicParm, ref string strQueryString){   //先排序Dictionary<string, string> dicSort = dicParm.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value);StringBuilder sb = new StringBuilder();//再转换成URL字符串foreach (KeyValuePair<string, string> kvParm in dicSort){if (null != kvParm.Value && "".CompareTo(kvParm.Value) != 0&& "sign".CompareTo(kvParm.Key) != 0 && "key".CompareTo(kvParm.Key) != 0 && "sign_type".CompareTo(kvParm.Key) != 0){if (sb.Length > 0){sb.Append("&");strQueryString += "&";}sb.Append(kvParm.Key + "=" + HttpUtility.UrlDecode(kvParm.Value));strQueryString += kvParm.Key + "=" + HttpUtility.UrlEncode(kvParm.Value);}}//再和key拼装成字符串sb.Append("&key=" + key);//再进行MD5加密转成大写return MD5Create(sb.ToString(), input_charset).ToUpper();}public static string MD5Create(string str, string charset){string retStr;MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider();//创建md5对象byte[] inputBye;byte[] outputBye;//使用GB2312编码方式把字符串转化为字节数组.try{inputBye = Encoding.GetEncoding(charset).GetBytes(str);}catch (Exception ex){inputBye = Encoding.GetEncoding("GB2312").GetBytes(str);}outputBye = m5.ComputeHash(inputBye);retStr = System.BitConverter.ToString(outputBye);retStr = retStr.Replace("-", "");return retStr;}/// <summary>///把请求参数信息打包发送请求微信支付地址/// </summary>/// <param name="strRequestData">请求参数字符串(QueryString)</param>/// <returns></returns>private string RequestWechatpay(string strRequestData){Encoding code = Encoding.GetEncoding(input_charset);//把数组转换成流中所需字节数组类型byte[] bytesRequestData = code.GetBytes(strRequestData);//请求远程HTTPstring strResult = "";try{//设置HttpWebRequest基本信息HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(pay_url);myReq.Method = "post";myReq.ContentType = "text/xml";//填充POST数据myReq.ContentLength = bytesRequestData.Length;Stream requestStream = myReq.GetRequestStream();requestStream.Write(bytesRequestData, 0, bytesRequestData.Length);requestStream.Close();//发送POST数据请求服务器HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();Stream myStream = HttpWResp.GetResponseStream();//获取服务器返回信息StreamReader reader = new StreamReader(myStream, code);StringBuilder responseData = new StringBuilder();String line;while ((line = reader.ReadLine()) != null){responseData.Append(line);}//释放myStream.Close();strResult = responseData.ToString();}catch (Exception exp){strResult = "报错:" + exp.Message;}return strResult;}/// <summary>/// 获得客户端的IP/// </summary>/// <returns>当前页面客户端的IP</returns>public static string GetUserIp(){string userHostAddress = HttpContext.Current.Request.UserHostAddress;if (string.IsNullOrEmpty(userHostAddress)){userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];}//最后判断获取是否成功,并检查IP地址的格式(检查其格式非常重要)if (!string.IsNullOrEmpty(userHostAddress) && IsIP(userHostAddress)){return userHostAddress;}return "127.0.0.1";}/// <summary>/// 检查IP地址格式/// </summary>/// <param name="ip"></param>/// <returns></returns>public static bool IsIP(string ip){return System.Text.RegularExpressions.Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");}/// <summary>/// 生成随机字母与数字/// </summary>/// <param name="IntStr">生成长度</param>/// <returns></returns>public static string StrRodamNo(int Length){return StrRodam(Length, false);}/// <summary>/// 生成随机字母与数字/// </summary>/// <param name="Length">生成长度</param>/// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>/// <returns></returns>public static string StrRodam(int Length, bool Sleep){if (Sleep)System.Threading.Thread.Sleep(3);char[] Pattern = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };string result = "";int n = Pattern.Length;System.Random random = new Random(~unchecked((int)DateTime.Now.Ticks));for (int i = 0; i < Length; i++){int rnd = random.Next(0, n);result += Pattern[rnd];}return result;}#region 读取xml中的指定节点的值/// <summary>  /// 读取xml中的指定节点的值/// </summary>  private string ReadXmlNode(string filename){string result = "调用微信服务异常";XmlDocument xmlDoc = new XmlDocument();try{xmlDoc.LoadXml(filename);XmlNode root = xmlDoc.SelectSingleNode("xml");       if (root != null)result = (root.SelectSingleNode("code_url")).InnerText;}catch (Exception e){Common.Utils.WriteLogFile("ReadXmlNode:" + e.Message,"");}return result;}#endregion
}

复制代码

 MakeQRCode.aspx.cs   主要生成二维码 要引用 ThoughtWorks.QRCode.dll

复制代码

protected void Page_Load(object sender, EventArgs e){if (!string.IsNullOrEmpty(Request.QueryString["data"])){string str = Request.QueryString["data"];//初始化二维码生成工具QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;qrCodeEncoder.QRCodeVersion = 0;qrCodeEncoder.QRCodeScale = 4;//将字符串生成二维码图片Bitmap image = qrCodeEncoder.Encode(str, Encoding.Default);//保存为PNG到内存流  MemoryStream ms = new MemoryStream();image.Save(ms, ImageFormat.Png);//输出二维码图片Response.BinaryWrite(ms.GetBuffer());Response.End();}}

复制代码

 微信扫码支付异步通知结果处理

WXNativeNotifyPage.aspx.cs

复制代码

/// <summary>/// 微信扫码支付异步通知结果处理 主要负责接收微信支付后台发送过来的数据,对数据进行签名验证/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void Page_Load(object sender, EventArgs e){/////微信的API写法/////接收从微信后台POST过来的数据//System.IO.Stream s = Page.Request.InputStream;//int count = 0;//byte[] buffer = new byte[1024];//StringBuilder builder = new StringBuilder();//while ((count = s.Read(buffer, 0, 1024)) > 0)//{//    builder.Append(Encoding.UTF8.GetString(buffer, 0, count));//}//s.Flush();//s.Close();//s.Dispose();//SZRPP.Common.Utils.WriteLogFile("接收post来的数据", "Receive data from WeChat : " + builder.ToString());//Dictionary<string, string> dicParam = GetInfoFromXml(builder.ToString());////////接收从微信后台POST过来的数据StreamReader reader = new StreamReader(Request.InputStream);String xmlData = reader.ReadToEnd();Utils.WriteLog("接收post来的微信异步回调:" + xmlData, "微信异步回调");//序列化xml //转换数据格式并验证签名Dictionary<string, string> dicParam = GetInfoFromXml(xmlData);string data = "";try{//当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。if (dicParam.ContainsKey("return_code") && dicParam["return_code"] == "SUCCESS"){WechatPayHelper wcHelper = new WechatPayHelper();string strRequestData = "";//对返回的参数信息进行签名string strSign = wcHelper.MakeSignData(dicParam, ref strRequestData);//判断返回签名是否正确if (strSign == dicParam["sign"]){//判断业务结果if ("SUCCESS" == dicParam["result_code"]){//检查openid和product_id是否返回if (string.IsNullOrEmpty(dicParam["openid"]) || string.IsNullOrEmpty(dicParam["product_id"])){data = "<xml><return_code><![CDATA[FAIL]]></return_code> <return_msg><![CDATA[产品ID不存在回调数据异常]]></return_msg></xml>";Response.Write(data);}//判断业务是否处理过  应该有通知日志表  先暂通过缴费表做判断string out_trade_no = dicParam["out_trade_no"];//订单编号if (out_trade_no != null){  //自己的订单逻辑处理了 比较金额是否一致OrderPay pay = payBll.Query(out_trade_no,"");if (pay!= null){//商户系统对于支付结果通知的内容一定要做签名验证,并校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄漏导致出现“假通知”,造成资金损失。if (pay.PayPrice.Equals(decimal.Parse(dicParam["total_fee"])/100)){data = "<xml><return_code><![CDATA[FAIL]]></return_code> <return_msg><![CDATA[金额不一致回调数据异常]]></return_msg></xml>";Response.Write(data);}if (pay.PayStatus == 1){//已经支付 视为处理过 直接返回data = "<xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg></xml>";Response.Write(data);}else{  //收到确认后,更新订单的状态//修改支付状态if (payBll.UpdatePayStatus(out_trade_no, "1",1) > 0){data = "<xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg></xml>";Response.Write(data);}}}else{data = "<xml><return_code><![CDATA[FAIL]]></return_code> <return_msg><![CDATA[系统调用超时]]></return_msg></xml>";Response.Write(data);}}}else{//错误信息string error = dicParam["err_code"] + ":" + dicParam["err_code_des"];data = "<xml><return_code><![CDATA[FAIL]]></return_code> <return_msg><![CDATA[系统调用超时]]></return_msg></xml>";Response.Write(data);}}else{data="<xml><return_code><![CDATA[FAIL]]></return_code> <return_msg><![CDATA[系统超时]]></return_msg></xml>";Response.Write(data);}}}catch (Exception ex){Utils.WriteLog("微信异步回调异常:" + ex.Message, "异常日志");data = "<xml><return_code><![CDATA[FAIL]]></return_code> <return_msg><![CDATA[系统调用超时]]></return_msg></xml>";Response.Write(data);}}/// <summary>/// 把XML数据转换为Sorted<string, string>集合/// </summary>/// <param name="strxml"></param>/// <returns></returns>public Dictionary<string, string> GetInfoFromXml(string xmlstring){Dictionary<string, string> sParams = new Dictionary<string, string>();try{XmlDocument doc = new XmlDocument();doc.LoadXml(xmlstring);XmlElement root = doc.DocumentElement;int len = root.ChildNodes.Count;for (int i = 0; i < len; i++){string name = root.ChildNodes[i].Name;if (!sParams.ContainsKey(name)){sParams.Add(name.Trim(), root.ChildNodes[i].InnerText.Trim());}}}catch (Exception ex){}return sParams;}

复制代码

微信商户信息配置xml文件

Wechat_Pay_Native.xml

复制代码

<?xml version="1.0" encoding="utf-8" ?>
<data><!--接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数--><notify_url>http://8.20.7.8:300/PayNotifyPage/PayNotify/WXNativeNotifyPage.aspx</notify_url><pay_url>https://api.mch.weixin.qq.com/pay/unifiedorder</pay_url><!--微信开放平台审核通过的应用APPID--><appid>wxf88888888888</appid><!--微信支付分配的商户号--><mch_id>14666666662</mch_id><key>16gfhhg5655jjh55ff8ff88gd</key><subject>财政专费</subject><trade_type>NATIVE</trade_type>
</data>

复制代码

 至此就可以完成扫码支付了

 有图有真相

生成二维码显示

微信扫一扫 结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23288.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:Python图标图片的SEO

Python 图标图片的SEO 如果您是一名Python开发者&#xff0c;那么您一定知道Python的标志性图标——那只被称为“小蟒蛇”的图标。这个图标不仅是Python语言的标志&#xff0c;也是Python社区的标志。因此&#xff0c;如果您在网上进行Python相关的搜索&#xff0c;您可能会看…

chatgpt赋能python:Python图标含义:解析蟒蛇图标背后的意义

Python图标含义&#xff1a;解析蟒蛇图标背后的意义 Python作为目前最流行的编程语言之一&#xff0c;其官方标识——蟒蛇图标&#xff0c;也成为了广大开发者心中的经典。但你是否了解这个图标的含义及其背后的故事呢&#xff1f; 1. Python图标的含义 Python的标志采用的是…

ipa包安装到苹果手机中的几种方式——Qt for IOS

转自&#xff1a;https://www.jianshu.com/p/da38b578d2d4 https://www.jianshu.com/p/27f475461adc 安装ipa包的方法有很多中&#xff0c;可以通过不同的软件安装&#xff0c;本文只列出了常用的几种&#xff0c;做个简单的归纳整理。 1、使用iTunes安装 数据线连接手机之…

【苹果推】imessage虚拟机软件安装 App会生成多个应用程序分歧的ventenkoken

让您领会OpenSSL以建造布景。 若是毗连成功&#xff0c;则能够入口或多或少字符。 按ENTER键时&#xff0c;办事将割断连接。 如果呈现题目&#xff0c;OpenSSL将重成立连接时给您一番毛病动静&#xff0c;但您必需发明它到出口的日记。 用电户很是好&#xff0c;报名关系&…

macbook安装chatglm2-6b

1、前言 chatglm安装环境还是比较简单的&#xff0c;比起Stable diffusion安装轻松不少。   安装分两部分&#xff0c;一是github的源码&#xff0c;二是Hugging Face上的模型代码&#xff1b;安装过程跟着官方的readme文档就能顺利安装。以下安装内容&#xff0c;绝大部分是…

【苹果推软件】安装OS imessage和faceTime

推荐内容IMESSGAE相关 作者推荐内容参考此文档来操作 *** 点击即可查看作者要求内容信息作者推荐内容1.参考此文档来操作 *** 点击即可查看作者要求内容信息作者推荐内容2.参考此文档来操作 *** 点击即可查看作者要求内容信息作者推荐内容3.参考此文档来操作 *** 点击即可查看…

SpringBoot 实现 Excel 导入导出,百万数据量,性能爆表!

点击关注公众号&#xff0c;Java干货及时送达&#x1f447; 前言 最近我做过一个MySQL百万级别数据的excel导出功能&#xff0c;已经正常上线使用了。 这个功能挺有意思的&#xff0c;里面需要注意的细节还真不少&#xff0c;现在拿出来跟大家分享一下&#xff0c;希望对你会有…

CVE 官网提交流程

CVE 官网提交流程 一、进入官网申请二、公开流程三、拓展四、补充&#xff08;部分公司单独提交cve申请&#xff09; 一、进入官网申请 https://cveform.mitre.org/ 选择申请CVE ID即可。 Vulnerability type翻译&#xff08;chatgpt-3.5&#xff09;buffer overflow缓冲区溢…

如何解决谷歌Chrome浏览器空白页的问题

如何解决谷歌Chrome浏览器空白页的问题 谷歌Chrome浏览器突然不打开任何网页,无论是任何站点(如http://www.baidu.com), 还是Chrome浏览器的设置页面(chrome://settings/), 扩展页面 ( chrome://extensions/ ) , 所有其他浏览器(如IE浏览器,Mozilla Firefox浏览器等)很好…

Vivaldi 6.1发布,可绕过微软限制使用Bing Chat

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 最新版本的 Vivaldi 可在桌面端伪装成 Edge&#xff0c;使其用户受益&#xff0c;并为工作空间和标签增加了更多的功能。 支持微…

安装Chatgdt搜索答辩老师常提的问题

&#x1f345;选题推荐——以防找不到我们&#xff0c;点击上方订阅专栏✌✌ 2024年计算机Java Python安卓APP微信小程序asp.net项目PHP毕业设计2000个热门选题推荐计算机毕业设计如何选题&#xff1f; 计算机毕业设计开题报告如何书写 论文的书写如何写出一篇好论文 计算机毕业…

重磅!微软Bing爆炸级更新!答案图文并茂,网友:逼 ChatGPT 放大招?

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【Transformer】微信技术交流群 杨净 明敏 发自 凹非寺转载自&#xff1a;量子位&#xff08;QbitAI&#xff09; 所有人都能上手微软Bing了&#xff01; 今天&#xff0c;微…

chatgpt赋能python:如何在Python中去掉空行

如何在Python中去掉空行 如果你经常使用Python进行文本处理&#xff0c;你可能会遇到需要去掉文件中的空行&#xff08;或多余的空格&#xff09;的情况。这个问题看似简单&#xff0c;但实际上有多种方法可以解决。在本文中&#xff0c;我们将介绍其中的两种方法&#xff0c;…

chatgpt赋能python:如何在Python中输入空行

如何在Python中输入空行 如果你是一名有10年Python编程经验的工程师&#xff0c;那么你肯定知道Python作为一门高级编程语言&#xff0c;在处理文本时非常灵活。然而&#xff0c;在编写Python代码的过程中&#xff0c;有时候需要在文本中插入一些空行以使其更加易读。本文将介…

chatgpt赋能python:Python如何去除空行?

Python如何去除空行&#xff1f; 在Python编程中&#xff0c;经常会遇到需要去除文本文件或字符串中的空行的情况。空行通常是在文件或字符串中不希望存在的&#xff0c;因为它们可能会影响代码的可读性和执行效率。但是&#xff0c;如何才能在Python中高效地去除空行呢&#…

chatgpt赋能python:如何在Python中添加空行?

如何在Python中添加空行&#xff1f; 如果你是一个有经验的Python工程师&#xff0c;在编写代码时你可能会遇到需要添加空行的情况。但是有几种方法可以实现这一点&#xff0c;你应该用哪种方法呢&#xff1f;在本文中&#xff0c;我们将探讨如何在Python中添加空行以及各种添…

陶瓷工厂的进销存管理系统的设计与实现

毕业设计&#xff08;论文&#xff09; 论文题目XXX陶瓷工厂的进销存管理系统的设计与实现Thesis TopicThe Design and Implementation of the XXX Ceramic Factory Inventory Management System 毕业设计&#xff08;论文&#xff09;任务书 第1页 毕业设计&#xff08;论文&a…

【小程序全面解析】生命周期、常用组件,代码示例和使用场景

文章目录 人工智能福利文章前言小程序生命周期应用生命周期页面生命周期使用场景 小程序的基础组件视图容器表单组件媒体组件 总结写在最后 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎…

超级实用永久免费的软著源代码材料格式文档生成辅助工具——软著源代码生成工具,软著文档生成,软著鉴别材料生成,软著源代码辅助生成

截止2023年5月工具一万次下载啦&#xff01;用过都说好 软著的全称是计算机软件著作权 申请软件著作权登记的时候会被要求提交60页的源代码。没有经验的开发者朋友第一次申请的时候难免会遇到因代码文档格式不正确、代码里含有其他版权信息等原因被要求补正的问题&#xff0c;从…

AidLux AI 应用案例悬赏征集活动正式启动!

ChatGPT爆火之后&#xff0c;AI领域的人才需求迎来了疯狂增长&#xff0c;AI学习也一跃成为业界大热门。 但AI囊括知识广、学习周期长&#xff0c;要克服理论、实战等多重阻碍并不容易。 而持续降低AI学习门槛是我们一直在做的事情。 为此&#xff0c;我们举办了多期AidLux …