java web电脑网站微信扫码支付(Servlet+JSP)

news/2024/5/20 22:20:37/文章来源:https://blog.csdn.net/qq_35318713/article/details/95471091

    上篇文章写到了app开发中的微信支付和支付宝支付连接:https://blog.csdn.net/qq_35318713/article/details/92832397,

这次再把电脑网站扫码支付的过程记录一下,其实原理上还是差不多,就是多了一个生成二维码的过程。

上代码!!!!

      后台的原理还是统一下单,跟app不同的是要把统一下达的结果放在一个连接里面,通过二维码生成工具生成后扫码支付

Servlet:

所有的工具类我全部写在了Servlet里面,大家可以直接用,这有一个生成二维码所需要的jar,网上可以找到

package com.sumeng.PC;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.URL;
import java.net.URLConnection;
import java.net.UnknownHostException;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.ws.soap.AddressingFeature.Responses;import com.sec.dao.CartDao;
import com.sec.dao.FZDao;
import com.sec.dao.GreensDao;
import com.sec.dao.IndentDao;
import com.sec.dao.OrderDao;
import com.sec.dao.TotalDao;
import com.sec.dao.WineshopDao;
import com.sec.entity.Cart;
import com.sec.entity.FZ;
import com.sec.entity.Greens;
import com.sec.entity.Indent;
import com.sec.entity.Order;
import com.sec.entity.Total;
import com.sec.entity.Wineshop;import WeiXin.PayCommonUtil;
import WeiXin.UUID;
import WeiXin.XMLUtil;
import net.sf.json.JSONObject;/*** Servlet implementation class WeiXinPay*/
@WebServlet("/WeiXinPay")
public class WeiXinPay extends HttpServlet {private static final long serialVersionUID = 1L;private static String APPID = "***************";private static String MCHID= "***************";private static String KEY= "*********************";private static String APPSECRET= "********************";private static String body= "速盟快线微信支付系统";private static String notify_url= "http://v4eat4.natappfree.cc/ACPSample_B2C/NotifyServlets";//回调地址public static String getLocalHostAddress() {//获取电脑IPInetAddress addr = null;try {// 获取本机的相关信息并保存在addraddr = InetAddress.getLocalHost();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();}return addr.getHostAddress().toString();}public static String CREATE_IP = getLocalHostAddress();public static String getCurrTime() {  Date now = new Date();  SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");  String s = outFormat.format(now);  return s;  }public static int buildRandom(int length) {  int num = 1;  double random = Math.random();  if (random < 0.1) {  random = random + 0.1;  }  for (int i = 0; i < length; i++) {  num = num * 10;  }  return (int) ((random * num));  }public static String createSign(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 (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {  sb.append(k + "=" + v + "&");  }  }  sb.append("key=" + API_KEY);  String sign = MD5Encode(sb.toString(), characterEncoding).toUpperCase();  return sign;  }private static String byteArrayToHexString(byte b[]) {StringBuffer resultSb = new StringBuffer();for (int i = 0; i < b.length; i++)resultSb.append(byteToHexString(b[i]));return resultSb.toString();}/*** byteToHexString* @param b* @return*/private static String byteToHexString(byte b) {int n = b;if (n < 0)n += 256;int d1 = n / 16;int d2 = n % 16;return hexDigits[d1] + hexDigits[d2];}/*** hexDigits*/private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5","6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };public static String MD5Encode(String origin, String charsetname) {String resultString = null;try {resultString = new String(origin);MessageDigest md = MessageDigest.getInstance("MD5");if (charsetname == null || "".equals(charsetname))resultString = byteArrayToHexString(md.digest(resultString.getBytes()));elseresultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));} catch (Exception exception) {}return resultString;}public static String postData(String urlStr, String data) {String postData  = postData2(urlStr, data, null);return postData;}private final static int CONNECT_TIMEOUT = 5000; // in millisecondsprivate final static String DEFAULT_ENCODING = "UTF-8";public static String postData2(String urlStr, String data, String contentType) {BufferedReader reader = null;  try {  URL url = new URL(urlStr);  URLConnection conn = url.openConnection();  conn.setDoOutput(true);  conn.setConnectTimeout(CONNECT_TIMEOUT);  conn.setReadTimeout(CONNECT_TIMEOUT);  if(contentType != null)  conn.setRequestProperty("content-type", contentType);  OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream(), DEFAULT_ENCODING);  if(data == null)  data = "";  writer.write(data);   writer.flush();  writer.close();    reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), DEFAULT_ENCODING));  StringBuilder sb = new StringBuilder();  String line = null;  while ((line = reader.readLine()) != null) {  sb.append(line);  sb.append("\r\n");  }  return sb.toString();  } catch (IOException e) {  e.printStackTrace();} finally {  try {  if (reader != null)  reader.close();  } catch (IOException e) {  }  }  return null;  }/*** @see HttpServlet#HttpServlet()*/public WeiXinPay() {super();// TODO Auto-generated constructor stub}/*** @return * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoPost(request,response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubint Wineshop_ID = 3;String Indent_remark = "aaaaa";float Greens_Price = 1;float Fare = 1;JSONObject retJson = new JSONObject();try {String currTime = getCurrTime();String strTime = currTime.substring(8, currTime.length());String strRandom = buildRandom(4) + "";String nonce_str = strTime + strRandom;//生成随机字符串String spbill_create_ip = CREATE_IP;System.out.println(spbill_create_ip);//获取设备IP// 正式上线的时候价格根据订单id查询int b = (int) (Float.valueOf(0.01+"")*100);String order_price = b+"" ; // 价格 注意:价格的单位是分String out_trade_no = String.valueOf(UUID.next()); // 订单号SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式SortedMap<Object, Object> packageParams = new TreeMap<Object, Object>();packageParams.put("appid", APPID);packageParams.put("mch_id", MCHID);packageParams.put("nonce_str", nonce_str);packageParams.put("body", body);packageParams.put("out_trade_no", out_trade_no);packageParams.put("total_fee", order_price);packageParams.put("spbill_create_ip", spbill_create_ip);packageParams.put("notify_url", notify_url);packageParams.put("trade_type", "NATIVE");packageParams.put("product_id", "2222");String sign = createSign("UTF-8",packageParams, KEY);// 这里是二次签名    //应用对应的密钥packageParams.put("sign", sign);//加密String requestXML = PayCommonUtil.getRequestXml(packageParams);System.out.println(requestXML+"requestXML");long startTime=System.currentTimeMillis();String resXml = postData("https://api.mch.weixin.qq.com/pay/unifiedorder", requestXML);long endTime=System.currentTimeMillis();Integer execute_time = (int) ((endTime-startTime)/1000);System.out.println(resXml+"resXml");Map map = XMLUtil.doXMLParse(resXml);JSONObject reportParams = new JSONObject();reportParams.put("url", "https://api.mch.weixin.qq.com/pay/unifiedorder");reportParams.put("execute_time", execute_time);reportParams.put("return_code", map.get("return_code").toString());reportParams.put("return_msg", map.get("return_msg").toString());reportParams.put("result_code", map.get("result_code").toString());System.out.println(map.get("result_code").toString()+"result_code");if (map.get("err_code") != null) {reportParams.put("err_code", map.get("err_code").toString());reportParams.put("err_code_des", map.get("err_code_des").toString());}reportParams.put("out_trade_no", out_trade_no);//交易保障if (map.get("return_code").toString().equals("SUCCESS") && map.get("result_code").toString().equals("SUCCESS")) {String urlCode = (String) map.get("code_url");//微信二维码短链接retJson.put("code", 0);retJson.put("message", "下单成功.");retJson.put("data", urlCode);System.out.println(urlCode+"urlCode");//最主要获取这个URLCode//这里写下自己生成订单的逻辑
//——————————————————————————————————————————————————————————————————————HttpSession s = request.getSession();s.setAttribute("urlCode", urlCode);//这里就可以获取到生成二维码的链接了s.setAttribute("order_price", order_price);s.setAttribute("out_trade_no", out_trade_no);request.getRequestDispatcher("./PCWeiXin.jsp").forward(request, response);//跳转到前台生成二维码System.out.println("order_price"+order_price);System.out.println("out_trade_no"+out_trade_no);} else {retJson.put("code", 1);retJson.put("message", map.get("err_code_des").toString());retJson.put("data", "");}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}

异步回调:

package com.sumeng.PC;import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.jdom.JDOMException;import com.sec.dao.CartDao;
import com.sec.dao.IndentDao;
import com.sec.entity.Indent;import WeiXin.XMLUtil;/*** Servlet implementation class NotifyServlet*/
@WebServlet(name = "NotifyServlets", urlPatterns = { "/NotifyServlets" })
public class NotifyServlet extends HttpServlet {private static final long serialVersionUID = 1L;public static boolean createSign(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 (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {  sb.append(k + "=" + v + "&");  }  }  sb.append("key=" + API_KEY);  String sign = MD5Encode(sb.toString(), characterEncoding).toUpperCase();  return true;  }  public static String MD5Encode(String origin, String charsetname) {String resultString = null;try {resultString = new String(origin);MessageDigest md = MessageDigest.getInstance("MD5");if (charsetname == null || "".equals(charsetname))resultString = byteArrayToHexString(md.digest(resultString.getBytes()));elseresultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));} catch (Exception exception) {}return resultString;}private static String byteArrayToHexString(byte b[]) {StringBuffer resultSb = new StringBuffer();for (int i = 0; i < b.length; i++)resultSb.append(byteToHexString(b[i]));return resultSb.toString();}private static String byteToHexString(byte b) {int n = b;if (n < 0)n += 256;int d1 = n / 16;int d2 = n % 16;return hexDigits[d1] + hexDigits[d2];}private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5","6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };/*** @see HttpServlet#HttpServlet()*/public NotifyServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub// TODO Auto-generated method stubSystem.out.println("微信支付回调");InputStream inputStream;try {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();// 解析xml成mapMap<String, String> m = new HashMap<String, String>();m = XMLUtil.doXMLParse(sb.toString());// 过滤空 设置 TreeMapSortedMap<Object, Object> packageParams = new TreeMap<Object, Object>();Iterator it = m.keySet().iterator();while (it.hasNext()) {String parameter = (String) it.next();String parameterValue = m.get(parameter);String v = "";if (null != parameterValue) {v = parameterValue.trim();}packageParams.put(parameter, v);}// 账号信息String key = "d2fp6ugtfgp45wr453u6kvcibrdnq69a"; // key// 判断签名是否正确if (createSign("UTF-8", packageParams, key)) {// ------------------------------// 处理业务开始// ------------------------------String resXml = "";if ("SUCCESS".equals((String) packageParams.get("result_code"))) {// 这里是支付成功// 执行自己的业务逻辑//String mch_id = (String) packageParams.get("mch_id");//String openid = (String) packageParams.get("openid");//String is_subscribe = (String)         packageParams.get("is_subscribe");String out_trade_no = (String) packageParams.get("out_trade_no");System.out.println(out_trade_no+"out_trade_no");String total_fee = (String) packageParams.get("total_fee");System.out.println(total_fee+"total_fee");String spbill_create_ip = (String) packageParams.get("spbill_create_ip");System.out.println(spbill_create_ip+"spbill_create_ip");//这里写下自己改变订单状态的代码/*IndentDao dao = new IndentDao();Indent indent = new Indent();indent.setIndent_PayType("支付成功");indent.setIndent_Status("正在处理");indent.setIndent_PayID(out_trade_no);dao.update100(indent);int Wineshop_ID = dao.Select1(out_trade_no);CartDao dao1 = new CartDao();dao1.delete1(Wineshop_ID);*/// 通知微信.异步确认成功.必写.不然会一直通知后台.八次之后就认为交易失败了.resXml = "<xml>"+ "<return_code><![CDATA[SUCCESS]]></return_code>"+ "<return_msg><![CDATA[OK]]></return_msg>"+ "</xml> ";System.out.println(resXml);} else {resXml = "<xml>"+ "<return_code><![CDATA[FAIL]]></return_code>"+ "<return_msg><![CDATA[报文为空]]></return_msg>"+ "</xml> ";}// ------------------------------// 处理业务完毕// ------------------------------try {BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());out.write(resXml.getBytes());//一定要以XML的格式给微信返回 success,不然会一直回调out.flush();out.close();System.out.println("微信回调成功了!!");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} else {System.out.println("通知签名验证失败");}} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (JDOMException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

