自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (5)
  • 问答 (1)
  • 收藏
  • 关注

原创 GO 语言核心编程-全文版

努力做到通俗易懂注重Go语言体系,同时也兼顾技术细节3)在实际工作中,如何快速的掌握一个技术的分享,同时也是我们授课的思路(怎么讲解或者学习一个技术)。(很多学员反馈非常受用)第 2 章程序:就是完成某个功能的指令的集合。Golang的概述Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,使用一个表达式来形容Go语言:Go=C+Python,说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。

2023-05-27 17:47:35 1354

原创 cdsn markdown图片转存失败后实现本地资源上传cdsn

在使用cdsn导入大量md文档内容时无法导入本地文件,导致文档格式、和编写体验极差,经过大量查找文档,大部分人都是使用图床,免费的图床有使用giee(不知道是不是运气不好,等我用的时候已经加上图片防盗机制了)、sm.sm(看着比较麻烦,不知道效果如何)、自建服务(还是会出现转存失败问题),也有直接使用 不过会引起格式混乱。于是我不得不打起cdsn的主意,看了看cdsn的代码上传图片,然后。使用的是lavavel(什么框架都行),依赖是使用的guzzlehttp/guzzle。

2023-05-27 15:17:57 151

原创 Go语言核心编程-函数、包和错误处理

一个函数在函数体内又调用了本身,我们称为递归调用执行一个函数时,就创建一个新的受保护的独立空间(新函数栈)函数的局部变量是独立的,不会相互影响递归必须向退出递归的条件逼近,否则就是无限递归,死龟了:)当一个函数执行完毕,或者遇到 return,就会返回,遵守谁调用,就将结果返回给谁,同时当函数执行完毕或者返回时,该函数本身也会被系统销毁每一个源文件都可以包含一个 init 函数,该函数会在 main 函数执行前,被 Go 运行框架调用,也就是说 init 会在 main 函数前被调用。

2023-05-22 14:58:20 597 1

原创 Go语言核心编程-流程控制

在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。顺序控制分支控制循环控制分支控制就是让程序有选择执行。有下面三种形式单分支双分支多分支switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上到下逐一测试,直到匹配为止。匹配项后面也不需要再加 break听其名而知其意。就是让我们的一段代码循环的执行。将一个循环放在另一个循环体内,就形成了嵌套循环。在外边的 for 称为外层循环在里面的 for。

2023-05-22 11:31:15 475

原创 Go语言核心编程-运算符和进制转换

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等算术运算符赋值运算符比较运算符/关系运算符逻辑运算符位运算符其它运算符关系运算符的结果都是 bool 型,也就是要么是 true,要么是 false关系表达式 经常用在 if 结构的条件中或循环结构的条件中用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个 bool 值赋值运算符就是将某个运算后的值,赋给指定的变量。

2023-05-19 17:11:25 586 1

原创 Go语言核心编程-基本数据类型篇

变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,同样的道理,通过变量名可以访问到变量(值)。简单的说,就是用于存放整数值的,比如 0, -1, 2345 等等。小数类型就是用于存放小数的,比如 1.2 0.23 -1.911Golang 中没有专门的字符类型,如果要存储单个字符(字母),一般使用 byte 来保存。字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。也。

2023-05-19 16:09:26 698

原创 Go 语言核心编程-环境入门篇

努力做到通俗易懂注重 Go 语言体系,同时也兼顾技术细节在实际工作中,如何快速的掌握一个技术的分享,同时也是我们授课的思路(怎么讲解或者学习一个技术)。(很多学员反馈非常受用)第 2 章 Golang 的概述程序:就是完成某个功能的指令的集合。如何选择开发工具我们先选择用 visual studio code 或者 vim 文本编辑器本,到大家对 Go 语言有一定了解后,我们再使用 Eclipse 等 IDE 开发工具。这是为什么呢?

2023-05-19 14:22:26 907

原创 PHP sm3 国密扩展

基于密码库编写的SM3密码杂凑算法PHP扩展特性:非对称加密git地址:https://gitee.com/state-secret-series/ext-sm3.git。

2022-12-26 14:54:11 1145

