1. 案例的作用及用法参考该类的说明注释
  2. 工具类分别有:
  3. package cn.itcast.utils;
  4. import java.util.Properties;
  5. /**
  6. * 读取配置文件
  7. *
  8. */
  9. public class ConfigInfo {
  10. private static Properties cache = new Properties();
  11. static{
  12. try {
  13. cache.load(ConfigInfo.class.getClassLoader().getResourceAsStream("merchantInfo.properties"));
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. /**
  19. * 获取指定key的值
  20. * @param key
  21. * @return
  22. */
  23. public static String getValue(String key){
  24. return cache.getProperty(key);
  25. }
  26. }
  27. package cn.itcast.utils;
  28. import java.io.UnsupportedEncodingException;
  29. import java.security.MessageDigest;
  30. import java.security.NoSuchAlgorithmException;
  31. import java.util.Arrays;
  32. /**
  33. * md5-hmac算法加密类
  34. */
  35. public class DigestUtil {
  36. private static String encodingCharset = "UTF-8";
  37. public static String hmacSign(String aValue, String aKey) {
  38. byte k_ipad[] = new byte[64];
  39. byte k_opad[] = new byte[64];
  40. byte keyb[];
  41. byte value[];
  42. try {
  43. keyb = aKey.getBytes(encodingCharset);
  44. value = aValue.getBytes(encodingCharset);
  45. } catch (UnsupportedEncodingException e) {
  46. keyb = aKey.getBytes();
  47. value = aValue.getBytes();
  48. }
  49. Arrays.fill(k_ipad, keyb.length, 64, (byte) 54);
  50. Arrays.fill(k_opad, keyb.length, 64, (byte) 92);
  51. for (int i = 0; i < keyb.length; i++) {
  52. k_ipad[i] = (byte) (keyb[i] ^ 0x36);
  53. k_opad[i] = (byte) (keyb[i] ^ 0x5c);
  54. }
  55. MessageDigest md = null;
  56. try {
  57. md = MessageDigest.getInstance("MD5");
  58. } catch (NoSuchAlgorithmException e) {
  59. return null;
  60. }
  61. md.update(k_ipad);
  62. md.update(value);
  63. byte dg[] = md.digest();
  64. md.reset();
  65. md.update(k_opad);
  66. md.update(dg, 0, 16);
  67. dg = md.digest();
  68. return toHex(dg);
  69. }
  70. public static String toHex(byte input[]) {
  71. if (input == null)
  72. return null;
  73. StringBuffer output = new StringBuffer(input.length * 2);
  74. for (int i = 0; i < input.length; i++) {
  75. int current = input[i] & 0xff;
  76. if (current < 16)
  77. output.append("0");
  78. output.append(Integer.toString(current, 16));
  79. }
  80. return output.toString();
  81. }
  82. /**
  83. *
  84. * @param args
  85. * @param key
  86. * @return
  87. */
  88. public static String getHmac(String[] args, String key) {
  89. if (args == null || args.length == 0) {
  90. return (null);
  91. }
  92. StringBuffer str = new StringBuffer();
  93. for (int i = 0; i < args.length; i++) {
  94. str.append(args[i]);
  95. }
  96. return (hmacSign(str.toString(), key));
  97. }
  98. /**
  99. * @param aValue
  100. * @return
  101. */
  102. public static String digest(String aValue) {
  103. aValue = aValue.trim();
  104. byte value[];
  105. try {
  106. value = aValue.getBytes(encodingCharset);
  107. } catch (UnsupportedEncodingException e) {
  108. value = aValue.getBytes();
  109. }
  110. MessageDigest md = null;
  111. try {
  112. md = MessageDigest.getInstance("SHA");
  113. } catch (NoSuchAlgorithmException e) {
  114. e.printStackTrace();
  115. return null;
  116. }
  117. return toHex(md.digest(value));
  118. }
  119. }
  120. package cn.itcast.utils;
  121. public class PanymentUtil {
  122. /**
  123. * 生成hmac方法
  124. *
  125. * @param p0_Cmd 业务类型
  126. * @param p1_MerId 商户编号
  127. * @param p2_Order 商户订单号
  128. * @param p3_Amt 支付金额
  129. * @param p4_Cur 交易币种
  130. * @param p5_Pid 商品名称
  131. * @param p6_Pcat 商品种类
  132. * @param p7_Pdesc 商品描述
  133. * @param p8_Url 商户接收支付成功数据的地址
  134. * @param p9_SAF 送货地址
  135. * @param pa_MP 商户扩展信息
  136. * @param pd_FrpId 银行编码
  137. * @param pr_NeedResponse 应答机制
  138. * @param keyValue 商户密钥
  139. * @return
  140. */
  141. public static String buildHmac(String p0_Cmd,String p1_MerId,
  142. String p2_Order, String p3_Amt, String p4_Cur,String p5_Pid, String p6_Pcat,
  143. String p7_Pdesc,String p8_Url, String p9_SAF,String pa_MP,String pd_FrpId,
  144. String pr_NeedResponse,String keyValue) {
  145. StringBuffer sValue = new StringBuffer();
  146. // 业务类型
  147. sValue.append(p0_Cmd);
  148. // 商户编号
  149. sValue.append(p1_MerId);
  150. // 商户订单号
  151. sValue.append(p2_Order);
  152. // 支付金额
  153. sValue.append(p3_Amt);
  154. // 交易币种
  155. sValue.append(p4_Cur);
  156. // 商品名称
  157. sValue.append(p5_Pid);
  158. // 商品种类
  159. sValue.append(p6_Pcat);
  160. // 商品描述
  161. sValue.append(p7_Pdesc);
  162. // 商户接收支付成功数据的地址
  163. sValue.append(p8_Url);
  164. // 送货地址
  165. sValue.append(p9_SAF);
  166. // 商户扩展信息
  167. sValue.append(pa_MP);
  168. // 银行编码
  169. sValue.append(pd_FrpId);
  170. // 应答机制
  171. sValue.append(pr_NeedResponse);
  172. String sNewString = DigestUtil.hmacSign(sValue.toString(), keyValue);
  173. return sNewString;
  174. }
  175. /**
  176. * 返回校验hmac方法
  177. *
  178. * @param hmac 支付网关发来的加密验证码
  179. * @param p1_MerId 商户编号
  180. * @param r0_Cmd 业务类型
  181. * @param r1_Code 支付结果
  182. * @param r2_TrxId 易宝支付交易流水号
  183. * @param r3_Amt 支付金额
  184. * @param r4_Cur 交易币种
  185. * @param r5_Pid 商品名称
  186. * @param r6_Order 商户订单号
  187. * @param r7_Uid 易宝支付会员ID
  188. * @param r8_MP 商户扩展信息
  189. * @param r9_BType 交易结果返回类型
  190. * @param keyValue 密钥
  191. * @return
  192. */
  193. public static boolean verifyCallback(String hmac, String p1_MerId,
  194. String r0_Cmd, String r1_Code, String r2_TrxId, String r3_Amt,
  195. String r4_Cur, String r5_Pid, String r6_Order, String r7_Uid,
  196. String r8_MP, String r9_BType, String keyValue) {
  197. StringBuffer sValue = new StringBuffer();
  198. // 商户编号
  199. sValue.append(p1_MerId);
  200. // 业务类型
  201. sValue.append(r0_Cmd);
  202. // 支付结果
  203. sValue.append(r1_Code);
  204. // 易宝支付交易流水号
  205. sValue.append(r2_TrxId);
  206. // 支付金额
  207. sValue.append(r3_Amt);
  208. // 交易币种
  209. sValue.append(r4_Cur);
  210. // 商品名称
  211. sValue.append(r5_Pid);
  212. // 商户订单号
  213. sValue.append(r6_Order);
  214. // 易宝支付会员ID
  215. sValue.append(r7_Uid);
  216. // 商户扩展信息
  217. sValue.append(r8_MP);
  218. // 交易结果返回类型
  219. sValue.append(r9_BType);
  220. String sNewString = DigestUtil.hmacSign(sValue.toString(), keyValue);
  221. if (hmac.equals(sNewString)) {
  222. return true;
  223. }
  224. return false;
  225. }
  226. }
  227. Servlet相关的类
  228. package cn.itcast.servlet;
  229. import java.io.IOException;
  230. import javax.servlet.ServletException;
  231. import javax.servlet.http.HttpServlet;
  232. import javax.servlet.http.HttpServletRequest;
  233. import javax.servlet.http.HttpServletResponse;
  234. import cn.itcast.utils.ConfigInfo;
  235. import cn.itcast.utils.PanymentUtil;
  236. /**
  237. * 发起支付请求
  238. * @author 传智播客
  239. *
  240. */
  241. public class PaymentRequest extends HttpServlet {
  242. public void doGet(HttpServletRequest request, HttpServletResponse response)
  243. throws ServletException, IOException {
  244. this.doPost(request, response);
  245. }
  246. public void doPost(HttpServletRequest request, HttpServletResponse response)
  247. throws ServletException, IOException {
  248. request.setCharacterEncoding("GBK");
  249. String orderid = request.getParameter("orderid");//订单号
  250. String amount = request.getParameter("amount");//支付金额
  251. String pd_FrpId = request.getParameter("pd_FrpId");//选择的支付银行
  252. String p1_MerId = ConfigInfo.getValue("p1_MerId");
  253. String keyValue = ConfigInfo.getValue("keyValue");
  254. String merchantCallbackURL = ConfigInfo.getValue("merchantCallbackURL");
  255. String messageType = "Buy"; // 请求命令,在线支付固定为Buy
  256. String currency = "CNY"; // 货币单位
  257. String productDesc = ""; // 商品描述
  258. String productCat = ""; // 商品种类
  259. String productId = ""; // 商品ID
  260. String addressFlag = "0"; // 需要填写送货信息 0:不需要 1:需要
  261. String sMctProperties = ""; // 商家扩展信息
  262. String pr_NeedResponse = "0"; // 应答机制
  263. String md5hmac = PanymentUtil.buildHmac(messageType, p1_MerId, orderid, amount, currency,
  264. productId, productCat, productDesc, merchantCallbackURL, addressFlag, sMctProperties,
  265. pd_FrpId, pr_NeedResponse, keyValue);
  266. request.setAttribute("messageType", messageType);
  267. request.setAttribute("merchantID", p1_MerId);
  268. request.setAttribute("orderId", orderid);
  269. request.setAttribute("amount", amount);
  270. request.setAttribute("currency", currency);
  271. request.setAttribute("productId", productId);
  272. request.setAttribute("productCat", productCat);
  273. request.setAttribute("productDesc", productDesc);
  274. request.setAttribute("merchantCallbackURL", merchantCallbackURL);
  275. request.setAttribute("addressFlag", addressFlag);
  276. request.setAttribute("sMctProperties", sMctProperties);
  277. request.setAttribute("frpId", pd_FrpId);
  278. request.setAttribute("pr_NeedResponse", pr_NeedResponse);
  279. request.setAttribute("hmac", md5hmac);
  280. request.getRequestDispatcher("/WEB-INF/page/connection.jsp").forward(request, response);
  281. }
  282. }
  283. package cn.itcast.servlet;
  284. import java.io.IOException;
  285. import javax.servlet.ServletException;
  286. import javax.servlet.http.HttpServlet;
  287. import javax.servlet.http.HttpServletRequest;
  288. import javax.servlet.http.HttpServletResponse;
  289. import cn.itcast.utils.ConfigInfo;
  290. import cn.itcast.utils.PanymentUtil;
  291. /**
  292. * 响应银行支付结果请求
  293. * @author 传智播客
  294. *
  295. */
  296. public class PaymentResutlResponse extends HttpServlet {
  297. public void doGet(HttpServletRequest request, HttpServletResponse response)
  298. throws ServletException, IOException {
  299. this.doPost(request, response);
  300. }
  301. public void doPost(HttpServletRequest request, HttpServletResponse response)
  302. throws ServletException, IOException {
  303. request.setCharacterEncoding("GBK");
  304. String merchantID = ConfigInfo.getValue("p1_MerId"); // 商家ID
  305. String keyValue = ConfigInfo.getValue("keyValue"); // 商家密钥
  306. String sCmd = request.getParameter("r0_Cmd"); //业务类型
  307. String sResultCode = request.getParameter("r1_Code"); //扣款结果,该字段值为1时表示扣款成功.
  308. String sTrxId = request.getParameter("r2_TrxId"); //YeePay易宝交易订单号
  309. String amount = request.getParameter("r3_Amt");//扣款金额,交易结束后,YeePay易宝交易系统将实际扣款金额返回给商户
  310. String currency = request.getParameter("r4_Cur");//交易币种,人民币为CNY
  311. String productId = request.getParameter("r5_Pid");//商品ID
  312. String orderId = request.getParameter("r6_Order");//商户订单号
  313. String userId = request.getParameter("r7_Uid");//YeePay易宝会员ID
  314. String mp  = request.getParameter("r8_MP");//商户扩展信息,可以任意填写1K 的字符串,交易返回时将原样返回
  315. String bType = request.getParameter("r9_BType");//交易结果通知类型,1: 交易成功回调(浏览器重定向)2: 交易成功主动通知(服务器点对点通讯)
  316. String rb_BankId  = request.getParameter("rb_BankId");//支付银行
  317. String rp_PayDate = request.getParameter("rp_PayDate");//在银行支付时的时间
  318. String hmac = request.getParameter("hmac");//MD5交易签名
  319. boolean result = PanymentUtil.verifyCallback(hmac, merchantID, sCmd, sResultCode, sTrxId, amount,
  320. currency, productId, orderId, userId, mp, bType, keyValue);
  321. if(result){
  322. if("1".equals(sResultCode)){
  323. //你们这个地方应该把数据库中订单的支付状态设置成已经支付.
  324. String message = "订单号为:"+ orderId+ "的订单支付成功了";
  325. message += ",用户支付了"+ amount +"元";
  326. message +=",交易结果通知类型:";
  327. if("1".equals(bType)){
  328. message += "浏览器重定向";
  329. }else if("2".equals(bType)){
  330. message += "易宝支付网关后台程序通知";
  331. }
  332. message += ",易宝订单系统中的订单号为:"+ sTrxId;
  333. request.setAttribute("message", message);
  334. }else{
  335. request.setAttribute("message", "用户支付失败");
  336. }
  337. }else{
  338. request.setAttribute("message", "数据来源不合法");
  339. }
  340. request.getRequestDispatcher("/WEB-INF/page/paymentResult.jsp").forward(request, response);
  341. }
  342. }
  343. 显示界面jsp
  344. <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
  345. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  346. <html>
  347. <head>
  348. <title>巴巴运动网_支付第一步,选择支付银行</title>
  349. <meta http-equiv="pragma" content="no-cache">
  350. <meta http-equiv="cache-control" content="no-cache">
  351. <meta http-equiv="expires" content="0">
  352. </head>
  353. <body>
  354. <table width="960" border="0" align="center">
  355. <tr>
  356. <td width="536" valign="top">
  357. <form action="${pageContext.request.contextPath}/servlet/yeepay/paymentRequest" method="post" name="paymentform">
  358. <table width="100%" border="0">
  359. <tr>
  360. <td height="30" colspan="4"><table width="100%" height="50" border="0" cellpadding="0" cellspacing="1" bgcolor="#A2E0FF">
  361. <tr>
  362. <td align="center" bgcolor="#F7FEFF"><h3>订单号:<INPUT TYPE="text" NAME="orderid"> 应付金额:¥<INPUT TYPE="text" NAME="amount" size="6">元</h3></td>
  363. </tr>
  364. </table></td>
  365. </tr>
  366. <tr>
  367. <td colspan="4"> </td>
  368. </tr>
  369. <tr>
  370. <td height="30" colspan="4" bgcolor="#F4F8FF"><span class="STYLE3">请您选择在线支付银行</span> </td>
  371. </tr>
  372. <tr>
  373. <td width="26%" height="25"><INPUT TYPE="radio" NAME="pd_FrpId" value="CMBCHINA-NET">招商银行 </td>
  374. <td width="25%" height="25"><INPUT TYPE="radio" NAME="pd_FrpId" value="ICBC-NET">工商银行</td>
  375. <td width="25%" height="25"><INPUT TYPE="radio" NAME="pd_FrpId" value="ABC-NET">农业银行</td>
  376. <td width="24%" height="25"><INPUT TYPE="radio" NAME="pd_FrpId" value="CCB-NET">建设银行 </td>
  377. </tr>
  378. <tr>
  379. <td height="25"><INPUT TYPE="radio" NAME="pd_FrpId" value="CMBC-NET">中国民生银行总行</td>
  380. <td height="25"><INPUT TYPE="radio" NAME="pd_FrpId" value="CEB-NET" >光大银行 </td>
  381. <td height="25"><INPUT TYPE="radio" NAME="pd_FrpId" value="BOCO-NET">交通银行</td>
  382. <td height="25"><INPUT TYPE="radio" NAME="pd_FrpId" value="SDB-NET">深圳发展银行</td>
  383. </tr>
  384. <tr>
  385. <td height="25"><INPUT TYPE="radio" NAME="pd_FrpId" value="BCCB-NET">北京银行</td>
  386. <td height="25"><INPUT TYPE="radio" NAME="pd_FrpId" value="CIB-NET">兴业银行 </td>
  387. <td height="25"><INPUT TYPE="radio" NAME="pd_FrpId" value="SPDB-NET">上海浦东发展银行 </td>
  388. <td ><INPUT TYPE="radio" NAME="pd_FrpId" value="ECITIC-NET">中信银行</td>
  389. </tr>
  390. <tr>
  391. <td colspan="4"> </td>
  392. </tr>
  393. <tr>
  394. <td colspan="4" align="center"><input type="submit" value=" 确认支付 " /></td>
  395. </tr>
  396. </table>
  397. </form>   </td>
  398. <td colspan="2" valign="top"><div class="divts"><table width="400" border="0" align="center" cellpadding="5" cellspacing="0">
  399. <tr>
  400. <td bgcolor="#F4F8FF"><span class="STYLE5"> 温馨提示</span></td>
  401. </tr>
  402. <tr>
  403. <td><ul><li> 建行客户需到柜面签约网上银行才能支付</li>
  404. <li>请关闭弹出窗口拦截功能</li>
  405. <li>务必使用IE5.0以上浏览器</li>
  406. <li>支付出错时勿按IE“后退”键</li>
  407. </ul></td>
  408. </tr>
  409. </table>
  410. </div>
  411. <div id="blankmessage"></div>   </td>
  412. </tr>
  413. <tr>
  414. <td> </td>
  415. <td width="290"> </td>
  416. <td width="120"> </td>
  417. </tr>
  418. </table>
  419. </body>
  420. </html>
  421. 发起支付请求
  422. <%@ page language="java" pageEncoding="GBK"%>
  423. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  424. <html>
  425. <head>
  426. <title>发起支付请求</title>
  427. <meta http-equiv="pragma" content="no-cache">
  428. <meta http-equiv="cache-control" content="no-cache">
  429. <meta http-equiv="expires" content="0">
  430. </head>
  431. <body οnlοad="javascript:document.forms[0].submit()">
  432. <!-- http://tech.yeepay.com:8080/robot/debug.action -->
  433. <form name="yeepay" action="https://www.yeepay.com/app-merchant-proxy/node" method='post'>
  434. <input type='hidden' name='p0_Cmd'   value="${messageType}"> <!-- 请求命令,在线支付固定为Buy -->
  435. <input type='hidden' name='p1_MerId' value="${merchantID}"> <!-- 商家ID -->
  436. <input type="hidden" name="p2_Order" value="${orderId}"> <!-- 商家的交易定单号 -->
  437. <input type='hidden' name='p3_Amt'   value="${amount}"> <!-- 订单金额 -->
  438. <input type='hidden' name='p4_Cur'   value="${currency}"> <!-- 货币单位 -->
  439. <input type='hidden' name='p5_Pid'   value="${productId}"> <!-- 商品ID -->
  440. <input type='hidden' name='p6_Pcat'  value="${productCat}"> <!-- 商品种类 -->
  441. <input type='hidden' name='p7_Pdesc' value="${productDesc}"> <!-- 商品描述 -->
  442. <input type='hidden' name='p8_Url'   value="${merchantCallbackURL}"> <!-- 交易结果通知地址 -->
  443. <input type='hidden' name='p9_SAF'   value="${addressFlag}"> <!-- 需要填写送货信息 0:不需要 1:需要 -->
  444. <input type='hidden' name='pa_MP'    value="${sMctProperties}"> <!-- 商家扩展信息 -->
  445. <input type='hidden' name='pd_FrpId' value="${frpId}"> <!-- 银行ID -->
  446. <!-- 应答机制 为“1”: 需要应答机制;为“0”: 不需要应答机制 -->
  447. <input type="hidden" name="pr_NeedResponse"  value="0">
  448. <input type='hidden' name='hmac' value="${hmac}"><!-- MD5-hmac验证码 -->
  449. </form>
  450. </body>
  451. </html>
  452. 支付结果
  453. <%@ page language="java" pageEncoding="GBK"%>
  454. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  455. <html>
  456. <head>
  457. <title>支付结果</title>
  458. <meta http-equiv="pragma" content="no-cache">
  459. <meta http-equiv="cache-control" content="no-cache">
  460. <meta http-equiv="expires" content="0">
  461. </head>
  462. <body >
  463. <center><h3><font color="red">
  464. ${message }
  465. </font></h3></center>
  466. </body>
  467. </html>

转载于:https://www.cnblogs.com/chenchangyan/p/3539667.html

网上支付心案例payment相关推荐

  1. 开发自己的网上支付案例代码(易宝支付php)

    1.简单的图解(如上所示) 易宝支付与支付宝是不一样的,但也有类似之处,支付宝是专门为淘宝软件开发的一套机制,资金会在中间支付公司(支付宝)停留,等待顾客确认,当顾客确认后,才会真正扣钱.而易宝支付时 ...

  2. 浅议网上支付系统关键技术探究

    [论文摘要:电子商务 网上支付系统 技术策略 [论文摘要我国电子商务和网上交易近年来取得了较大的发展 ,然而网上支付成为我国电子商务发展的瓶颈之一.因此 ,解决网上支付新问题是发展电子商务的必要环节. ...

  3. 计算机科学与探索支付宝,中国第三方网上支付发展研究-以支付宝为例(毕业论文).doc...

    毕业设计(论文) 中国第三方网上支付发展研究 -以支付宝为例 学 院 专 业 年级班别 学 号 学生姓名 指导教师 年 月 PAGE III 摘要 当今信息时代,科学技术的迅猛发展,IT人员潜入研究计 ...

  4. 从携程信用卡信息泄露事件谈网上支付安全

    最近携程被爆信用卡信息泄露事件,事件内容:http://www.wooyun.org/bugs/wooyun-2010-054302 携程声明:http://pages.ctrip.com/comme ...

  5. 小谈一下农业银行的信用卡网上支付使用感受

    先从申请开始吧.首先是审批审了大概一个月,申下来也就3000元的额度,当时办理这张卡是因为自己老家是县城,信用卡打款不需要手续费,省一分是一分啊.所以就申请了这张信用卡,在这之后我陆续有了交通银行,招 ...

  6. 电子商务中的网上支付解决方案

    电子商务中的网上支付解决方案 一.引言 随着中小企业对电子商务应用程度的深入,越来越多的企业希望在自己的网站上能与顾客实现在线交易,而网上支付问题则是在线交易中的关键问题.对于中小企业而言,可以通过哪 ...

  7. 网上支付、协议支付与快捷支付区别

    区别 网上支付 快捷支付(以支付宝为例) 协议支付(以支付宝卡通为例) 客户体验 支付时需要输入银行账号和交易密码等多个步骤才能完成支付. 支付时只需输入支付宝账户的支付密码(或无需输入)即可完成支付 ...

  8. 接口应用练习题(用接口的方式实现某网上商城的网上支付功能)

    package com.Summer_0427.cn; /*** @author Summer* 用接口的方式实现某网上商城的网上支付功能*/ interface WebBank{void webSe ...

  9. 同理心案例及故事分享_神经形态,视觉可及性和同理心

    同理心案例及故事分享 "A good UX designer has empathy". "优秀的UX设计人员具有同理心". This is something ...

最新文章

  1. matlab pca 测试样本,matlab_PCA,训练集与测试集分开,原理和用法
  2. Matlab 自带机器学习算法汇总
  3. Html5 dragdrop
  4. 一步步编写操作系统 44 用c语言编写内核1
  5. Bugtags 2016-06-16 更新内容
  6. 计算机硬盘的扇区大小,硬盘扇区编辑功能概述 - DiskGenius
  7. android 纯c/c++开发(转)
  8. 如何在 Mac 上轻松编辑、批注、签名和标记 PDF?
  9. Sublime Text 2 常用插件介绍
  10. python扩展取值范围_python 数据库取值范围内
  11. html旅游旅行游记攻略网页源码
  12. 10015---MySQL--innodb_flush_log_at_trx_commit参数
  13. 刘乾四川大学计算机学院刘乾,刘乾亮
  14. 19.猜数字的游戏:随机生成数字与输入数字进行比较
  15. 国风·召南·野有死麕
  16. 苹果开发者账号注册第一步,Apple ID 的双重认证,为 Apple ID 设置双重认证
  17. 【CHATGPT-3.5】如何使用ChatGPT的同时并学习记忆
  18. 【windows11 技巧】win11如何关闭你要以何方式打开此文件
  19. CoolHash数据库的产品宣言(Fourinone4.0版)
  20. Linux usb子系统 _usb-skeleton.c精析

热门文章

  1. 搜索连接字符串存储过程【原创】
  2. nhibernate学习之集合组合依赖
  3. SUSE12系统安装及LVM设置详解
  4. PHP_Smarty
  5. ActiveMQ学习笔记(2)——JMS消息模型
  6. 关于ping命令的工作原理
  7. 黄聪:PHP获取MAC地址(转)
  8. nls_lang.sh: 114: [[: not found
  9. Java-Type简单分类
  10. mysql数据库导入导出文件sql文件