加入自己企业的APPID,签名,KEY这些的,就可以直接吊起来了!!!

然后把上面得到的URL_Code传给前台

jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
<head>
<title>微信支付(PC)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no" />
<link href="layui-v2.4.5/layui/css/layui.css" rel="stylesheet" media="all">
<script type="text/javascript" src="//cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript" src="//static.runoob.com/assets/qrcode/qrcode.min.js"></script>
<script src="js/layui.js"></script>
</head>
<body>
<%String URL = (String) request.getSession().getAttribute("urlCode");//后台传过来的url_CodeString order_price =(String)request.getSession().getAttribute("order_price");//String out_trade_no = (String) request.getSession().getAttribute("out_trade_no");String out_trade_no="2019050412491900001";System.out.print(URL+"aa");
%><input id="text" type="text" value=<%=URL %> style="display:none;" /><br />
<b style="margin-left:650px;font-family: Helvetica, 'Hiragino Sans GB', 'Microsoft Yahei', '微软雅黑', Arial, sans-serif;">速盟快线微信收银台</b>
<input type="text" value=<%=order_price %> readonly="readonly" style="margin-left:650px" />元<br />
<input type="text" id="out_trade_no" value=<%=out_trade_no %> readonly="readonly" style="margin-left:650px;margin-top:20px" /><br />
<div id="qrcode" style="margin-left:650px;margin-top:20px"></div>
<b style="margin-left:650px;margin-top:40px;color:red;font-family: Helvetica, 'Hiragino Sans GB', 'Microsoft Yahei', '微软雅黑', Arial, sans-serif;">确认订单请扫此二维码支付</b>
<script src="js/jquery.js"></script>
<script>
var qrcode = new QRCode(document.getElementById("qrcode"), {width : 200,height : 200
});function makeCode () {		var elText = document.getElementById("text");if (!elText.value) {alert("Input a text");elText.focus();return;}qrcode.makeCode(elText.value);
}makeCode();$("#text").on("blur", function () {makeCode();}).on("keydown", function (e) {if (e.keyCode == 13) {makeCode();}});
</script>
<script>var out_trade_no= $("#out_trade_no").val();alert(out_trade_no);setInterval("test()",500);function test(){$.ajax({url: 'http://localhost:8080/ACPSample_B2C/CheckIDServlet',async:true,type: 'get',data:{"out_trade_no":out_trade_no},success: function (data) {if (data=1){$("body").append('<div style="font-size: 36px;text-align: center;color: #5FB878;"><i class="layui-icon layui-icon-ok-circle" style="font-size: 36px; color:#5FB878;"></i>支付成功</div>')}}})}</script></body>
</html>