原创 openssl1.1.1q安装

代码】openssl1.1.1q安装。

2022-08-16 11:59:22 2938

原创 PHP sm2 国密扩展

基于openssl密码库编写的SM2椭圆曲线公钥密码算法PHP扩展特性:非对称加密git地址:https://gitee.com/state-secret-series/openssl-ext-sm2.git。

2022-08-09 09:19:55 7637 2

转载 CHN-15-压缩

如果Drogon在asset旁边找到对应的brotli压缩资源,则它支持现成的brotli静态压缩文件例如,Drogon将搜索 用于请求 .它通过在中默认将设置为来实现。如果要使用brotli动态压缩,必须在中将设置为。Users who don’t intend to use brotli static, might want to get rid of brotli extra ‘sibling check’by setting to in .不打算使用brotli static的用户可能不设

2022-06-09 10:00:51 199

转载 CHN-14-Coz分析

使用coz你可以分析两件事:如果你想分析你的应用程序的吞吐量,你应该打开’ COZ_PROFILING ’ cmake选项,并在cmake中使用’ debug ‘或’ RelWithDebInfo '发布模式在可执行文件中包含调试信息。这样做将包括服务请求时的coz进度点。目前在整个应用程序范围内不支持分析延迟,但仍然可以在用户代码中完成。编译完包含进度点的应用程序后。您需要使用coz分析器运行可执行文件,例如 .最后,需要对应用程序进行强调,为了获得最佳效果,您需要对所有代码路径进行强调,并运行概要文件大

2022-06-09 09:50:10 207

转载 CHN-08-0-数据库-概述

Drogon内置了数据库读写引擎,对数据库连接的操作基于non-blocking I/O技术实现,因此,从底层到上层接口,都是高效率的非阻塞异步方式,保证了Drogon对高并发性能的追求。目前,Drogon支持PostgreSQL和MySQL数据库,如果要使用数据库,开发系统必须先安装相应数据库的开发环境,Drogon会自动探测这些库的头文件和库文件,编译相应的部分。数据库开发环境的准备,参见安装数据库环境。Drogon为了支持轻量级应用,也支持sqlite3数据库,通过线程池实现异步接口,与前述数据库的接

2022-06-09 09:25:41 347

转载 CHN-07-会话

是web应用的重要概念,用于在服务端保存客户端的状态,一般和浏览器的配合,drogon提供了对会话的支持。drogon默认关闭会话选择,你也可以通过如下接口关闭或打开:都是通过单例调用,timeout参数代表了会话失效的时间,单位是秒,框架默认值是1200,即如果用户20分钟以上没有访问应用,则他对应的会话就失效了。timeout设置为0表示drogon将在整个生存期保留用户的会话;打开会话特性前请确定你的客户端支持cookie,否则,drogon会为每次不含SessionID的请求创建新的会话,这会白白

2022-06-09 09:25:08 765

转载 CHN-06-视图

虽然目前前端渲染技术大行其道,使后端应用服务只需要返回相应数据给前端即可,不过,一个好的web框架还是应该提供后端渲染技术,使服务端程序可以动态生成HTML页面。视图(View)可以帮助使用者生成这些页面,顾名思义,它只负责做跟展示相关的工作,而复杂的业务逻辑都应该交给控制器完成。最早的web应用程序都是把HTML嵌入到程序编码里,达到动态生成HTML页面的目的,不过这样做有效率低、不直观等诸多缺点,于是出现了诸如JSP等语言,反其道而行之,把程序代码嵌入到HTML页面里。drogon采用的当然是后一种方案

2022-06-09 09:24:25 377

原创 从安装vagrant 到PHP+nginx+Mysql+Orcal安装

从安装vagrant 到PHP+nginx+Mysql+Orcal安装题) 自从去年进入新公司之后公司要求使用**vagrant**安装liunx环境开发,这是我这几个月 亲身试验总结的教程。记录下来与大家分享vagrant安装安装环境 :windows7 64 Windows PowerShell 版本要求3及3以上;vagrant:https://pan.baidu.com/......

2022-06-09 09:23:24 253

