异次元店铺系统安装与搭建

2022-03-28 Views 宝塔 | 接口1489字6 min read

体验

  • 后台演示:http://162.14.111.118:91/admin 账号:demo@demo.com 密码:123456
  • 前台演示:http://162.14.111.118:91 账号:为了明天美好而战斗 密码:123456

项目地址

环境要求

在安装程序之前,检查你的服务器或者虚拟主机是否支持以下环境:

  • PHP >= 8.0 必须
  • Mysql >= 5.6 推荐5.7版本

下载:acgshop-latest.zip

伪静态规则

  • 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

  1. 前往支付宝开放平台
  2. 申请支付接口:https://b.alipay.com/signing/productSetV2.htm 找到支付产品 - 当面付
  3. 前往控制台,选择网页&移动应用- 立即创建
  4. 下载并安装 支付宝开放平台开发助手
    https://opendocs.alipay.com/common/02kipk
  5. 打开开发助手并登录
  6. 点击生成密钥(密钥长度和密钥格式都为默认,不用改)

    保存好应用私钥
  7. 进入刚刚创建的网页&移动应用
    依次点击应用信息,接口加签方式(密钥/证书):设置,填入应用公钥!!! 注意不是私钥!!!
  8. 进入刚刚搭建的网站后台,支付管理 - 支付插件 - 支付宝官方 - 配置
    依次填写:
    • 应用ID - 对应APP ID
    • 支付宝公钥 - 不是应用公钥!!!
    • 应用私钥 - 刚刚在本地开发助手里面生成的,很长的一段
  9. 设置支付接口,如下图所示:

交易宝

  1. 前往收款站点管理,新建一个站点,完成后点击设置当前操作
  2. 收款地址管理页面设置收款方式
  3. 📢注意
    • USDT 仅支持TRC20,不支持ERC20和Omni
    • 其中支付宝支付(免签)微信支付(免签)即为个人收款码,支付宝当面付可以参考上面一条。
    • 支付网关:http://自主绑定域名/payment/
  4. 免签支付
    使用免签支付方式需要配置监测APP 点击下载
  5. 配置支付插件和支付接口 (参考支付宝当面付的8,9条)

优化程序访问速度

卡顿原因分析

  1. session产生的文件锁

为了明白这点,我们首先要知道web server不是通过一个单线程运行你的php代码,他是多个工作线程同时运行,然后处理请求。 一般,浏览网页的用户请求是被序列化的,这也是为什么http长连接起到的作用。通过保持給请求页面的所有资源连接的打开,可以避免连接的开销。 浏览器非常聪明,并且总是试图对HTML页面的请求进行序列化。对于页面上的资产(图像、脚本等),还有另一种策略。 浏览器会从它所看到的HTML中所引用的每个唯一的主机名中并行下载多个资源。 它可以通过打开多个TCP连接或管道来实现这一点。 当一个浏览器任务它正在下载资源,它可能并行的下载这些资源给一个单一的浏览用户。 会话锁定避免这种并发性(通过阻塞)在这种情况下提供对会话数据的可靠访问。

  1. session锁如何工作

这个非常简单:当你使用session_start(),php就是阻塞(等待)直到上一个请求的脚本通过session_write_close()进行释放。在Linux主机上,它是依靠flock()方法实现。这是一个警告锁机制,直到这个阻塞被释放。 注意:这部分上锁的时间不会计算在php中的max_execution_time配置项,max_execution_time详见set_time_limit()

  1. 为什么session锁是必须的

session锁防止在用以存储session数据的共享内存出现竞争条件。每一个PHP进程都会读取整个session的储存,并写回数据在它关闭之前。 这意味要可靠地储存一个登录进来的用户信息(通常在会话数据session中完成),你必须确保没有其他进程已经读取这个session数据,不然将在写入后覆盖掉你保存的数据(因为最后一次写入数据为准)

解决卡顿

  1. 安装Redis
    宝塔用户安装方法:打开软件商店,搜索redis然后进行安装,其他面板或没有使用面板的用户请自行在网络寻找安装教程。

  2. 为php8安装redis扩展
    宝塔用户安装方法:打开php8管理界面,找到安装扩展选项,选择安装redis扩展,其他面板或没有使用面板的用户请自行在网络寻找安装教程。

  3. 修改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密码"
  1. 重启php8
EOF