这个生成二维码的方法网上有好多,记得要把包导对

然后就会生成二维码,可以支付了,我这写了一个轮询是否付款的方法,然后跳转到成功页面!!

 到这里姐结束了,祝各位开发愉快!!!!

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

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

相关文章

MyCms 自媒体 CMS 系统 v2.6,SEO 优化升级

MyCms 是一款基于Laravel开发的开源免费的自媒体博客CMS系统&#xff0c;助力开发者知识技能变现。 MyCms 基于Apache2.0开源协议发布&#xff0c;免费且不限制商业使用&#xff0c;欢迎持续关注我们。 V2.6 更新内容 新增&#xff1a;SEO-URL优化插件 新增&#xff1a;文章…

轻松实现织梦网站数据迁移到新站点

众所周知&#xff0c;织梦已经开始收费了&#xff0c;这对国内版权意识增强应该不算坏事&#xff0c;但想要免费使用又不想惹麻烦的站长们就有点麻烦了。 有不少朋友来问&#xff0c;我们 MyCms 支不支持织梦数据迁移&#xff0c;目前我们已经实现一键导入织梦的原文章和商品了…

开源多语言商城 CMS 企业建站系统,MyCms v3.9 发布

MyCms 是一款基于 Laravel 开发的开源免费的开源多语言商城 CMS 企业建站系统。 MyCms 基于 Apache2.0 开源协议发布&#xff0c;免费且可商业使用&#xff0c;欢迎持续关注我们。 V3.9 更新内容 新增&#xff1a;模板自定义配置 新增&#xff1a;读取模板配置函数 新增&…