转载 CHN-08-1-数据库-Dbclient

构造DbClient对象有两种途径,一个是通过DbClient类的静态方法,在DbClient.h头文件可以看到定义,如下:得到DbClient实现对象的智能指针,参数connInfo是个连接字符串,采用key=value的形式设置一系列连接参数,具体说明见头文件的注释。参数connNum是DbClient的连接数,即该对象管理的数据库连接个数,对并发有关键影响,请根据实际情况设置。通过这种方法得到的对象,用户要想办法持久化,比如放在某些全局容器内,创建临时对象,使用完再释放是非常不推荐的方案,理由如下:

2022-06-09 09:22:46 766

转载 CHN-05-过滤器

过滤器(filter)可以帮助用户提高编程效率,在HttpController的例子中,getInfo方法在返回用户信息之前应该先校验用户是否登录,我们把这个逻辑写在getInfo方法里当然是可以的,但是,很显然,校验用户登录属于通用逻辑,很多接口都将用到,应该把它单独提取出来,再配置到调用handler之前,这就是filter的作用。drogon框架做完URL路径匹配后,会先依次调用注册到该路径上的过滤器,只有当所有过滤器都允许"通过"时,对应的handler才会被调用;drogon内置了如下常用过滤器:

2022-06-09 09:21:34 561

转载 CHN-04-3-控制器-WebSocketController

顾名思义,用于处理websocket逻辑。websocket是基于HTTP的一种长连接方案,在websocket建立之初,有一次HTTP格式的请求和应答交换,建立完成后,所有的消息在websocket上传输,消息由固定的格式包装,但消息的内容和收发次序没有任何要求,完全由用户定义。可以由工具快速生成的源文件,命令格式如下:假设我们要通过websocket实现一个简单的回声功能,即服务端只是简单的把客户端发来的消息再发回去,通过创建的实现类EchoWebsock,如下:该命令会生成EchoWebsock.

2022-06-09 09:20:55 646

转载 CHN-04-1-控制器-HttpSimpleController

可以由命令行工具快速生成基于的自定义类的源文件,命令格式如下:我们创建一个名称为的控制器:可以看到,目录下新增加了两个文件,TestCtrl.h和TestCtrl.cc,下面阐述一下这两个文件。TestCtrl.h如下:TestCtrl.cc如下:每个HttpSimpleController类只能定义一个Http请求处理函数(handler),而且通过虚函数重载定义。从URL路径到处理函数的路由(或称映射)由宏完成,可以用宏添加多重路径映射,所有语句应夹在和宏语句之间。第一个参数是映射的路径,路径后

2022-06-09 09:19:44 442

转载 CHN-08-2-数据库-事务

事务是关系型数据库的重要特性,Drogon通过类提供了对事务的支持。类的对象由创建,事务有关的操作很多是自动进行的:事务创建接口由提供,如下:这个接口很简单,它返回一个对象的智能指针,显然,这个智能指针失去所有持有者而析构事务对象时,事务也就结束了。参数用于返回事务提交是否成功,需要注意的是,这个回调只用来指示命令是否成功,如果,事务在执行过程中自动或手动回滚了,这个回调就不会执行了。通常,命令都会成功,这个回调的bool类型参数为true,只有某些特殊情况,比如执行过程中连接断了,才会导致通知用户失败,

2022-06-08 17:49:53 270

转载 CHN-08-3-数据库-ORM

使用Drogon的ORM支持,首先要创建Model类,Drogon的命令行程序提供了生成Model类的功能,它从用户指定的数据库读取表信息,根据这些信息自动生成多个Model类的源文件。用户使用Model时include对应的头文件即可。显而易见,每一个Model类,对应一个特定的数据库表,每个Model类的实例,对应表的一行记录。model类的创建命令如下:最后一个参数是model存放的路径,该路径内必须有一个配置文件model.json,用以配置drogon_ctl到数据库的连接参数。它是JSON格式

2022-06-08 17:48:19 457

转载 CHN-08-4-数据库-FastDbclient

