- 注册微信商户
- 下载微信支付的 SDK
- 打开idea打开微信支付的sdk复制到自己的项目中
- 在项目里创建配置类,继承WXPayConfig类,在里面添加商户信息
public class MyWxPayConfig extends WXPayConfig{ @Override String getAppID() { return "商户appid"; } @Override String getMchID() { return "商户号"; } @Override String getKey() { return "证书秘钥"; } @Override InputStream getCertStream() { return null; } @Override IWXPayDomain getWXPayDomain() { MyWXPayDomain domain=new MyWXPayDomain(); return domain; } }
- 在项目中创建一个类实现IWXPayDomain接口
@Override public void report(String domain, long elapsedTimeMillis, Exception ex) { } @Override public DomainInfo getDomain(WXPayConfig config) { DomainInfo info=new DomainInfo("api.mch.weixin.qq.com",true); return info; }
- 编写场景类支付
public class TestPay { public static void main(String[] args) throws Exception { MyWxPayConfig config = new MyWxPayConfig(); WXPay wxpay = new WXPay(config); Map<String, String> data = new HashMap<String, String>(); data.put("body", "腾讯充值中心-QQ会员充值"); data.put("out_trade_no", "2022050719401100000012"); data.put("device_info", ""); data.put("fee_type", "CNY"); data.put("total_fee", "1"); data.put("spbill_create_ip", "123.12.12.123"); data.put("notify_url", "http://www.example.com/wxpay/notify"); data.put("trade_type", "NATIVE"); // 此处指定为扫码支付 data.put("product_id", "12"); try { Map<String, String> resp = wxpay.unifiedOrder(data); System.out.println(resp); } catch (Exception e) { e.printStackTrace(); } } }
- 内网穿透
网址 natapp.cn,注册登录完成实名,然后购买免费隧道,复制token,下载客户端,在exe当前目录打开cmd,输入 natapp -authtoken=token - 回应消息给微信后台
@RequestMapping("/notify_url") public void doPayNotify(HttpServletRequest request, HttpServletResponse response) throws IOException { ServletInputStream inputStream = request.getInputStream(); byte[] buffer=new byte[1024]; int len=0; while( (len= inputStream.read(buffer))!=-1 ){ System.out.println(new String(buffer,0,len)); } response.getWriter().write("<xml>\n" + " <return_code><![CDATA[SUCCESS]]></return_code>\n" + " <return_msg><![CDATA[OK]]></return_msg>\n" + "</xml>"); }
- zxing二维码生成
<!--zxing二维码生成--> <!-- https://mvnrepository.com/artifact/com.google.zxing/core --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.3</version> </dependency> <!--zxing二维码生成--> <!-- https://mvnrepository.com/artifact/com.google.zxing/javase --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.4.0</version> </dependency>
- 绘制二维码
// 绘制二维码 @RequestMapping("/qrcode") public void qrcode(HttpServletResponse response)throws URISyntaxException, IOException { //二维码需要包含的文本内容 String uri ="http://www.baidu.com"; HashMap<EncodeHintType,Object> hints=new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET,"UTF-8"); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); hints.put(EncodeHintType.MARGIN,2); try { BitMatrix bitMatrix=new MultiFormatWriter().encode(uri, BarcodeFormat.QR_CODE,200,200,hints); MatrixToImageWriter.writeToStream(bitMatrix,"PNG",response.getOutputStream()); System.out.println("创建二维码完成");} catch(Exception e){ e.printStackTrace(); } }
- goeasy异步调用
goeasy:网址:https://www.goeasy.io/
加依赖<!-- goeasy 异步 --> <dependency> <groupId>io.goeasy</groupId> <artifactId>goeasy-sdk</artifactId> <version>0.3.16</version> </dependency>
在 goeasy创建应用,获取Common key及hangzhou.goeasy.io
在微信支付通知的控制层新增
GoEasy goEasy = new GoEasy( "http://rest-hangzhou.goeasy.io/v2/pubsub/publish", "BC-3d456eb942cc4926b807cdb77dfb5216"); goEasy.publish("wxpay", "success");
下单页面
<script src="http://hangzhou.goeasy.io/goeasy.js"></script> <script> //初始化 var goeasy = new GoEasy({ host:"hangzhou.goeasy.io", //若是新加坡区域:singapore.goeasy.io appkey:"BC-3d456eb942cc4926b807cdb77dfb5216", modules:['pubsub']//根据需要,传入‘pubsub’或'im’,或数组方式同时传入 }) var pubsub = goeasy.pubsub; goeasy.subscribe({ channel: "wxpay",//替换为您自己的channel onMessage: function (message) { alert("收到:"+message.content); console.log("Channel:" + message.channel + " content:" + message.content); } }); </script>
启动Linux上面的服务报错
[root@iZ25n5kdt0kZ ~]# service mysqld stop
Redirecting to /bin/systemctl stop mysqld.service
解决方案:
首先使用cd命令切换目录,例:cd bin,根据具体的报错提示在对应目录下面操作mysql
1.使用如下命令操作mysql:
systemctl restart mysqld.service
systemctl start mysqld.service
systemctl stop mysqld.service
安装完8.x版本的MySQL后,使用
set password for root@localhost = password(‘123’);
修改root密码,总是提示
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘password(‘123456′)’ at line 1
这是因为新版本的修改密码的语句有点不同,使用如下语句进行修改:
alter user ‘root’@’localhost’ identified by ‘123’;
传统的MySQL版本用下面命令
set password for root@localhost = password(‘123’);
mvn配置完成在cmd命令行执行mvn- v出现如下问题:
‘cmd’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。
网上查找到的原因为环境变量配置有问题。解决方法:
在path变量中添加 %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;
再次在命令行运行OK;
Linux配置固定IP
TYPE=”Ethernet”
PROXY_METHOD=”none”
BROWSER_ONLY=”no”
BOOTPROTO=”static”
DEFROUTE=”yes”
IPV4_FAILURE_FATAL=”no”
IPV6INIT=”yes”
IPV6_AUTOCONF=”yes”
IPV6_DEFROUTE=”yes”
IPV6_FAILURE_FATAL=”no”
IPV6_ADDR_GEN_MODE=”stable-privacy”
NAME=”ens33″
UUID=””
DEVICE=”ens33″
ONBOOT=”yes”
#IPADDR=192.168.0.123
#GATEWAY=192.168.0.1
IPADDR=192.168.31.123
GATEWAY=192.168.31.1
NETMASK=255.255.255.0
DNS1=8.8.8.8
DNS2=114.114.114.114
保存之后重启服务:service network restart
2020java框架之日志管理
日志介绍:
用于记录系统中发生的各种事件。记录的位置常见的有:控制台、磁盘文件等。
日志级别:
日志级别从低到高:
TRACE、DEBUG、INFO、WARN、ERROR、FATAL
日志作用:
通过日志观察、分析项目的运行情况(项目维护)
通过日志分析用户的使用情况(大数据分析)
解决方案1
log4j+commons-logging
占位符 (更多…)
2020最新版Git教程
git安装以及初始化
查看git版本:git –version
设置用户名:git config –global user.name “Your Name”
设置邮箱:git config –global user.email “email@example.com”
查看信息:git config -l
git仓库
创建仓库,在本地磁盘创建个文件夹,然后打开cmd,输入:git init
git基本操作
如何解决mysql上传限制
打开集成开发工具,打开php.ini文件,搜索查找 File Uploads
ile_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开
upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_max_filesize = 100m ;即允许上传文件大小的最大值。默认为20M
idea如何修改注释颜色
打开IDEA左上角File
Setting–>Editor–>Color Scheme –>Language Defaults
Comments目录下的
Block comment 多行注释 /* */
Line comment 单行注释 //
Doc Comment 文档文件 /** */
右侧选择Foreground,单击选择颜色
找不到,可以在搜索框搜关键字(如Language)
markdown教程
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。
Markdown 语言在 2004 由约翰·格鲁伯(英语:John Gruber)创建。
Markdown 编写的文档可以导出 HTML 、Word、图像、PDF、Epub 等多种格式的文档。
Markdown 编写的文档后缀为 .md, .markdown。 (更多…)
电脑教程:PHP对密码进行md5加密报错添加失败
解决方案:
将password类型设置为char(32)即可,然后进行md5加密
$password=md5($_POST[‘password’]);//md5加密
$pw=md5($password);
提示文件过大无法复制到U盘怎么解决
U盘现在作为一个便携的移动存储工具,已经在我们生活中扮演了一个重要的角色,但是我们经常会遇到在复制一些文件到U盘里的时候,明明U盘空间还有很大,却提示文件过大无法复制,面对这样的问题,我们该如何解决?
首先普及一个知识,U盘一般会有文件系统,主要有NTFS、FAT16、FAT32三种形式,三种形式对应单个文件的大小也是不一样的,分别如下:
NTFS:最大文件2TB
FAT16:最大文件2GB
FAT32:最大文件4GB
一般U盘默认的是FAT32,今天我们主要考虑将U盘设置成NTFS,以便解决上述问题。 (更多…)
说道净网大师,绝对有人知道这软件,不过这几年都没有更新了,原因是因为爱奇艺公司起诉净网大师不正当竞争导致净网大师都没更新了。若需要请在评论区留下邮箱即可。免费送净网大师软件和浏览器插件。
以下是净网大师的百度百科
ADSafe净网大师
如果你打开电脑,出现了下图内容,别担心,电脑开机后按F2进入BIOS模式,然后选择U盘启动,前提是U盘为系统U盘,可以进入PE模式的,然后进入PE模式,找到该文件的目录,然后复制文件到其他位置做备份,再然后删除该文件即可。重启后自动进入操作系统的。
因为我在百度也搜过,看到有人说把文件删了就没事了,我就抱着试试的心态试了下,把该文件复制到其他盘,然后删除该文件,之后重启就能进系统了。
<?php global $more; $more = 0; $my_content = strip_tags(get_the_excerpt(), $post->post_content);
$my_content = mb_strimwidth($my_content, 0, 100,"..." ); //摘要前500字节
if (mb_strlen($my_content,'utf-8') < 10){ echo "对不起没有摘要"; } //少于10字节提示语言
else echo $my_content;?>
用wordpress程序建站时,往往很难去设置产品的大小、重量、单价等参数,好在wordpress有一个自定义栏目功能。我们可以通过wordpress自定义栏目给产品增加参数属性。
设置方法 (更多…)
打开Eclipse,选择菜单中的“Help”,然后选择“Install New Software…”,如下图所示:
在弹出的“Install”窗口中,单击“Add”按钮,如图所示:
然后会弹出一个“Add Repository”窗口,单击“Archive…”按钮,如图所示:
然后选择已经下载好的ADT压缩包,如图所示:
完成后,再填Name那一栏,随便给个名字就行了(建议是ADT-版本号),如ADT-23.0.6:
经过pending解析后,就可以看到对应的Developer Tools了,选中它!!!建议去掉左下角的那个选项的勾(默认是选中的),不然会装得很慢。
然后不断“next”下去,直到最后一步,接受协议,然后“Finish”,
然后开始安装,
安装过程中会有警告,直接“OK”就行啦
安装完成后,要求重启,直接“YES”
链接: https://pan.baidu.com/s/13pTSuX2iS96j9JaICKpTBQ 提取码: 593f 复制这段内容后打开百度网盘手机App,操作更方便哦
链接: https://pan.baidu.com/s/1u5Ewt_7oiC8GT5lSyD6hqw 提取码: hqku 复制这段内容后打开百度网盘手机App,操作更方便哦
document.onkeydown = function(){ if(window.event && window.event.keyCode == 123) { alert("F12已被舒大少博客禁用"); console.log("模板制作15357240395舒大少博客"); event.keyCode=0; event.returnValue=false; } if(window.event && window.event.keyCode == 13) { window.event.keyCode = 505; } if(window.event && window.event.keyCode == 8) { alert(str+"\n请使用Del键进行字符的删除操作!"); window.event.returnValue=false; } }