孙锡源

孙锡源


已创建论坛回复

正在查看 10 个帖子:1-10 (共 14 个帖子)
  • 作者
    帖子
  • 孙锡源
    • 文章数量: 14
    @sunxiyuan
    楼主

    翻一下你的小程序的服务器端源码,看看是不是使用标准的 WP_REST_Controller 类及其衍生类来返回数据的,如果不是的话那肯定就没办法缓存了,因为中间件拦截不到数据。

    我估计开发者应该是用的自己封装的方法。

    孙锡源
    • 文章数量: 14
    @sunxiyuan
    楼主

    你手工访问触发报错是插件作者没做边界处理,不过这个顶多算编码不规范,不能算是 BUG。

    你这种情况先检查一下 PHP 错误日志(日志文件),看回调时时候有没有错误被记录。

    其次确认下你是否在使用 let’s encrypt 证书?也不排除支付宝官方的服务器使用旧版的 openssl,仍不信任这个证书,于是导致回调失败。

    最后你可以按我前面发的,记录一下支付宝回调的日志。如果发现没有日志生成的话就需要联系支付宝客户问问是不是有什么稀奇古怪的问题导致他们没触发回调。

    孙锡源
    • 文章数量: 14
    @sunxiyuan
    楼主

    翻了下代码,out_trade_no 字段是实时生成的没入库。不过通过代码上下文判断,我觉得这个字段不存在生成错误的可能,如果生成错误的话你应该在下单的时候就碰到报错,而不是等到回调的时候。

    所以现在可能的情况只剩下在支付宝回调的传参过程中出现了问题。

    不过你为啥能看到上面的报错信息?是通过 PHP 错误日志看的吗?所以我怀疑你是不是在手工请求支付网关?这个网关应该由支付宝官方主动回调,而不是手工访问。

    如果你没有手工访问的话,需要在以下两个地方分别下调试语句取日志:

    文件:wp-content/plugins/woo-alipay/inc/class-wc-alipay.php(行:671)

    在函数开头加两行:

    var_dump($out_trade_no);
    exit;

    之后尝试下单,就会在网页上看到下单时的 out_trade_no 字段值。获取值后记得把代码删掉。

     

    然后是获取回调时支付宝传递来的 out_trade_no。

    文件:wp-content/plugins/woo-alipay/inc/class-wc-alipay.php(行:340)

    在函数开头添加以下两行:

    file_put_contents( WP_CONTENT_DIR . ‘/alipay.log’, json_encode( $_POST ) . PHP_EOL, FILE_APPEND );
    file_put_contents( WP_CONTENT_DIR . ‘/alipay.log’, filter_input( INPUT_POST, ‘out_trade_no’, FILTER_SANITIZE_STRING ) . PHP_EOL, FILE_APPEND );

    然后完整执行一次下单流程,之后把 wp-content 目录下的 alipay.log 文件的内容连同下单时的 out_trade_no 值一起贴上来。注意下:你得保证 wp-content 目录有 www 用户的写入权限,否则是写不了日志的。

    孙锡源
    • 文章数量: 14
    @sunxiyuan
    楼主

    这个错误是因为 Woo-Alipay 无法通过订单 ID 获取 Woo 的 WC_Order 对象。

    而订单 ID 是从前端通过 POST 传来的 out_trade_no 字段中提取的。

    考虑到 Woo 内置的常用函数出 bug 的几率太小,所以这个问题只存在以下两种可能:

    1. 你订单的 out_trade_no 字段格式错误。去数据库里瞅瞅,然后贴上来再看看。
    2. 支付宝回调时未正常传递 out_trade_no。这种可能性非常非常小,几乎可以忽略,所以只检查一下情况一就可以。不过如果你开启了某些 waf 防火墙的话是有可能被过滤掉字段的,有这些防火墙、CDN 之类的建议先停掉。
    孙锡源
    • 文章数量: 14
    @sunxiyuan
    楼主

    贴个小广告,这里有中文翻译:https://translate.wp-china.org/projects/plugins/all-in-one-seo-pack/zh-cn/default

    孙锡源
    • 文章数量: 14
    @sunxiyuan
    楼主

    如果说之所以这样安排是想文派与薇晓朵完全割裂,也即让人们不知道文派是薇晓朵、菲比斯在投入的话,我觉得也应该是以成立一个新公司的方式来做,比如文派和张三、李四都是这个新公司的品牌,文派负责建设生态,张三、李四负责流量转化,于是形成一个闭环。而人们看到的在投入文派的人也就是这家新公司。这样的话应该就可以完美实现所有需求(与薇晓朵割裂 and 盈利)的同时避开弊端(文派品牌直接用于商业细分领域会“与民争利”)了。

    孙锡源
    • 文章数量: 14
    @sunxiyuan
    楼主

    文派的品牌策略我觉得有问题。

    文派翻译、文派博客、文派元素以及未来好多个文派XXX……

    当然,其实很多开源项目都有开源版对应一个商业版的习惯,但人家都是对应一个呀,而文派品牌却被应用到了方方面面……

    每一次将文派品牌用在一个商业细分领域就意味着给一批未来有可能依附这套生态的开发者和服务商带来恐惧——官方下次啥时候来抢我的这块蛋糕?如果以官方名义推这些业务的话,我自家的业务还能活吗?当然,我有理由相信诗语不会做这种事,但是别人会怎么想?因为这毕竟是已经在以官方品牌在做细分领域了。

    所以我的提议就是,文派品牌就只做开源项目,文派对应WordPress的国内发行版,肩负的使命就是建设国内WordPress生态,而没有其他商业属性,自身先保持一定中立再号召人们参与共同推进生态发展。

    至于商业盈利部分,人们都知道文派是菲比斯公司发起的,于是完全可以以菲比斯公司旗下其他品牌如薇晓朵、莫蒂奇等等的来实现流量转化,就好像人们知道WordPress是Automattic搞的,而WooCommerces也是Automattic搞的,于是人们愿意相信WooCommerces是最好的,就好像人们愿意相信WordPress是最好的一样。

    所以,其实把文派品牌直接用于盈利并不会比这样通过菲比斯其他品牌来盈利带来更多好处,而只会增加参与者的顾虑。

    我现在其实似乎应该能理解到,诗语你是想文派开源对应WordPress国内发行版,然后文派xxx对应商业盈利项目。但是还是说,就我个人第一感觉来讲,我更愿意相信品牌是文派,而其他后缀(开源、元素、翻译)都是文派品牌的子项目,于是这样来看的话,文派品牌本身的定位也就非常模糊了。

    孙锡源
    • 文章数量: 14
    @sunxiyuan
    楼主

    浏览器按f12, 找到这几个div块,然后在子主题的style.css里面为其添加CSS属性:display: none;,于是就隐藏了。

    孙锡源
    • 文章数量: 14
    @sunxiyuan
    楼主

    你需要WP China Yes插件,安装启用即可,不用做啥配置

    安装包下载:https://a1.wp-china-yes.net/apps/wp-china-yes.zip

    孙锡源
    • 文章数量: 14
    @sunxiyuan
    楼主

    今天逮住一个类似的病号,研究了一下,最终排出来的问题是这个问题是由宝塔面板的某个“防火墙”类插件引起的,具体是哪个插件还不清楚,因为问题不是每次必然复现,然后我一次停掉了太多插件……

    不过宝塔面板的那些“缓存加速” and “各种安全性插件”我个人是建议全部去掉的,噱头大于实际,还会增加系统复杂度和被入侵的风险,参考宝塔前段时间phpmyadmin的漏洞。

    实在想要服务器防护可以去看看云锁这类专门做防护的

正在查看 10 个帖子:1-10 (共 14 个帖子)

收藏纪念品


有奖活动

参与论坛社区问答,有机会获赠文派瓦普(Wapuu.com)手办模型。