顾名思义,FastDbClient会提供比普通的DbClient更高的性能。与DbClient拥有自己的EventLoop不同,它和Web应用的网络IO线程和主线程共用EventLoop,这使得FastDbClient的内部实现可以采用无锁的方式进行,因而会更高效。经测试,极限高负载条件下,FastDbClient比DbClient有10%到20%的性能提升。FastDbClient必须由框架使用框架的接口或通过配置文件创建,使用框架的createDbClient接口,当最后一个参数为true时,即可创建一

2022-06-08 17:45:10 290

转载 CHN-08-5-数据库-自动批处理

自动批处理模式只对postgresql 14+版本的客户端库有效,其他情况下会被忽略,讲自动批处理之前,先了解一下pipeline模式。从postgresql 14之后,它的客户端库提供了pipelining模式接口,在pipelining模式下,新sql请求可以直接发送到服务端而不必等到上一个请求的结果返回(这和HTTP的pipelining的概念一致),详情请参考Pipeline mode。该模式对性能有很大的帮助,可以使较少的数据库连接就支持较大的并发请求。drogon在1.7.6版本之后开始支持,

2022-06-08 17:44:02 175

转载 CHN-09-插件

插件可以帮助用户构建复杂的应用,在Drogon中,所有的插件都由框架根据配置文件统一构建并安装到应用程序中。Drogon中的插件都是单实例的,用户可以用插件实现任何他们想要的功能。Drogon在运行run()接口的时候,会根据配置文件,逐一实例化每个插件,并调用其接口。插件配置都在配置文件中完成,例如:可见,每个插件的配置共有三项:用户定义的插件必须继承自drogon::Plugin类模板,模板参数就是该插件类型,比如下面的定义:当然,命令行程序drogon_ctl提供了创建插件的命令,如下:用户可以

2022-06-08 17:42:50 255

转载 CHN-10-配置文件

你可以通过DrogonAppFramework实例的多个接口配置各种参数来控制Http服务端的某些行为。不过,使用配置文件是更好的方式,原因如下:所有的配置接口都有对应的配置文件选项支持,基于上面这些额外的好处,建议应用开发者使用配置文件配置应用的各种参数。配置文件的加载很简单,在DrogonAppFramework实例调用run接口之前,调用loadConfigFile接口即可,参数是配置文件的路径和文件名,比如:这段程序,加载配置文件,然后运行。具体的监听端口、日志输出、数据库配置等等行为都可以由配置

2022-06-08 17:36:41 479 1

转载 CHN-11-drogon_ctl命令

Drogon框架编译安装后,一个命令行程序drogon_ctl也同时被安装于系统,为了方便,还安装了一个完全一样的副本dg_ctl。用户可以按喜好自行选用。该程序目前的主要功能是为了方便用户创建各种drogon工程文件,使用命令可以看到它支持的功能,如下:version子命令version子命令用于打印目前安装于系统的drogon版本,如下:create子命令create子命令用于创建各种对象,目前是drogon_ctl的主要功能,使用命令可以打印该命令的详细帮助,如下:视图创建命令用于从csp

2022-06-08 17:35:11 637

转载 CHN-12-AOP面向切面编程

AOP(面向切面编程)是实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。限于C++语言的特性,Drogon没有提供像Spring那样灵活的AOP方案,而是一种简单的AOP,所有插入点都是内建于框架中的,用户可以通过框架的AOP系列接口注册特定的处理程序到插入点上。Drogon提供了7个插入点供用户使用,当应用程序运行至插入点的时候,会依次调用用户注册的处理程序(Advice)。关于插入点的说明如下

2022-06-08 17:33:29 251

转载 CHN-13-性能测试

作为C++的Http应用框架,性能应该是关注的重点之一,本节介绍Drogon的简单测试和成绩;我们只是为了测试drogon框架的性能,因而要尽量简化controller的处理,我们只做了一个HttpSimpleController,注册到路径上。controller对任何请求都返回。设置drogon线程数为16。handler函数的代码如下, 你可以在目录找到这些源码:作为对比,我选取了nginx来做对比测试,使用nginx+module源码编译的方式,写了一个hello_world_module,测试时

2022-06-08 17:31:38 558

