WP 和 discuz 的同步插件失效

WP 和 discuz 的同步插件失效

正在查看 8 个帖子:1-8 (共 8 个帖子)
  • 作者
    帖子
  • bunse
    参与者
    • 文章数量: 30
    @bunse
    楼主

    之前看到 weixiaoduo 有教程说 Wordpress 和 Discuz 的会员同步插件,但是目前这个插件已经不支持 Php 7 了,并且密码修改也不能同步,不知道 xiaoduo 是否有付费的插件呢?或者像这样插件修改如何收费呢?

    诗语
    管理员
    • 文章数量: 5,908
    @feibisi

    不知道你找到的是什么版本的,如果是最初原作者发布的那个同步插件的话,已经废了,

    不过我们之前有预留 WordPress 与 Discuz 整合这方面的解决方案,今天我们在处理另一个项目,明天抽空再贴上详细的说明。

    bunse
    参与者
    • 文章数量: 30
    @bunse
    楼主

    好的,我使用的 https://devwp.bpteach.com/wp-admin/plugin-install.php?tab=plugin-information&plugin=ucenter-integration ,之前又可以正常使用一段时间,也看过你们的教程,但是现在是无法使用了。

    风间
    参与者
    • 文章数量: 670
    @fengjian

    1 、 UCENTER 客戶端不兼容 PHP7 导致 UCENTER 通信失败

    wordpress 的 ucenter 插件或者 discuz 如果使用 php7 可能会导致通讯失败,原因是 ucenter 的客户端比较久远,没有兼容 php7,其中的

    echo $uc_note->$get['action']($get, $post);

    而 php5 到 php7 有一个 breaking change 和类方法动态调用有关

    https://php.net/manual/zh/migration70.incompatible.php

    php5 和 php7 对这段代码的解释顺序是不同的,所以导致了 dz 在 php7 下这里运行出错,修改也很简单,参照样例,这里修改为

    echo $uc_note->{$get[『action』]}($get, $post);

    就可以让 php7 用无歧义的方式解析成 php5 的结果,于是就能通信成功了


    2 、 wordpress 与 discuz 整合, ucenter-integration 插件无法同步登陆解决

    discuz 与 wordpress 整合只能通过 ucenter-integration 插件,也只有这一个上古插件,安装,设置一切顺利,但是

    说到但是总是让人蛋疼,折腾了好几天,必须得铺垫铺垫

    但是只可以 wordpress 登陆,同步登陆到 discuz,而 discuz 登陆注销,却无法同步到 wordpress

    找了好多资料,反反复复就那么两个解决方案,都是改某处代码,但是没什么鸟用,自己折腾半天,终于找到原因,解决办法:

    原因是因为 discuz 下面 uc_client\client.php 的第 379 行

    function uc_user_synlogout() {
    if(@include UC_ROOT.』./data/cache/apps.php』) {
    if(count($_CACHE[『apps』]) > 1) {
    $return = uc_api_post(『user』, 『synlogout』, array());
    } else {
    $return = 」;
    }
    }
    return $return;
    }

    if(count($_CACHE[『apps』]) > 1) {这个判断出错,$_CACHE[『apps』] 数组应该是 2 或者更多的,但是这里是 1,所以无论 discuz 如何登陆退出,都不会向 ucenter 发送同步通知,自然 wordpress 也就无法收到,无法实现同步了

    打开这个配置文件,确实,只有一个数组,原来,是因为安装了独立的 ucenter,dz 下面的 cache/apps.php 没有更新,可能是 ucenter 清除缓存出了问题,或者其他原因。

    解决方法很简单,将 ucenter-integration 插件下面的/data/cache/apps.php 文件复制出来,覆盖到 dz 的 uc_client/data/cache/apps.php 下面就 OK 了

    bunse
    参与者
    • 文章数量: 30
    @bunse
    楼主

    谢谢,不过这两篇博客其实我之前又搜索到,也尝试过了。首先,「echo $uc_note->$get[‘action’]($get, $post);」,插件文件不存在这个代码,只有在/wp-content/plugins/ucenter-integration/api/uc.php 有如下:

    58: if ( in_array( $get[‘action’], array( ‘test’, ‘synlogin’, ‘synlogout’, ‘getcreditsettings’, ‘updatecreditsettings’ ) ) ) {
    61: exit( $uc_note->$get[‘action’]($get, $post) );

     

    我将其就修改为:

    58: if ( in_array( $get[‘action’], array( ‘test’, ‘synlogin’, ‘synlogout’, ‘getcreditsettings’, ‘updatecreditsettings’ ) ) ) {
    61: exit( $uc_note->{$get[‘action’]}($get, $post) );

     

    但是 DZ 还是显示通信不成功,如果是 PHP 56 版本,未修改任何代码,倒是可以正常使用。

     

    bunse
    参与者
    • 文章数量: 30
    @bunse
    楼主

    另外,切换到 PHP7 以后,我也打开了 WP debug log,发现如下:

     

    PHP Notice: Constant UCENTER_INTEGRATION_SETTING_NAME already defined in /wp-content/plugins/ucenter-integration/ucenter.php on line 18

    Strict Standards: Redefining already defined constructor for class Ucenter_Integration in /wp-content/plugins/ucenter-integration/ucenter.php on line 50

    只是我不熟悉 PHP,不太懂这个是否与无法通信相关。

    诗语
    管理员
    • 文章数量: 5,908
    @feibisi

    又测试了下我们自己预留的方案,在 discuz x3.4 和 WordPress 4.9.4 开启 ssl 访问的情况下,依旧是无效的,也就是说就现在而言,这个插件是报废了。

    这些代码都缺乏维护,如果你的确非常需要的话,可以找其他人进行定制新的插件,我们已经在开始慢慢剔除 discuz 业务,所以不接这类的修改定制。

    bunse
    参与者
    • 文章数量: 30
    @bunse
    楼主

    嗯,我这边测试 HTTPs 也是一样。好的,感谢!

正在查看 8 个帖子:1-8 (共 8 个帖子)
  • 哎呀,回复话题必需登录。

话题信息