最新要闻
- 焦点信息:“学雷锋” 护平安
- 绝了!民间大神将手机魔改成30000mAh电池:续航BT、可两周一充
- 【环球报资讯】可算盼到!苹果一大波春季新品要来了:黄色款iPhone 14在列
- 神速!Android 15全球首曝:代号“香草冰淇淋”相当甜美
- 正直播:感动中国2022年度人物盛典!名单揭晓:满满正能量
- 全球热资讯!代表谈中传硕士在火锅店当保洁:建议大学生先就业再择业
- 简讯:库存多到爆!今年才两个月 SSD价格就跌超3成:还会更便宜?
- 环球热点!男子高速公路狂飙120km/h看《狂飙》:不碰方向盘、不看正前方
- 小米平板6系列来了:外形、CPU配置大曝光!确认新增NFC
- 焦点速读:真心恐怖!南极洲深海拍到罕见冥河水母:触手约10米长
- 跳过中考、高考、研考!15岁女生被西交大少年班录取:8年本硕连读
- 单踏板模式害死人?广东一特斯拉疑失控连撞多车冲毁店门 两人受伤现场惨
- 全球焦点!弯道超车成功!中国新能源汽车产销量全世界第一
- 每日关注!“准点下班被辞”女子申请赔偿一个月工资 公司回应:等仲裁结果
- 环球热资讯!《进击的巨人》最终季完结篇开播 前篇拿下豆瓣9.7分:改编超越原作
- 核心部件100%国产!东风新一代商乘通用氢燃料电池产品完成
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天热点!使用招商银行云直连服务提现
【资料图】
以下代码的功能是用户可以实现业务中用户虚拟钱包的钱提现到用户银行卡,其实本质上是把商户的账户资金划转到用户银行卡,其实就是银行转账,相关代码如下:
///此方法存在部分业务代码,核心方法是doProcess方法且基本是可以复用的,其它的代码可以根据自身业务场景灵活处理;public async TaskWithDrawToBank(TransferToBankDto transferToBankDto) { decimal balance = await _repository.WalletRepository.GetWalletBalance(new Contract.User.UserBasicDto() { WeChatId = transferToBankDto.WeChatId, }); if (balance < transferToBankDto.Amount) { return new WithDrawResultDto() { WithDrawResult = false, Message = "可用余额不够,请重新输入提现金额。" }; } long userId = await _repository.UserRepository.GetUserIdByWeChatId(transferToBankDto.WeChatId); if (userId == 0) { return new WithDrawResultDto() { WithDrawResult = false, Message = "用户不存在" }; } //bool walletToBankResult = await _walletService.WalletToBankAccount(transferToBankDto.WeChatId, userId, transferToBankDto.Amount, (int)WalletCashType.Withdrawing, yurRef); //if (walletToBankResult) //{ Log.Information("begin WithDraw call cloud direct"); string reqId = DCHelper.GetTime() + RandomHelper.GeneratorRandomStr(7); decimal amount = transferToBankDto.Amount; string bankCode = await _repository.BankRepository.QueryBankCodeByBankAccount(userId, transferToBankDto.BankAccount); string bankHolder = await _repository.BankRepository.QueryCardHolder(userId, transferToBankDto.BankAccount); Log.Information($"bankHolder:{bankHolder}"); //记录业务编号 //业务编号记录到数据库 // 组织发送报文 JObject obj = new JObject(); JObject req = new JObject(); JArray bb1paybmx1BodyArray = new JArray(); JObject bb1paybmx1Body = new JObject(); JObject bb1paybmx1Body2 = new JObject(); JArray bb1payopx1BodyArray = new JArray(); JObject bb1payopx1Body = new JObject(); JObject bb1payopx1Body2 = new JObject(); JObject head = new JObject(); head.Add("funcode", FunCode);//FunCode = "BB1PAYOP";功能代码 head.Add("userid", UID);//用户编号,与商户相关 head.Add("reqid", reqId); bb1paybmx1Body.Add("busCod", BusCod);//BusCod = "N02030";业务编码 bb1paybmx1Body.Add("busMod", BusMod);///业务模式 bb1paybmx1BodyArray.Add(bb1paybmx1Body); //bb1paybmx1Body2.Add("bb1paybmx1", bb1paybmx1BodyArray); JArray bb1payopx1 = new JArray(); bb1payopx1Body.Add("dbtAcc", CompanyCard);//公司账号 bb1payopx1Body.Add("crtAcc", transferToBankDto.BankAccount);//收款人账号 bb1payopx1Body.Add("crtNam", bankHolder);//持卡人姓名 bb1payopx1Body.Add("ccyNbr", CurrencyCode);//币种 CurrencyCode = "10";//10代表人民币 bb1payopx1Body.Add("trsAmt", amount.ToString("#0.00")); //bb1payopx1Body.Add("crtBnk", "招商银行深圳分行"); bb1payopx1Body.Add("bnkFlg", (bankCode == CMBCode ? "Y" : "N"));//CMBCodeCMBCode = "CMB";如果是招商银行,bnkFlg的取值是Y bb1payopx1Body.Add("stlChn", StlChn);//StlChn为R代表及时到账 bb1payopx1Body.Add("nusAge", "钱包提现到银行卡"); //bb1payopx1Body.Add("yurRef", "202008260078000033"); bb1payopx1Body.Add("yurRef", yurRef);//业务流水号,可以使用雪花算法生成 bb1payopx1BodyArray.Add(bb1payopx1Body); JObject jobjectBodyList = new JObject(); jobjectBodyList.Add("bb1paybmx1", bb1paybmx1BodyArray); jobjectBodyList.Add("bb1payopx1", bb1payopx1BodyArray); JObject jobjectBody = new JObject(); jobjectBody.Add("body", jobjectBodyList); jobjectBody.Add("head", head); JObject requestBody = new JObject(); requestBody.Add("request", jobjectBody); //bb1payopx1Body2.Add("bb1payopx1", bb1payopx1BodyArray); // 请求发送接收 var withDrawResult = doProcess(requestBody, FunCode); if (withDrawResult.WithDrawResult == true) { bool walletToBankResult = await _walletService.WalletToBankAccount(transferToBankDto.WeChatId, userId, transferToBankDto.Amount, (int)WalletCashType.Withdrawing, yurRef); WithDrawToBankRecord withDrawToBankRecord = new WithDrawToBankRecord (userId: userId, funcode: FunCode, reqid: reqId, busCod: BusCod, busMod: BusMod, dbtAcc: CompanyCard, crtAcc: transferToBankDto.BankAccount, crtNam: bankHolder, ccyNbr: CurrencyCode, trsAmt: amount, bnkFlg: (bankCode == CMBCode ? "Y" : "N"), stlChn: StlChn, nusAge: "钱包提现到银行卡", yurRef: yurRef.ToString(), withdrawStatus: 0,openId: transferToBankDto.OpenId); await _repository.RedPackageRepository.CreateWithDrawToBankRecord(withDrawToBankRecord); await WithDrawSendMsgToClient.SendMsgToClient(openId: transferToBankDto.OpenId, templageId: SuccessTemplateId, amount: amount, withdrawDatetime: DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), WithdrawToBankStatus.Success); } //更新出金时间 await _repository.BankRepository.UpdateWithDrawDateTimeAsync(userId, transferToBankDto.BankAccount); return withDrawResult; //} //else //{ // return new WithDrawResultDto() { WithDrawResult = false,Message="提现失败,请稍后重试." }; //} }
DCHelper辅助类
using Newtonsoft.Json.Linq;using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Security;using System.Security.Cryptography.X509Certificates;using System.Text;using System.Threading.Tasks;namespace Demo.Utils{ public class DCHelper { public static string SerialJsonOrdered(JObject json) { ListkeyList = new List (); foreach (var x in json) { keyList.Add(x.Key); } string[] keyArray = keyList.ToArray(); Array.Sort(keyArray, string.CompareOrdinal); StringBuilder appender = new StringBuilder(); appender.Append("{"); bool isFirstEle = true; foreach (var key in keyArray) { if (!isFirstEle) { appender.Append(","); } Object val = json[key]; if (val is JObject) { appender.Append("\"").Append(key).Append("\":"); appender.Append(SerialJsonOrdered((JObject)val)); } else if (val is JArray) { JArray jarray = (JArray)val; appender.Append("\"").Append(key).Append("\":["); bool isFirstArrEle = true; for (int i = 0; i < jarray.Count; i++) { if (!isFirstArrEle) { appender.Append(","); } Object obj = jarray[i]; if (obj is JObject) { appender.Append(SerialJsonOrdered((JObject)obj)); } else { appender.Append(obj.ToString()); } isFirstArrEle = false; } appender.Append("]"); } else if (((JToken)val).Type == JTokenType.String) { string value = val.ToString(); appender.Append("\"").Append(key).Append("\":").Append("\"").Append(value.Replace("\\", "\\\\")).Append("\""); } else if (((JToken)val).Type == JTokenType.Boolean) { string value = val.ToString().ToLower(); appender.Append("\"").Append(key).Append("\":").Append(value); } else { string value = val.ToString(); appender.Append("\"").Append(key).Append("\":").Append(value); } isFirstEle = false; } appender.Append("}"); return appender.ToString(); } public static String GetTime() { return DateTime.Now.ToString("yyyyMMddHHmmssfff"); } public static String GetTime2() { return DateTime.Now.ToString("yyyyMMddHHmmss"); } // 发送Post请求 public static String DoPostForm(String httpUrl, Hashtable param) { Encoding encoding = Encoding.GetEncoding("utf-8"); HttpWebResponse response = PostHttps(httpUrl, param, encoding); Stream stream = response.GetResponseStream(); StreamReader sr = new StreamReader(stream); return sr.ReadToEnd(); } private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; //信任所有https站点证书,不安全,请勿在生产环境中使用。 } private static HttpWebResponse PostHttps(string url, Hashtable param, Encoding encoding) { HttpWebRequest request = null; //ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult); // 请勿在生产环境中使用该行程序 request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version11; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.Timeout = 15000; request.KeepAlive = false; request.ReadWriteTimeout = 60000; byte[] data = encoding.GetBytes(CreateLinkString(param)); request.ContentLength = data.Length; using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } WebResponse res; try { res = request.GetResponse(); } catch (WebException e) { res = e.Response; } return (HttpWebResponse)res; } private static string CreateLinkString(Hashtable param) { IEnumerator keys = param.Keys.GetEnumerator(); StringBuilder prestr = new StringBuilder(); int i = 0; while (keys.MoveNext()) { i++; string key = keys.Current as string; string value = param[key] as string; if (i == param.Count) { prestr.Append(key).Append("=").Append(value); } else { prestr.Append(key).Append("=").Append(value).Append("&"); } } return prestr.ToString(); } }}
RandomHelper辅助类
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Demo.Utils{ public static class RandomHelper { public static string GeneratorRandomStr(int len) { string chars = "0123456789abcdefghijklmnopqrstuvwxyz"; Random randrom = new Random((int)DateTime.Now.Ticks); string str = ""; for (int i = 0; i < len; i++) { str += chars[randrom.Next(chars.Length)]; } return str; } }}
核心方法:
private WithDrawResultDto doProcess(JObject jObject, string FUNCODE) { JObject obj = new JObject(); // 签名 obj.Add("sigdat", "__signature_sigdat__"); obj.Add("sigtim", DCHelper.GetTime2()); jObject.Add("signature", obj); string source = DCHelper.SerialJsonOrdered(jObject); Console.WriteLine("签名原文: " + source); Log.Information($"{FUNCODE} request data is {source}"); Encoding encoding = Encoding.UTF8; byte[] signature1 = DCCryptor.CMBSM2SignWithSM3(GetID_IV(), Convert.FromBase64String(privkey), encoding.GetBytes(source));//privkey是私钥 string sigdat1 = Convert.ToBase64String(signature1); Console.WriteLine("签名结果: " + sigdat1); obj["sigdat"] = sigdat1; // SM4-CBC加密 string plaintxt = jObject.ToString(); Console.WriteLine("加密前req: " + plaintxt); byte[] enInput = DCCryptor.CMBSM4EncryptWithCBC(encoding.GetBytes(sm4key), GetID_IV(), encoding.GetBytes(plaintxt));//sm4key是用户的对称密钥 string req = Convert.ToBase64String(enInput); Console.WriteLine("加密后req: " + req); Log.Information("begin send request to cloud direct"); // 发送请求 Hashtable map = new Hashtable(); map.Add("UID", UID); map.Add("ALG", ALG_SM);//ALG_SM = "SM";采用国密算法 map.Add("DATA", HttpUtility.UrlEncode(req, encoding)); map.Add("FUNCODE", FUNCODE); string res = DCHelper.DoPostForm(URL, map);//访问招商银行的api请求地址:(测试环境:http://cdctest.cmburl.cn/cdcserver/api/v2;正式环境:https://cdc.cmbchina.com/cdcserver/api/v2) Log.Information("end request"); Console.WriteLine("res: " + res); Log.Information("DoPostForm {@res}", res); try { Convert.FromBase64String(res); } catch (Exception ex) { Console.WriteLine("访问返回错误."); Log.Information(" Convert.FromBase64String error {@ex}", ex); return new() { WithDrawResult = false, Message = "访问返回错误." }; } // 解密请求 string resplain = encoding.GetString(DCCryptor.CMBSM4DecryptWithCBC(encoding.GetBytes(sm4key), GetID_IV(), Convert.FromBase64String(res))); Console.WriteLine("res decrypt: " + resplain); Log.Information($"{FUNCODE} response data is {resplain}"); // 验签 JObject object2 = JObject.Parse(resplain); JObject? object3 = object2["signature"] as JObject; string? resSign = object3?["sigdat"]?.ToString(); object3["sigdat"] = "__signature_sigdat__"; object2["signature"] = object3; string resSignSource = DCHelper.SerialJsonOrdered(object2); Console.WriteLine("验签原文: " + resSignSource); Console.WriteLine("验签签名值: " + resSign); bool verify = DCCryptor.CMBSM2VerifyWithSM3(GetID_IV(), Convert.FromBase64String(bankpubkey), encoding.GetBytes(resSignSource), Convert.FromBase64String(resSign));//bankpubkey:银行公钥 Console.WriteLine("验签结果: " + verify); Log.Information($"验签结果:{verify}"); if (verify) { //验签成功以后正常判断 if (object2["response"]?["head"]?["resultcode"] is not null) { string? resultCode = object2["response"]?["head"]?["resultcode"]?.ToString(); if (resultCode != "SUC0000") { Log.Information($"withdraw hava error,resultmsg is {object2["response"]?["head"]?["resultmsg"]?.ToString()}," + $"resultcode is {object2["response"]?["head"]?["resultcode"]?.ToString()}"); return new() { WithDrawResult = false, Message = object2["response"]?["head"]?["resultmsg"]?.ToString() }; } else { string[] errors = new[] { "F", "B", "R", "D", "C" }; string? rtnFlg = object2["response"]?["body"]?["bb1payopz1"][0]?["rtnFlg"]?.ToString(); if (object2["response"]?["body"]?["bb1payopz1"][0]?["reqSts"]?.ToString() == "FIN" && errors.Contains(rtnFlg)) { Log.Information($"withdraw hava error,errTxt is {object2["response"]?["body"]?["bb1payopz1"][0]?["errTxt"]?.ToString()}," + $"errCod is {object2["response"]?["body"]?["bb1payopz1"][0]?["errCod"]?.ToString()}"); return new() { WithDrawResult = false, Message = object2["response"]?["body"]?["bb1payopz1"][0]?["errTxt"]?.ToString() }; } } } } else { Log.Error("验签失败"); return new() { WithDrawResult = false, Message = "验签失败,请联系系统管理员。" }; } return new() { WithDrawResult = true }; }
私有方法
private byte[] GetID_IV() { String uid = UID; // 请替换为实际的用户UID String userid = uid + "0000000000000000"; return Encoding.UTF8.GetBytes(userid.Substring(0, 16)); }
DCCryptor辅助类
using Org.BouncyCastle.Asn1;using Org.BouncyCastle.Asn1.X9;using Org.BouncyCastle.Crypto;using Org.BouncyCastle.Crypto.Parameters;using Org.BouncyCastle.Crypto.Signers;using Org.BouncyCastle.Math;using Org.BouncyCastle.Math.EC;using Org.BouncyCastle.Security;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Demo.Utils{ public class DCCryptor { public static byte[] CMBSM4EncryptWithCBC(byte[] key, byte[] iv, byte[] input) { if (key == null || iv == null || input == null) { throw new Exception("CMBSM4EncryptWithCBC 非法输入"); } return CMBSM4Crypt(key, iv, input, true); } public static byte[] CMBSM4DecryptWithCBC(byte[] key, byte[] iv, byte[] input) { if (key == null || iv == null || input == null) { throw new Exception("CMBSM4DecryptWithCBC 非法输入"); } return CMBSM4Crypt(key, iv, input, false); } public static byte[] CMBSM2SignWithSM3(byte[] id, byte[] privkey, byte[] msg) { if (privkey == null || msg == null) { throw new Exception("CMBSM2SignWithSM3 input error"); } ECPrivateKeyParameters privateKey = EncodePrivateKey(privkey); SM2Signer signer = new SM2Signer(); ParametersWithID parameters = new ParametersWithID(privateKey, id); signer.Init(true, parameters); signer.BlockUpdate(msg, 0, msg.Length); return DecodeDERSignature(signer.GenerateSignature()); } public static bool CMBSM2VerifyWithSM3(byte[] id, byte[] pubkey, byte[] msg, byte[] signature) { if (pubkey == null || msg == null || signature == null) { throw new Exception("CMBSM2VerifyWithSM3 input error"); } ECPublicKeyParameters publicKey = EncodePublicKey(pubkey); SM2Signer signer = new SM2Signer(); ParametersWithID parameters = new ParametersWithID(publicKey, id); signer.Init(false, parameters); signer.BlockUpdate(msg, 0, msg.Length); return signer.VerifySignature(EncodeDERSignature(signature)); } private static byte[] CMBSM4Crypt(byte[] keyBytes, byte[] iv, byte[] input, bool forEncrypt) { KeyParameter key = ParameterUtilities.CreateKeyParameter("SM4", keyBytes); ParametersWithIV ivParameterSpec = new ParametersWithIV(key, iv); IBufferedCipher cipher = CipherUtilities.GetCipher("SM4/CBC/PKCS7Padding"); cipher.Init(forEncrypt, ivParameterSpec); return cipher.DoFinal(input); } private static ECPrivateKeyParameters EncodePrivateKey(byte[] value) { BigInteger d = new BigInteger(1, value); X9ECParameters spec = ECNamedCurveTable.GetByName("sm2p256v1"); ECDomainParameters ecParameters = new ECDomainParameters(spec.Curve, spec.G, spec.N, spec.H, spec.GetSeed()); return new ECPrivateKeyParameters(d, ecParameters); } public static ECPublicKeyParameters EncodePublicKey(byte[] value) { byte[] x = new byte[32]; byte[] y = new byte[32]; Array.Copy(value, 1, x, 0, 32); Array.Copy(value, 33, y, 0, 32); BigInteger X = new BigInteger(1, x); BigInteger Y = new BigInteger(1, y); X9ECParameters spec = ECNamedCurveTable.GetByName("sm2p256v1"); ECPoint Q = spec.Curve.CreatePoint(X, Y); ECDomainParameters ecParameters = new ECDomainParameters(spec.Curve, spec.G, spec.N, spec.H, spec.GetSeed()); return new ECPublicKeyParameters(Q, ecParameters); } private static byte[] DecodeDERSignature(byte[] signature) { Asn1InputStream stream = new Asn1InputStream(signature); Asn1Sequence primitive = (Asn1Sequence)stream.ReadObject(); System.Collections.IEnumerator enumeration = primitive.GetEnumerator(); enumeration.MoveNext(); BigInteger R = ((DerInteger)enumeration.Current).Value; enumeration.MoveNext(); BigInteger S = ((DerInteger)enumeration.Current).Value; byte[] bytes = new byte[64]; byte[] r = Format(R.ToByteArray()); byte[] s = Format(S.ToByteArray()); Array.Copy(r, 0, bytes, 0, 32); Array.Copy(s, 0, bytes, 32, 32); return bytes; } private static byte[] EncodeDERSignature(byte[] signature) { byte[] r = new byte[32]; byte[] s = new byte[32]; Array.Copy(signature, 0, r, 0, 32); Array.Copy(signature, 32, s, 0, 32); Asn1EncodableVector vector = new Asn1EncodableVector(); vector.Add(new DerInteger(new BigInteger(1, r))); vector.Add(new DerInteger(new BigInteger(1, s))); return (new DerSequence(vector)).GetEncoded(); } private static byte[] Format(byte[] value) { if (value.Length == 32) { return value; } else { byte[] bytes = new byte[32]; if (value.Length > 32) { Array.Copy(value, value.Length - 32, bytes, 0, 32); } else { Array.Copy(value, 0, bytes, 32 - value.Length, value.Length); } return bytes; } } }}
全球实时:使用ELRepo升级CentOS内核
天天热点!使用招商银行云直连服务提现
新动态:TCP通信聊天服务端和客户端(C/C++语言开发)附完整源码
焦点信息:“学雷锋” 护平安
绝了!民间大神将手机魔改成30000mAh电池:续航BT、可两周一充
【环球报资讯】可算盼到!苹果一大波春季新品要来了:黄色款iPhone 14在列
全球观热点:二叉树遍历的操作与实现
神速!Android 15全球首曝:代号“香草冰淇淋”相当甜美
正直播:感动中国2022年度人物盛典!名单揭晓:满满正能量
全球热资讯!代表谈中传硕士在火锅店当保洁:建议大学生先就业再择业
简讯:库存多到爆!今年才两个月 SSD价格就跌超3成:还会更便宜?
环球热点!男子高速公路狂飙120km/h看《狂飙》:不碰方向盘、不看正前方
小米平板6系列来了:外形、CPU配置大曝光!确认新增NFC
焦点速读:真心恐怖!南极洲深海拍到罕见冥河水母:触手约10米长
【世界热闻】无/低代码开发平台(产品)
跳过中考、高考、研考!15岁女生被西交大少年班录取:8年本硕连读
单踏板模式害死人?广东一特斯拉疑失控连撞多车冲毁店门 两人受伤现场惨
The Missing Semester - 第五讲 学习笔记
记录--在Vue3这样子写页面更快更高效
全球今日讯!打开MASA Blazor的正确姿势5:插槽
全球焦点!弯道超车成功!中国新能源汽车产销量全世界第一
每日关注!“准点下班被辞”女子申请赔偿一个月工资 公司回应:等仲裁结果
定位解析一个因脚本劫持导致webpack动态加载异常的问题
全球热文:python名称空间和作用域
天天实时:定位Dll加载异常的方法
环球热资讯!《进击的巨人》最终季完结篇开播 前篇拿下豆瓣9.7分:改编超越原作
核心部件100%国产!东风新一代商乘通用氢燃料电池产品完成
世界热文:同档网络无敌!一加Ace 2V搭载自研的游戏云专网技术
第五章 运输层
代表建议试行十二年义务教育:中考定终身太早 拒绝小学初中内卷
一男子和峨眉山猴子练搏击互殴 当事人回应:条件反射、请勿模仿
【全球新要闻】(数据库系统概论|王珊)第九章关系查询处理和关系优化-第二节:查询优化
轻松玩转Makefile | 企业项目级Makefile实例
精选! 《狂飙》“大嫂”高叶上手小米13:徕卡人像实拍样张美呆
天天时讯:3端通用!腾讯视频VIP会员年卡148元到手
当前快讯:董明珠称格力不看文凭只看能力:研究生到一线生产线非人才
济南动物园网红小黑猩猩“柒仔”去世:初步研判系突发疾病死亡
每日热议!奔驰4S店展车充新车 女子上门维权:被骗了、将走法律程序
天天快资讯丨突发!蔚来前实习生称遭同事强奸未遂 反被拒绝留用!公司:已成立调查组
“清籁”琴
环球观点:5-Nacos注册中心
灭蟑螂小窍门厨房_灭蟑螂小窍门
关于目录问题的总结-Python
天天即时看!实现js继承的几种方式以及他们的优缺点
今热点:AI修复图片画质和视频画质的方法
【热闻】数学建模(一):LP 问题
【新要闻】如何去除新家的甲醛_如何去除新家的甲醛
2023年2月随笔-难产的“学系列”
关注:乘风破浪,遇见最佳跨平台跨终端框架.Net Core/.Net生态 - 深入OpenAI与马斯克、微软的秘密,通过API轻松接入ChatGPT
天天热推荐:git clone的时候出现出现 fatal: unable to access 'https://github.com/...':OpenSSL
第125篇: 期约Promise基本特性
环球速递!kong和konga的安装部署
视焦点讯!腾讯云短信的使用方法
06while循环
环球热头条丨外星人AW620M无线鼠标上市:26000 DPI、140小时长续航
世界简讯:PC优化翻车!《卧龙:苍天陨落》官方道歉:将尽快推出更新补丁
环球头条:多线程全面总结
怎么注册微信公众号?
Pro版同款!荣耀Magic5至臻版影像泄露:5000万像素旗舰三摄
今日要闻!《LOL》英雄价格正式调整!全面下调
全球热议:理想L9车主实惨:白天打开星环模式灯 扣1分罚款100元?
iPhone良品率不足50%也不怕 富士康又在印度设立新工厂
小鹏汽车欲靠P7“回血”:老款清库再降3.5万、新车下周上市
降价后真香了!特斯拉中国2月销量出炉:暴涨130%
9.98万起杀疯!比亚迪王朝系列2月销量超10万台:秦PLUS贡献3成
2月新能源汽车销量榜:比亚迪一家占比近4成 第三名暴走
世界资讯:委员蒋胜男谈35岁职场危机:根源是“996” 必须改变
今日讯!中国性能车!全新领克03 TCR赛车官图发布:售价超百万
排查系统执行SQL与数据库直接执行结果不一致的问题
每日资讯:详细剖析|袋鼠云数栈前端框架Antd 3.x 升级 4.x 的踩坑之路
记录--手摸手带你撸一个拖拽效果
天天讯息:VSCode官方的配置同步方案
快报:144MB缓存立大功 AMD锐龙7000X3D内存自由:4800都稳赢i9
环球观点:AMD RX 7900 XT价格全面雪崩:沦落到RTX 4070 Ti的级别
《旷野之息》发售6周年:续作《塞尔达传说:王国之泪》发布新预告
当前视点!中国围棋第一人易主!李轩豪超越柯洁 AI立大功
环球快讯:vivo推出“手语翻译官”应用:准确率可达80%以上
网络通信——TCP “三次握手“、“四次挥手“ 详解
PHP语言在线代码运行编译工具推荐
今日报丨JavaScript 回调函数属于闭包?
全球快看:ChatGPT开放API,上来就干到最低价,可以人手一个ChatGPT了
全球新动态:Spring事务使用注意事项
【全球独家】限制儿童支付金额方便了!微信青少年模式升级:一键开启上线
三排七座!仰望U8内饰曝光:比亚迪首款百万豪车来了
世界热门:刚失败一次后 日本不放弃:新一代运载火箭尝试再度发射
热到离谱?首个冲上20℃的北方省会诞生 下周或破30℃
欧洲2035年禁售燃油车要黄?德国公然反对!意大利:我也不同意
环球精选!登月用!中国新一代载人火箭预计2027年首飞
天天即时:《狂飙》“大嫂”高叶上手小米13:女神持机美如画
全球观速讯丨火山引擎 DataTester:A/B 实验如何实现人群智能化定向?
环球快资讯丨Redis分布式锁常见坑点分析
世界今日讯!eas里客户端保存,提交里增加校验规则和必填
访问者模式
世界微动态丨网友偶遇眼镜王蛇求助 博物杂志:务必远离、打输住院打赢坐牢
世界今亮点!Vtuber因直播《霍格沃茨之遗》被骚扰 宣布毕业
天天讯息:委员建议研究生招生规模动态扩大:缓解考研难
全球聚焦:收个滴滴Offer:从小伙三面经历,看看需要学点啥?
环球热资讯!Study for Go! Chapter one - Type
环球最新:手写模拟Spring底层原理-Bean的创建与获取
速看:兰博基尼领衔 今年值得期待的7款跑车 买不起还不能看看?