转载 CHN-16-协程

Drogon从1.4版本开始支持C++ coroutines(协程)。 它提供了扁平化异步执行控制流的方法, 比如,避免著名的. 通过协程, 异步编程将像同步编程一样简单(同时保持了异步程序的高性能)。本文无意于解释什么是协程或它是如何工作的,而是向大家介绍如何在Drogon中使用协程。有很多术语,普通的例程也使用,但是在协程里,意义稍有不同,为了避免引起不必要的混淆,我们列举了一些常用术语。协程(Coroutine) 是能暂停执行以在之后恢复的函数.Return 对普通函数来说意味着结束执行并返回一个值

2022-06-08 17:28:23 399

转载 CHN-17-Redis

Drogon 支持 Redis,Redis是一种非常快速的内存数据存储。 可以用作数据库缓存或消息代理。 与 Drogon 中其他组件一樣,Redis的操作是异步的。 这确保了 Drogon 即使在重负载下也能以非常高的并发性运行。Redis 支持依赖于hiredis 库。 如果在构建 Drogon 时hiredis 不可用,则Redis支持将不可用。Redis 客户端可以通过以下方式以方式创建:另外,与Database客户端一样,Redis客户端也支持config文件配置,也支持配置成Fast模式,具体

2022-06-08 17:27:10 261

转载 CHN-18-测试框架

DrogonTest 是一个内置在 Drogon 中的最小测试框架,可实现简单的异步测试和同步测试。 它用于 Drogon 自己的单元测试和集成测试。 但也可用于测试使用 Drogon 构建的应用程序。 DrogonTest 的语法受到 GTest 和 Catch2 的启发。您不必为应用程序使用 DrgonTest。您可以使用喜欢的任何东西。但它是一个选择。让我们从一个简单的例子开始。有一个函数,可以计算至某数为止之自然数之和,并想测试它的正确性。编译并运行…好吧,它通过了,但有一个明显的错误。 应该是

2022-06-08 17:25:49 225

转载 19-CHN-FAQ-1-线程模型

drogon 是一个快速的 C++ Web 应用程序框架,部分原因是没有抽象化底层线程模型并把它们包裹起来。 然而这也常引发一些用户的疑惑。 社群中经常会看到一些问题和讨论,为什么响应只在一些阻塞调用之后发送、为什么在同一个事件循环块上调用阻塞网络函数会导致死锁等等。本文的目的在解释导致它们的确切条件和如何避免它们。Drogon 在线程池上运行,其中每个线程都有自己的事件循环。事件循环是 Drogon 的核心。且每个 drogon 应用至少有 2 个事件循环。一个主循环和一个工作循环。一般来说, 主循环总是

2022-06-08 17:24:26 365

转载 20-CHN-FAQ

这是常见问题和答案的列表,与一展说明。Drgon 在线程池上运行,当调用 时,会在该线程池中创建 HTTP 服务器线程和数据库线程。 它是一个基于顺序任务的系统。 因此,建议在可能的情况下始终使用异步 API 或协程。 详见理解drogon的线程模型。......

2022-06-08 17:21:36 156

转载 CHN-04-2-控制器-HttpController

可以由命令行工具快速生成基于的自定义类的源文件,命令格式如下:我们创建一个位于名称空间内且名称为的控制器:可以看到,目录下新增加了两个文件,demo_v1_User.h和demo_v1_User.cc:demo_v1_User.h如下:demo_v1_User.cc如下:使用我们编辑一下这两个文件,然后再阐述它们。demo_v1_User.h如下:demo_v1_User.cc如下:每个类可以定义多个Http请求处理函数(handler),由于函数数目可以任意多,所以通过虚函数重载是不现实的,

2022-06-08 17:12:56 680

转载 CHN-04-1-控制器-HttpSimpleController

可以由命令行工具快速生成基于的自定义类的源文件,命令格式如下:我们创建一个名称为的控制器:可以看到,目录下新增加了两个文件,TestCtrl.h和TestCtrl.cc,下面阐述一下这两个文件。TestCtrl.h如下:TestCtrl.cc如下:每个HttpSimpleController类只能定义一个Http请求处理函数(handler),而且通过虚函数重载定义。从URL路径到处理函数的路由(或称映射)由宏完成,可以用宏添加多重路径映射,所有语句应夹在和宏语句之间。第一个参数是映射的路径,路径后

