异次元店铺系统安装与搭建
体验
- 后台演示:http://162.14.111.118:91/admin 账号:demo@demo.com 密码:123456
- 前台演示:http://162.14.111.118:91 账号:为了明天美好而战斗 密码:123456
项目地址
- Github项目地址:https://github.com/lizhipay/acg-faka
- Gitee项目地址:https://gitee.com/lizhipay/acg-faka
- 官方文档:https://faka.wiki
环境要求
在安装程序之前,检查你的服务器或者虚拟主机是否支持以下环境:
- PHP >= 8.0 必须
- Mysql >= 5.6 推荐5.7版本
伪静态规则
- Apache:无需配置,规则就是程序根目录的.htaccess文件
- Nginx:
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}
- Windows IIS:
<rules>
<rule name="acg_rewrite" stopProcessing="true">
<match url="^(.*)$"/>
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^(.*)$"/>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
</conditions>
<action type="Rewrite" url="index.php?s={R:1}"/>
</rule>
</rules>
配置完伪静态后,访问你的网站首页,即可进行安装。
安装完成后,后台地址:http://你的域名/admin
支付接口对接
如果你有支付宝,微信商家服务就不用往下看了。
支付宝当面付
官方文档:https://opendocs.alipay.com/open/194
- 前往支付宝开放平台
- 申请支付接口:https://b.alipay.com/signing/productSetV2.htm 找到支付产品 - 当面付
- 前往控制台,选择
网页&移动应用
- 立即创建
- 下载并安装 支付宝开放平台开发助手
https://opendocs.alipay.com/common/02kipk - 打开开发助手并登录
- 点击
生成密钥
(密钥长度和密钥格式都为默认,不用改)
保存好应用私钥
- 进入刚刚创建的
网页&移动应用
依次点击应用信息
,接口加签方式(密钥/证书):设置
,填入应用公钥
!!! 注意不是私钥!!!
- 进入刚刚搭建的网站后台,支付管理 - 支付插件 - 支付宝官方 - 配置
依次填写:- 应用ID - 对应APP ID
- 支付宝公钥 - 不是应用公钥!!!
- 应用私钥 - 刚刚在本地开发助手里面生成的,很长的一段
- 设置支付接口,如下图所示:
交易宝
- 前往收款站点管理,新建一个站点,完成后点击
设置当前操作
- 收款地址管理页面设置收款方式
- 📢注意
- USDT 仅支持TRC20,不支持ERC20和Omni
- 其中
支付宝支付(免签)
和微信支付(免签)
即为个人收款码,支付宝当面付可以参考上面一条。 - 支付网关:http://自主绑定域名/payment/
- 免签支付
使用免签支付方式需要配置监测APP 点击下载 - 配置支付插件和支付接口 (参考支付宝当面付的8,9条)
优化程序访问速度
卡顿原因分析
- session产生的文件锁
为了明白这点,我们首先要知道web server不是通过一个单线程运行你的php代码,他是多个工作线程同时运行,然后处理请求。 一般,浏览网页的用户请求是被序列化的,这也是为什么http长连接起到的作用。通过保持給请求页面的所有资源连接的打开,可以避免连接的开销。 浏览器非常聪明,并且总是试图对HTML页面的请求进行序列化。对于页面上的资产(图像、脚本等),还有另一种策略。 浏览器会从它所看到的HTML中所引用的每个唯一的主机名中并行下载多个资源。 它可以通过打开多个TCP连接或管道来实现这一点。 当一个浏览器任务它正在下载资源,它可能并行的下载这些资源给一个单一的浏览用户。 会话锁定避免这种并发性(通过阻塞)在这种情况下提供对会话数据的可靠访问。
- session锁如何工作
这个非常简单:当你使用
session_start()
,php就是阻塞(等待)直到上一个请求的脚本通过session_write_close()
进行释放。在Linux主机上,它是依靠flock()
方法实现。这是一个警告锁机制,直到这个阻塞被释放。 注意:这部分上锁的时间不会计算在php中的max_execution_time
配置项,max_execution_time
详见set_time_limit()
- 为什么session锁是必须的
session锁防止在用以存储session数据的共享内存出现竞争条件。每一个PHP进程都会读取整个session的储存,并写回数据在它关闭之前。 这意味要可靠地储存一个登录进来的用户信息(通常在会话数据session中完成),你必须确保没有其他进程已经读取这个session数据,不然将在写入后覆盖掉你保存的数据(因为最后一次写入数据为准)
解决卡顿
-
安装Redis
宝塔用户安装方法:打开软件商店,搜索redis
然后进行安装,其他面板或没有使用面板的用户请自行在网络寻找安装教程。 -
为php8安装redis扩展
宝塔用户安装方法:打开php8管理界面,找到安装扩展
选项,选择安装redis
扩展,其他面板或没有使用面板的用户请自行在网络寻找安装教程。 -
修改php8的配置文件
宝塔用户修改方法:打开php8管理界面,找到Session配置
,将存储模式改为redis
,然后保存即可。
无宝塔面板的修改方法:打开php8的配置文件php.ini
,修改下面的配置:
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
# 如果你设置了redis密码,则用下面整个配置
session.save_path = "tcp://127.0.0.1:6379?auth=你的redis密码"
- 重启php8