WP 和 discuz 的同步插件失效

WP 和 discuz 的同步插件失效


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

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

    诗语
    管理员
    • 文章数量: 5,866
    @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,866
    @feibisi

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

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

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

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

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

未找到对应子版块?请直接在 [疑难杂症] 版块中发帖提问。

收藏纪念品


有奖活动

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

话题信息

商业系统