2022-06-08 17:11:43 118

转载 CHN-04-0-控制器-简介

控制器(controller)在web应用开发中处于相当重要的地位,它处理浏览器发来的请求,然后生成响应发送给浏览器;drogon框架已经帮我们处理好网络传输、Http协议的解析等等细节,我们只需要关注控制器的逻辑即可;每一个控制器对象可以有一个或者多个处理函数(一般称为handler),函数的接口,一般定义成如下形式:其中,是Http请求的对象(被智能指针包裹),是框架传给控制器的回调函数对象,控制器生成应答对象(也通过智能指针包裹)后,通过callback把该对象传给drogon,然后框架会帮你把响应

2022-06-08 17:10:31 449

转载 CHN-03-快速开始

我们从一个最简单的例子开始,介绍drogon的使用,在这个例子中我们使用命令行工具drogon_ctl创建一个工程:进入工程目录,可以看到如下文件:文件夹的名字就反应了它的用途,用户可以把各类文件(如控制器、过滤器、视图等等)分别放入对应的文件夹,方便项目管理,请读者自行实验。关于drogon_ctl的详细使用,可参见drogon_ctl让我们看一下main.cc文件,内容如下:然后构建项目:编译完成后,运行目标程序.现在,我们在Http根目录添加一个最简单的静态文件index.html:Http

2022-06-08 17:09:08 851

转载 CHN-02-安装

本节以Linux为例,简介安装过程,其它系统,大同小异;jsoncppuuidOpenSSLzlibCentOS 7.5环境默认安装的cmake版本太低,使用源码安装升级gcc注意: 命令仅是临时性的使新的gcc生效,直到会话结束。如果想永久使用新版gcc,可以使用命令, 系统重新启动后将自动使用新版gcc。uuidOpenSSLzlibWindows环境安装Visual Studio 2019专业版,安装选项中至少包括:如果有python环境,可以通过pip安

2022-06-08 17:07:25 1161

转载 CHN-01-概述

Drogon是一个基于C++14/17的Http应用框架,使用Drogon可以方便的使用C++构建各种类型的Web应用服务端程序。Drogon的主要应用平台是Linux,也支持Mac OS、FreeBSD和Windows。它的主要特点如下:

2022-06-08 16:44:41 718

RXThinkCMF-EVL8-PRO旗舰版v3.0.0

EVL前后端分离开发框架【专业版版】是基于 Laravel8+ElementUI+Vue 开发的权限架构及内容管理框架,采用全新的前端UI框架,支持多主题切换,前端UI框架完全适配手机端、PAD终端以及PC电脑终端,框架内置完整的权限架构体系以及常规基础模块:用户管理、角色管理、菜单管理、职级管理、岗位管理、部门管理、系统日志、布局管理、广告管理、配置管理、字典管理、等等,旗舰版重点集成了代码生成器的功能,可以一键生成整个模块的全部代码,包括PHP后端代码以及Vue+ElementUI前端UI代码,生成后可以直接运行,无需人工开发;框架专注于为中小企业提供最佳的行业基础后台框架解决方案,执行效率、扩展性、稳定性值得信赖,操作体验流畅,使用非常便捷,欢迎大家使用及进行二次开发。

2023-01-04

微信支付-补充JSAPI获取openid

补充JSAPI获取openid 接上次发布资源,文件中有一些异常抛出类和日志类需要手动修改与自己框架的兼容性

2018-12-20

2018整理 省,市,县/区 包含简写 ,全称,拼音,首字母,区号,邮编。