网站架构

百科名片 网站架构 网站架构&#xff0c;一般认为是根据 客户需求分析的结果&#xff0c;准确定位网站目标群体&#xff0c;设定网站整体架构&#xff0c;规划、设计网站栏目及其内容&#xff0c;制定 网站开发流程及顺序&#xff0c;以最大限度地进行高效资源分配与管理的设计…

转载:程序员实用工具网站

转载 版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a; https://blog.csdn.net/m0_38106923/article/details/100130354 目录 1、搜索引擎 2、PPT 3、图片操作 4、文件共…

http://www.miuo.com 我的网站.密友地带,RSS Home,密友,RSS,XML

http://www.miuo.com http://miuo.com http://www.miuo.com/syndication.axd 密友科技资讯[miuo.com]_致力于从世界日新月异的科技信息中获取最大的信息价值&#xff0c;提供简明IT新闻,IT业界资讯,提供讨论平台&#xff0c;报道即时信息&#xff0c;讨论热烈的新闻、评论、…

10个设计最经典的web2.0网站

10个设计最经典的web2.0网站 <script type"text/javascript"> </script><script src"http://pagead2.googlesyndication.com/pagead/show_ads.js" type"text/javascript"> </script> 做好一个网站&#xff0c;不仅要在服…

源代码Search网站 www.krugle.com

