首页
AI导航
美图
服务
付费
树洞
留言
云主机
推荐
邻居
更多
我的书单
我的足迹
罗盘时钟
圈小猫
工作打分
本站统计
版本历史
推荐
txt阅读器
主机监控
M商城
网址导航
在线工具
证件照制作
Search
1
docker和docker-compose一键安装脚本
824 阅读
2
docker下运行grafana和grafana Image Renderer
664 阅读
3
grafana的Dashboard面板添加阈值报警
632 阅读
4
WooCommerce对接第三方支付插件开发
503 阅读
5
基于docker的部署fecmall开源电商系统
442 阅读
ChatGPT
虚拟化
数据库
运维
基础知识
监控预警
数据展示
运维工具
web安全
系统服务
开发
python
php
java
shell
go
html5
项目
博客
电商
工具
娱乐
影视
读书
读书笔记
综合
VPS报告
规范文档
知识总结
经验分享
关于本站
登录
Search
标签搜索
python
django
电商平台
运维工具
Joe主题
docker
zabbix
蓝鲸智云
运维
监控
typecho
grafana
wordpress
运维知识
mysql
php
elk
nginx
web安全
VPS测试
IT不难
累计撰写
245
篇文章
累计收到
209
条评论
首页
栏目
ChatGPT
虚拟化
数据库
运维
基础知识
监控预警
数据展示
运维工具
web安全
系统服务
开发
python
php
java
shell
go
html5
项目
博客
电商
工具
娱乐
影视
读书
读书笔记
综合
VPS报告
规范文档
知识总结
经验分享
关于本站
页面
美图
服务
留言
邻居
我的足迹
本站统计
版本历史
推荐
M商城
网址导航
搜索到
5
篇与
的结果
2022-08-08
php开发过程中用到session功能相关配置
说明{callout color="#f0ad4e"}在开发过程中,需要基于客户端网页处理一些问题。需要php启用session功能。特此记录。{/callout}使用{message type="success" content="在文件头部开启session,将需要的信息存入session中"/}# 开启session session_start(); if (!(array_key_exists('vlist', $_SESSION))) { $_SESSION['vlist'] = array(); } # 存入和获取数据 if($type === "last"){ $url = array_pop($_SESSION['vlist']); #$url = 'http://ali-cdn.kwai.net/bs2/newWatermark/Njg1NTc0NzgxMg_zh_4.mp4'; } else { array_push($_SESSION['vlist'], $url); }优化{message type="success" content="部署到外网之后,发现每次请求都生成新的sessionid,导致上一页功能失效。优化版如下。"/}//检查cookie是否存在ssid,若没有则新建 if (!(array_key_exists('ssid', $_COOKIE))) { $ssid = "REF".date("YmdHis", time()+8*60*60).substr(md5(uniqid(rand(), true)), 0, 9); setcookie('ssid', $ssid); }else{ $ssid = $_COOKIE['ssid']; } //开启session session_id($ssid); session_start(); if (!(array_key_exists('vlist', $_SESSION))) { $_SESSION['vlist'] = array(); } //存取上一页,同时解决当前页显示2次的问题 $type = $_GET['_t']; if($type === "last"){ array_pop($_SESSION['vlist']); $url = array_pop($_SESSION['vlist']); #$url = 'http://ali-cdn.kwai.net/bs2/newWatermark/Njg1NTc0NzgxMg_zh_4.mp4'; } array_push($_SESSION['vlist'], $url);参考文章PHP 中利用 COOKIE 与 SESSION 联合实现 SESSION 跨域FAQsession 设置后未生效{message type="error" content="检查session目录写入权限"/}# 修改php.ini 配置 session.cookie_path = /tmp
2022年08月08日
25 阅读
4 评论
1 点赞
2022-04-29
WooCommerce对接第三方支付插件开发
前言{callout color="#f0ad4e"}前一段时间,分享了如何使用wordpress快速搭建一个电商独立站。没有对接支付系统,其实像主流的如支付宝,或者微信有成熟的插件可用。但一些小的三方支付通道,只有接口文档。没有插件,那就只能自己折腾了。照的网上的资料和官方文档,依葫芦画瓢终于搞出来了,特此记录。{/callout}参考:使用WooCommerce支付网关 API 创建自定义支付网关的方法 {card-default label="截图" width="75%"}{/card-default}支付流程{card-default label="支付流程" width="75%"}{/card-default}主要模块{message type="success" content="类的初始化什么的比较简单,按照官方文档很快就写好了,主要是请求上游接口,异步回调,同步回调逻辑。"/}请求上游接口{callout color="#f0ad4e"}process_payment($order_id) -> receipt_page($order) -> generate_form($order){/callout}process_payment(), woocommerce发起支付动作函数 function process_payment($order_id) { $order = new WC_Order($order_id); //$current_version = get_option( 'woocommerce_version', null ); //error_log($current_version); return array ( 'result' => 'success', 'redirect' => esc_url_raw(add_query_arg('order-pay', $order->get_id(), add_query_arg('key', $order->get_order_key(), wc_get_page_permalink( 'checkout' )))) ); }receipt_page(),订单支付前准被页面函数 function receipt_page($order) { echo '<p>'.__('Thank you for your order, please click the button below to pay.', 'superxpay-for-woocommerce').'</p>'; //error_log($_SERVER['HTTP_REFERER']); //解决函数被调用2次的问题 if ( strpos($_SERVER['HTTP_REFERER'], 'order-pay') === false ) { echo $this->generate_form($order); } }generate_form(),订单参数准备函数,请求上游接口,获取支付链接隐藏内容,请前往内页查看详情异步回调接口{callout color="#f0ad4e"}接收上游渠道的通知,更新订单状态。{/callout}{message type="success" content="check_ipn_response()"/} function check_ipn_response() { global $woocommerce, $wpdb; if (($_SERVER['REQUEST_METHOD'] === 'POST') && preg_match("/wc_superxpay_notify/i", $_SERVER['REQUEST_URI'])) { $response = file_get_contents("php://input"); error_log(__METHOD__ . PHP_EOL .print_r($response, true)); if ( $response ) { $res_data = json_decode($response, true, 512, JSON_BIGINT_AS_STRING); $private_key = html_entity_decode($this->superxpay_merchantkey); $statustr = $this->superxpay_processing; $checksum = md5($res_data['OrderNo'] . '&' . $res_data['MerchantNo'] . '&' . $res_data['Amount'] . '&' . $res_data['OutTradeNo'] . '&' . $res_data['Status'] . '&' . $private_key); //error_log($checksum); //error_log($res_data['Sign']); if ($checksum == $res_data['Sign']) { $tm_ref = $res_data['OutTradeNo']; $check_query = $wpdb->get_results("SELECT orderid,order_state FROM {$wpdb->prefix}superxpay_data WHERE ref = '".addslashes($tm_ref)."'", ARRAY_A); $check_query_count = count($check_query); //error_log("SELECT orderid,order_state FROM {$wpdb->prefix}superxpay_data WHERE ref = '".addslashes($tm_ref)."'"); //error_log($check_query_count); if( $check_query_count >= 1 ) { if($check_query[0]['order_state'] == 'I' && $res_data['Status'] == '1') { $query = "update {$wpdb->prefix}superxpay_data set order_state='C' where ref='".addslashes($tm_ref)."'"; $wpdb->query($query); $inv_id = $check_query[0]['orderid']; $order = new WC_Order($inv_id); $order->update_status($statustr, __('Order has been paid by ID: ' . $res_data['OrderNo'], 'superxpay-for-woocommerce')); wc_reduce_stock_levels( $order->get_id() ); add_post_meta( $inv_id, '_paid_date', current_time('mysql'), true ); update_post_meta( $inv_id, '_transaction_id', wc_clean($tm_ref) ); $order->payment_complete(wc_clean($tm_ref)); $woocommerce->cart->empty_cart(); } } } } //接口返回 exit("SUCCESS"); } }同步接口处理逻辑{callout color="#f0ad4e"}从上游渠道返回后,逻辑处理页面。比如支付成功,跳转到结果页。支付失败,跳转到支付重新发起页。{/callout}{message type="success" content="check_superpay_return()"/} function check_superpay_return() { global $woocommerce, $wpdb; //error_log($_SERVER['REQUEST_URI']); if (($_SERVER['REQUEST_METHOD'] === 'GET') && preg_match("/wc_superxpay_return/i", $_SERVER['REQUEST_URI'])) { error_log(__METHOD__ . PHP_EOL .print_r($_GET, true)); $tm_ref = $_GET['mref']; error_log($tm_ref); $check_query = $wpdb->get_results("SELECT orderid,order_state FROM {$wpdb->prefix}superxpay_data WHERE ref = '".addslashes($tm_ref)."'", ARRAY_A); $check_query_count = count($check_query); if($check_query_count >= 1){ $inv_id = $check_query[0]['orderid']; $inv_state = $check_query[0]['order_state']; switch ( $inv_state ) { case 'C': $order = new WC_Order($inv_id); wp_redirect(esc_url_raw(add_query_arg('key', $order->get_order_key(), add_query_arg('order-received', $inv_id, $this->get_return_url($order))))); break; default: wp_redirect( wc_get_cart_url() ); } exit; } } wp_redirect(home_url()); }FAQ请求上游接口,函数被调用2次的问题{callout color="#f0ad4e"}找了很多的问题,也没找到办法解决。最后发现两次的$_SERVER['HTTP_REFERER']不同,加了一个判断解决。{/callout}if ( strpos($_SERVER['HTTP_REFERER'], 'order-pay') === false ) { echo $this->generate_form($order); }checkout页面自动跳转{message type="success" content="采用js实现,添加到generate_form()函数内"/} wc_enqueue_js(' setInterval(function(){ $.blockUI({ message: "' . esc_js(__('Thank you for your order. We are now redirecting you to superxpay to make payment.', 'superxpay-for-woocommerce')) . '", baseZ: 99999, overlayCSS: { background: "#fff", opacity: 0.6 }, css: { padding: "20px", zindex: "9999999", textAlign: "center", color: "#555", border: "3px solid #aaa", backgroundColor:"#fff", cursor: "wait", lineHeight: "24px", } }); var start = new Date().getTime(); while (new Date().getTime() < start + 1000); document.getElementById("submit_superxpay_payment_button").click(); },1000); ');完整项目代码wordpress商城第四方支付插件
2022年04月29日
503 阅读
16 评论
6 点赞
2022-04-28
php开发基础之如何调试打印变量
{card-default label="php开发" width="75%"}{/card-default}前言{callout color="#f0ad4e"} 最近给前一段时间搭建的wordpress商城对接第三方支付通道。小通道,没有现成的插件可用。只能自己写了。根据网上的资料,折腾了近一周。有时候一个很小的问题,也要折腾一天时间。只怪自己基础太菜,特此记录问题解决过程。{/callout}wordpress调试wordpress 打开调试功能//wp-config.php文件内添加 define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG', true );php打印调用堆栈$tracelog = ''; $array =debug_backtrace(); unset($array[0]); foreach($array as $row) { $tracelog .= $row['file'].':'.$row['line'].'行,调用方:'.$row['function']."\n"; } error_log($tracelog);打印array变量error_log(__METHOD__ . PHP_EOL .print_r($postdata, true));其它框架打印变量到文件$file=dirname(__FILE__).'/debug.log'; file_put_contents($file, $data."\n",FILE_APPEND);
2022年04月28日
89 阅读
0 评论
1 点赞
2022-04-03
centos7系统下安装nginx+php服务
{card-default label="php测试" width="80%"} {/card-default}前言{callout color="#f0ad4e"}nginx + php 用于运行大部分php开发的网站。前几篇文章,都是是运行与docker下的。如果系统不方便使用docker,直接在系统内配置 nginx+php服务{/callout}安装软件yum install nginx yum install php php-xml php-mysql php-mongo php-redis php-memcache php-intl php-mbstring php-mcrypt php-pecl-swoole php-xcache php-pecl-xhprof php-fpm php-opcache配置php-fpm/etc/php.ini隐藏内容,请前往内页查看详情/etc/php-fpm.confinclude=/etc/php-fpm.d/*.conf [global] pid = /var/run/php-fpm/php-fpm.pid error_log = /var/log/php-fpm/php_error.log/etc/php-fpm.d/www.conf[www] listen = /var/run/php-fpm/php-fpm.sock listen.allowed_clients = 127.0.0.1 listen.owner = nginx listen.group = nginx listen.mode = 0660 listen.backlog = 16384 user = nginx group = nginx pm = static pm.max_children = 20 pm.start_servers = 10 pm.min_spare_servers = 10 pm.max_spare_servers = 35 pm.max_requests = 10000 request_terminate_timeout = 180 request_slowlog_timeout = 30 slowlog = /var/log/php-fpm/www-slow.log ;access.log = /opt/servicelogs/php-fpm/access.$pool.log ;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{seconds}d %{megabytes}M %{user}C%%" ;ping.path = /php70fpm-ping ;pm.status_path = /phpfpm70-statusnginx/etc/nginx/nginx.conf隐藏内容,请前往内页查看详情/etc/nginx/conf.d/my-wordpress.com.confserver { listen 80 http2; server_name www.chreagent.com chreagent.com; # 请换成自己的域名 rewrite ^(.*) https://$server_name$1 permanent; } server { listen 80 http2; listen 443 ssl http2; server_name www.my-wordpress.com my-wordpress.com; charset utf-8; ssl_certificate "/etc/nginx/ssl/server.crt"; ssl_certificate_key "/etc/nginx/ssl/server.key"; set $host_path "/var/www/html/chreagent"; error_log /var/log/nginx/error_chreagent.log; access_log /var/log/nginx/acc_chreagent.log; root $host_path; # 缓存标记 set $skip_cache 0; if ($query_string != "") { set $skip_cache 1; } if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|sitemap(_index)?.xml") { set $skip_cache 1; } # 登录用户或发表评论者 if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { set $skip_cache 1; } location = / { index index.php index.html; try_files /index.php?$args /index.php?$args; } location / { index index.php index.html; try_files $uri $uri/ /index.php?$args; } location ~ ^/\.user\.ini { deny all; } location ~ \.php$ { try_files $uri =404; fastcgi_index index.php; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_cache wordpress; fastcgi_cache_valid 200 301 302 30m; fastcgi_cache_valid 404 10m; fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; fastcgi_cache_lock on; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/"; include fastcgi_params; } location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|jpeg)$ { expires max; access_log off; try_files $uri =404; } }启动systemctl enable --now php-fpm systemctl enable --now nginx
2022年04月03日
59 阅读
1 评论
3 点赞
2022-03-09
centos7安装配置wordpress博客系统
{card-default label="wordpress" width="75%"}{/card-default}前言{card-default label="LAMP架构的介绍" width="100"}LAMP是 linux Apache MySQL PHP的简写,即把Apache MySQL PHP 安装在linux系统上,组成一个环境来运行PHP网站。这里的Apache是httpd服务。这些可以安装在一个机器上,也可以安装在多台机器上,但是httpd和PHP安装在一台机器上(php作为httpd的一个模块存在的。 他们两者必须要在一起,才能实现效果){/card-default}安装配置apache+php服务{card-default label="视频1" width="80%"}{bilibili bvid="BV1jA411u75e" page="wordpress博客配置"/}{/card-default}apache和php安装命令yum install httpd httpd-devel yum -y install epel-release yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm yum -y install yum-utils yum-config-manager --enable remi-php74 yum -y install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json php-redisphp配置优化{card-describe title="php-fpm.conf"}[global] pid = /var/run/php-fpm/php-fpm.pid error_log = /opt/servicelogs/php-fpm/error.log daemonize = yes include=/etc/php-fpm.d/*.conf{/card-describe}{card-describe title="php-fpm.d/www.conf"}[www] listen = /var/run/php-fpm/php-fpm.sock ;listen = 127.0.0.1:9000 listen.allowed_clients = 127.0.0.1 listen.owner = nginx listen.group = nginx listen.mode = 0660 listen.backlog = 16384 user = nginx group = nginx pm = static pm.max_children = 20 pm.start_servers = 10 pm.min_spare_servers = 10 pm.max_spare_servers = 35 pm.max_requests = 10000 request_terminate_timeout = 180 request_slowlog_timeout = 30 slowlog = /opt/servicelogs/php-fpm/www-slow.log ;access.log = /opt/servicelogs/php-fpm/access.$pool.log ;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{seconds}d %{megabytes}M %{user}C%%" ping.path = /php5fpm-ping pm.status_path = /php5fpm-status{/card-describe}{card-describe title="php.ini"}[PHP] engine = On short_open_tag = Off precision = 14 output_buffering = 4096 zlib.output_compression = Off implicit_flush = Off unserialize_callback_func = serialize_precision = 17 disable_functions = disable_classes = zend.enable_gc = On expose_php = On max_execution_time = 30 max_input_time = 60 memory_limit = 128M error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors = Off display_startup_errors = Off log_errors = On log_errors_max_len = 1024 ignore_repeated_errors = Off ignore_repeated_source = Off report_memleaks = On track_errors = Off html_errors = On variables_order = "GPCS" request_order = "GP" register_argc_argv = Off auto_globals_jit = On post_max_size = 256M auto_prepend_file = auto_append_file = default_mimetype = "text/html" default_charset = "UTF-8" doc_root = user_dir = enable_dl = Off file_uploads = On upload_max_filesize = 2M max_file_uploads = 20 allow_url_fopen = On allow_url_include = Off default_socket_timeout = 60 [CLI Server] cli_server.color = On [Date] [filter] [iconv] [intl] [sqlite] [sqlite3] [Pcre] pcre.jit=0 [Pdo] [Pdo_mysql] pdo_mysql.cache_size = 2000 pdo_mysql.default_socket= [Phar] [mail function] sendmail_path = /usr/sbin/sendmail -t -i mail.add_x_header = On [SQL] sql.safe_mode = Off [ODBC] odbc.allow_persistent = On odbc.check_persistent = On odbc.max_persistent = -1 odbc.max_links = -1 odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [Interbase] ibase.allow_persistent = 1 ibase.max_persistent = -1 ibase.max_links = -1 ibase.timestampformat = "%Y-%m-%d %H:%M:%S" ibase.dateformat = "%Y-%m-%d" ibase.timeformat = "%H:%M:%S" [MySQLi] mysqli.max_persistent = -1 mysqli.allow_persistent = On mysqli.max_links = -1 mysqli.cache_size = 2000 mysqli.default_port = 3306 mysqli.default_socket = mysqli.default_host = mysqli.default_user = mysqli.default_pw = mysqli.reconnect = Off [mysqlnd] mysqlnd.collect_statistics = On mysqlnd.collect_memory_statistics = Off [PostgreSQL] pgsql.allow_persistent = On pgsql.auto_reset_persistent = Off pgsql.max_persistent = -1 pgsql.max_links = -1 pgsql.ignore_notice = 0 pgsql.log_notice = 0 [bcmath] bcmath.scale = 0 [browscap] [Session] session.save_handler = files session.use_strict_mode = 0 session.use_cookies = 1 session.use_only_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.cookie_domain = session.cookie_httponly = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440 session.referer_check = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.hash_function = 0 session.hash_bits_per_character = 5 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" [Assertion] zend.assertions = -1 [mbstring] [gd] [exif] [Tidy] tidy.clean_output = Off [soap] soap.wsdl_cache_enabled=1 soap.wsdl_cache_dir="/tmp" soap.wsdl_cache_ttl=86400 soap.wsdl_cache_limit = 5 [sysvshm] [ldap] ldap.max_links = -1 [mcrypt] [dba] [curl] [openssl] [opcache] opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.validate_timestamps=0 opcache.file_cache=/tmp{/card-describe}php安装后测试php -v php --modules整体功能测试echo '<?php phpinfo(); ?>' > index.php通过浏览器访问出现下图界面,即php安装正常{card-default label="php测试" width="50%"}{/card-default}安装配置mysql数据库服务{card-default label="视频2" width="80%"}{bilibili bvid="BV1C54y1p7eY" page="wordpress博客配置"/}{/card-default}清除默认的maradbyum list installed | grep mariadb yum -y remove mariadb-libs.x86_64安装依赖包yum install -y perl.x86_64 libaio.x86_64 net-tools.x86_64 perl-Compress-Raw-Bzip2 perl-Compress-Raw-Zlib perl-DBI perl-IO-Compress perl-Net-Daemon perl-PlRPC下载mysql安装包,并安装wget http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-5.6/MySQL-client-5.6.51-1.el7.x86_64.rpm wget http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-5.6/MySQL-server-5.6.51-1.el7.x86_64.rpm wget http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-5.6/MySQL-devel-5.6.51-1.el7.x86_64.rpm yum localinstall MySQL-*配置 mysqlvim /etc/my.cnf配置内容隐藏内容,请前往内页查看详情创建目录,修改目录权限mkdir -p /data/mysql/ /data/logs/ /data/logs/mysql/ chown -R mysql:mysql /data/logs/mysql/数据库初始化mysql_install_db --user=mysql --datadir=/data/mysql systemctl start mysql /usr/bin/mysqladmin -u root password -S /data/mysql/mysql.sock查看mysql服务状态systemctl status mysql安装完成安装配置wordpress博客{card-default label="视频3" width="80%"}{bilibili bvid="BV19t4y1q77A" page="wordpress博客配置"/}{/card-default}下载安装包wget https://wordpress.org/wordpress-5.6.tar.gz wget https://wp101.net/wordpress-5.6.tar.gz解压tar xvf wordpress-5.6.tar.gz sudo mv wordpress /var/www/html/mywordpress/更改代码目录权限chown -R apache:apache /var/www/html/mywordpress/修改配置文件httpd服务的配置vim /etc/httpd/conf/httpd.conf配置内容隐藏内容,请前往内页查看详情重启httpd服务,使配置生效systemctl restart httpd建库授权CREATE DATABASE `wpdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; create user 'wpuser'@'localhost' IDENTIFIED BY 'wpuser123'; grant all privileges on wpdb.* to 'wpuser'@'localhost'; flush privileges;绑定域名到指定IPecho '192.168.88.2 www.mywordpress.com' >> /etc/hosts通过浏览器访问,并配置博客http://www.mywordpress.com/FAQ关闭自动更新//wp-config.php define('AUTOMATIC_UPDATER_DISABLED',true);
2022年03月09日
139 阅读
0 评论
3 点赞