DROP TABLE IF EXISTS `lay_area`; CREATE TABLE `lay_area` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `pid` int(11) DEFAULT NULL COMMENT '父id', `shortname` varchar(150) DEFAULT NULL COMMENT '简称', `name` varchar(150) DEFAULT NULL COMMENT '名称', `merger_name` varchar(255) DEFAULT NULL COMMENT '全称', `level` tinyint(4) DEFAULT NULL COMMENT '层级 0 1 2 省市区县', `pinyin` varchar(100) DEFAULT NULL COMMENT '拼音', `code` varchar(100) DEFAULT NULL COMMENT '长途区号', `zip_code` varchar(100) DEFAULT NULL COMMENT '邮编', `first` varchar(50) DEFAULT NULL COMMENT '首字母', `lng` varchar(100) DEFAULT NULL COMMENT '经度', `lat` varchar(100) DEFAULT NULL COMMENT '纬度', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4146 DEFAULT CHARSET=utf8;

2018-11-13

最新PHPword整合,优化添加导出表格,表格内部换行,合并单元格

整合优化PHPword导出表格,优化项添加表格,行内换行,合并单元格 内含demo,可根据需求修改 声明:此为开源代码,经本人二次整合,如有侵权请联系管理员删除。

2018-09-04

支付宝最新SDK整合(包含APP,PC,WAP) PHP