推荐一个相当好的源代码搜索网站, www.krugle.com . 可以根据某段代码进行搜索,搜索结构可以是某段代码,或者某个工程. 支持相当多的程序开发语言. 感兴趣的可以去看看 ^_^ 界面如下:

学生社区(学校交流社区)网站源码推荐

学生社区网站&#xff08;或者说学校交流社区&#xff09;的特点是注重互动和个人展示&#xff0c;老墨今天为大家推荐几个比较适合创建学生社区网站的源码。 记事狗 记事狗微博系统是一套创新的PHP开源微博程序&#xff0c;其支持Wap、手机客户端、短信、QQ机器人等多种方式发…

Intel Edison Arduino 温度检测并上传至网站

采用的Arduino的温度传感器&#xff0c;其说明见此链接。参数罗列如下&#xff1a; Voltage: 3.3 ~ 5VZero power resistance: 100 KΩResistance Tolerance: 1%Operating temperature range: -40 ~ 125 ℃Nominal B-Constant&#xff1a; 4250 ~ 4299K 关键计算公式如下&#…

JAVA里面读取PostgreSQL数据库最近80条温度检测记录,并用Highcharts展示在网站上

效果如下&#xff1a; 花了2天时间处理了服务器端的GET处理部分&#xff0c;和前端HTML部分。 难点(1)&#xff1a;series[0]["data"][jjj]parseFloat(arr_temp[jjj]); 首先series[0]的[0]是不能省掉的&#xff0c;因为采用的这个是多曲线展示&#xff0c;要展示的是…

部署在线网站

1、注册账号 https://www.ngrok.cc/ 2、开通一个隧道账号 记录一下隧道ID 33adb03ff15e3705 3、下载客户端&#xff0c;最下面 https://www.ngrok.cc/ windows64下载 http://pan.baidu.com/s/1o8HQHxo 4、解压双击&#xff0c;输入33adb03ff15e3705按回车即可 注意&#xff1…

找xpath好用的工具(比较少用,针对只能在IE上打开的网站)

有一些网站只能在IE浏览器里打开&#xff0c;不像firefox那样有好多好用的插件来找元素的xpath,css path等。 当然现在IE也可以&#xff0c;F12出现像firebug那样的窗口&#xff0c;来查看元素。 这里呢在介绍一个工具&#xff0c;Fire-IEBrowser1.4.zip&#xff0c;我已经上…

Echarts一些社区网站,亲测可用,新更新了Antv(阿里旗下)

1.makeapie echarts图表可视化案例makeapie echarts图表可视化案例, 分享你的可视化作品https://www.makeapie.cn/echarts 2.Examples - Apache EChartsECharts, a powerful, interactive charting and visualization library for browserhttps://echarts.apache.org/examples…

使用css和jquery实现一个网站首页轮播图的功能

效果展示说明 页面代码&#xff0c;在一个div框中用img标签放置图片和小圆点 <div id"box01"><img src"img/fengxueshanshenmiao.jpg"/><img src"img/sandazhujiazhuang.jpg" /><img src"img/shuihuAll.jpg" /&…

动态网站的搭建-学习笔记-阿里云服务器测试

1.静态网站&动态网站 Wordpress 2.静态&#xff1a;公司业务介绍等 减轻服务器负担&#xff08;无额外计算&#xff09; 打开快、搜索引擎收录全 动态&#xff1a;交互式网站&#xff0c;电商的库存 降低维护的工作量 用户注册、在线调查、订单管理等 3.iis是在windows下常…

网站的目录分类与TAG标签有什么区别?如何使用?

博客文章或电商网站商品一定要分类&#xff1f; 分类是不是越多越好&#xff1f; 分类与标签有什么不同&#xff1f; 做好标签与分类是不是对于网站在搜索引擎中有帮助&#xff1f; 相信许多在经营博客或是电商网站的人员都会遇到这样的问题。如果你上网百度相关问题&#…

网站转换率如何提高?知道这四点足矣!

网站转换率如何提高&#xff1f;知道这四点足矣&#xff01; 原文出处&#xff1a;http://www.tunan321.com 什么是转换率 转换率顾名思义首先考虑转换&#xff0c;而转换意味着&#xff0c;在不同情况下进行了切换&#xff0c;转换率就是指每个人在不同情况下切换成功的比率…

建设网站到底需不需要用WordPress?

WordPress 最知名的大概就是所谓的 5 分钟安装 (5-Minute install)&#xff0c;让你可以快速地安装 WordPress 并开始撰写内容和设计页面。这几年随著社群的蓬勃发展&#xff0c;各种线上或线下教学以及教学推广 (联盟行销&#xff1f;)&#xff0c;WordPress 的能见度提高很多…

创建自己的博客网站

一直想拥有自己的博客网站&#xff0c;在云上搭建&#xff0c;免服务的。 https://developer.aliyun.com/adc/series/activity/wulin?accounttraceid5944bc16d86f49fca9559abbd2b5f1bbfkjd 我在上面使用WordPress搭建了一个博客&#xff0c;可以自定义主题