/** *SDK调用说明 */ public function index() { //调用测试 import('AlipaySDK.Alipay'); $pay = new \Alipay(); /** * $trade_type 交易类型 app wap web */ $data = $pay->alipay('215360251411626', '0.01', '测试', '测试', 'web', 'http://www.test.com/callback'); //wap 结果string(880) "https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-php-20180705&app_id=2018072660781410&biz;_content={"body":"测试","subject":"测试","out_trade_no":"215360251411626","timeout_express":"90m","total_amount":"0.01","product_code":"QUICK_WAP_PAY"}&charset=UTF-8&format=json&method=alipay.trade.wap.pay&notify_url=http://www.test.com/callback&sign=RKPyAKAPv28GKfhWIdsCCOualcg2DMCbhpny6yw/tTvJ3Och+yIfS1au7zbGBnm5sFoX2enfgfZekTqBCyzK0/Irw01zDSAOJM4mPYxs96OUkOglWS5Zuq64JwQBAzesFvzKBGgsH2ecL8EUCclDbBIIrAT/DWr6KenyvQvXOxVQNwn540NoS754oBU0w9vLdrGj0Jljvn8D6cbDgnHiE8qLOgpaXv1ROLwtol0yj2H7cM/G7A9RM5Y8jV1aVNYWND8M4XAK5Wr8zwoa9RocbqDpYfw66NXSvrsuFpHf7MpWtSybH5TnxOP5kwzr7pJRDi0XRAyD9u1geei9thUsqA==&sign_type=RSA2&timestamp=2018-09-04+11:50:49&version=1.0" //app 结果直接返回客户端无需处理 alipay_sdk=alipay-sdk-php-20180705&app_id=2018072660781410&biz;_content={"body":"测试","subject":"测试","out_trade_no":"215360251411626","timeout_express":"90m","total_amount":"0.01","product_code":"QUICK_MSECURITY_PAY"}&charset=UTF-8&format=json&method=alipay.trade.app.pay¬ify_url=http://www.test.com/callback&sign_type=RSA2×tamp=2018-09-04+11:54:53&version=1.0&sign=Ab6a0lDxaNcWLL7XcETM85DbBrJI8Sj6czPGKBNK17MZ85FBeStKL+nA/Z4tMORC7H39ooVCDz9ILpbRUfU0eaE7Oe2MOz+Jsj7oUEqwvbvt7eebyPgy2PmPlfAwcZypKla0nUJwHOF5F0cL+mvMGk/K7f2PYMtWL/dIfPOQGC1hBoKFiS+ZF7jIJ98R0AaITAjvQ1drAmJqXpMzUCa1XsTCuQXMXYKu8DNGb/hooJu0xUH/qUU+4fKD0TmBYANQHIrKIBNFl6J2Gw504Mlcfh929ce+YdzF8DXQjacsBSp7f08UJ/FfRvhVXqAfX8lAFETGjc7FXGgU6simNgv1UQ== //web 结果 https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-php-20180705&app_id=2018072660781410&biz;_content={"body":"测试","subject":"测试","out_trade_no":"215360251411626","timeout_express":"90m","total_amount":"0.01","product_code":"FAST_INSTANT_TRADE_PAY"}&charset=UTF-8&format=json&method=alipay.trade.page.pay¬ify_url=http://www.test.com/callback&sign=l9+A5ZByhwLjQwzRes9+ymKkFVu7uMND4j6cIWmXIXHjrBnGaHkcr+hVkwocaU3d/hB2hdPnxDruhyYFgchnsIA/XWumosG9uEnKyD/T52+VZ8FxLh5wpwH0ucvKzbMjgIWk9dPVjUAU5Zz7QjqKsJ+AsItFpttd0tEVZD4je2PFp5mizeCWT0id0H+y44IGexN705rNe6TGpfJDG0RSDsbD/ZoCzd8FRzC9cv5uwf00J1E9Yc0bUH/l37WFDBTv/LZnqdfeWpaiu8ro7CJ3R+z/xGQTHToo2zLtEc4Cwop096X8WqwSdGbyI9FCemcFzigRB+6yzD9nS4PsWEG3Ug==&sign_type=RSA2×tamp=2018-09-04+11:56:06&version=1.0 echo $data; exit; } /** * 回调地址 */ public function callback() { import('AlipaySDK.Alipay'); $pay = new \Alipay(); $data = $_POST; $verify_result = $pay->check($data); if ($verify_result) { // 验证成功 $out_trade_no = $data['out_trade_no']; // 支付宝交易号 $trade_no = $data['trade_no']; // 交易状态 $trade_status = $data['trade_status']; if ($trade_status == 'TRADE_FINISHED') { //成功之后的操作 } else if ($trade_status == 'TRADE_SUCCESS') { //成功之后的操作 } echo "success"; // 请不要修改或删除 } else { // 验证失败 echo "fail"; } } 声明:是文档根据Alipay文档二次整合,完全开源。如果觉得还可以请点击收藏

2018-09-04

PHP微信支付服务端 (含APP,公众号,H5,扫码支付)

2018-09-03 php服务端微信支付整理SDK,封装,如果喜欢请给个好评!谢谢 说明: 配置在 WeChatConfig文件下 环境:php5.6,基于tp5开发 调用统一下单接口: include_once EXTEND_PATH . 'WeChatSDK/WeChatSDK.php'; $data = $this->getOrderInfo($pay_sn); if (!$data) { return $this->resultCode(-2019, '订单不存在或已支付'); } $WeixinPay = new \WeChatSDK(); if ($trade_type == 'JSAPI') { //目前未有此功能 $openid = ''; $product_id = ''; } if ($trade_type == 'NATIVE') { $openid = ''; $product_id = $pay_sn; } if ($trade_type == 'MWEB') { $openid = ''; $product_id = $pay_sn; } if ($trade_type == 'APP') { $openid = ''; $product_id = $pay_sn; } $out_trade_no = $pay_sn; $result = $WeixinPay->setWeiXinPay($data['pay_body'], $data['pay_detail'], $data['pay_money'] * 100, $out_trade_no, $red_url, $trade_type, $openid, $product_id); APP加密:$WeChatSDK->GetAppParameters($result['data']); web编码 $WeChatSDK->GetMwebApiParameters(); jsapi:WeChatSDK-> GetJsApiParameters(); 回调调用: include_once EXTEND_PATH . 'WeChatSDK/WeChatSDK.php'; Log::write("gwgwgwgw---------------------------------进入异步回掉"); $postStr = file_get_contents&#40;'php://input'&#41;; Log::write("gwgwgwgw---------------------------------" . $postStr); $WeChatSDK = new \WeChatSDK(); if (!empty($postStr)) { $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $check_sign = $WeChatSDK->checkSign($postObj, $postObj->sign); Log::write('-----check_sign-------' . $check_sign . '------------check_sign--------------'); if ($postObj->result_code == 'SUCCESS' && $check_sign == 1) { model('order', 'service')->affirmPayment($postObj->out_trade_no); $xml = "&lt;xml&gt; &lt;![CDATA[SUCCESS]]></return_co

2018-09-03

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除