• 注册
  • 查看作者
  • 宫论项目开发记录

    记录2023年项目进度周期。

    刷新置顶
  • 2
  • 398
  • 0
  • 7.23w
  • 小小乐小可鸭鸭

    请登录之后再进行评论

    登录
  • 1
    小小乐lv.2实名用户
    2024年5月21日
    1、考虑到宫论redis缓存管理器的(长连接、性能、并发)场景存在一些弊端和不足,借助于php8.2的版本更新 决定在现有基础上优化完善连接机制(核心需求:连接池)大致原理是,先创建并存储在内存中已步入redis链接,这些连接可以被多个线程共享使用。当一个线程需要与数据库进行交互时,它可以从连接池中获取一个已经存在的连接,而不是创建一个新的连接。这样可以减少创建新连接所需的时间和资源消耗。
    2、xc_redis函数重构优化:版本的xc_redis函数首先检查静态变量$redis是否已经是一个Redis实例。如果是,它直接返回这个实例,避免了创建新的连接。如果$redis不是一个Redis实例,它会尝试创建一个新的连接,并捕获可能出现的异常。减少和避免重复的redis请求。注:通过try来捕获异常,后续会追加日志监听。
    3、宫论异步进程脚本(start_GongLunTask.php)不再通过xc_redis来读取超全局变量【redis】对象,而是通过内置方法来获取或生成(redis_worker)对象,该对象采用pconnect进行持久化链接,防止出现自动失效过期的情况。同时该对象会执行Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP命令,确保输入或输出内容的时候,数组信息会被正确的反序列化处理。
    4、xc_redis函数继续优化处理,现在会根据xc_is_asyn函数来判断请求来源是否为异步,如果是异步进程则执行redis_worker对象redis,如果非异步环境则执行redis对象。两者之间区别在于持久化处理,异步进程因为特殊关系不能频繁开启或关闭,因此需要通过pconnect来维持长连接持久化。而用户即用既关模式,不喜欢要担心断开的问题。每次重连即可。
    5、redis-object-cache.php网站对象缓存器优化处理,现在缓存对象不在通过xc_redis链接,而是通过get_redis_connection方法来连接。该方法会根据客户端环境来决定采用哪种链接(宫论redis为了防止进程之间出现互相干扰,分异步和普通环境)两种缓存的全局对象分别是redis和redis_worker。不会互相干扰。在连接前会通过$GLOBALS['Task_Worker']来判断环境,然后执行不同的业务逻辑。
    6、宫论日志报警配置新增(redis)当服务端的redis因为连接出现故障(通过xc_redis和get_redis_connection)两个方法会触发。这两个方法都会通过try来捕获异常,当发生链接故障的时候,会写入以下格式日志【'[时间: ' . date("Y-m-d H:i:s") . '] [错误: ' . $e->getMessage() . '] [来源: 宫论异步进程脚本文件]】该日志会触发报警通知,邮件、公众号、站内信。
    7、【workerman】组件库已升级适配PHP8.2版本,目前启动脚本已无报错执行成功。PHP8.2升级遇到的最大的一个难题,至此已完成适配工作,宫论整个项目业务基本可以运行在php高版本内核了。注:workerman负责(通讯协议、定时计划、任务钩子、异步函数、定时器、任务队列)等业务的处理,后台非常依赖该组件的运作,适配PHP升级,最棘手的就是对接该组件兼容升级处理。
    8、缓存对象脚本新增一个内置方法checkRedisConnection,检测并重连redis对象。该方法仅在异步进程触发。涉及到redis的请求,都会通过这个函数来进行重连。避免异步进程因为长链接的不稳定进而出现故障问题(一般是通讯协议问题)目前的临时的解决方案,每次一次涉及到wp内置对象的请求,都通过redis进行重连处理。注:这样的服务器的开销会加大,后续不可采用。
    9、【php版本升级错误处理】:修复 /module/xc_merchant/api.php(行数:7、8)文件出现( Undefined array key "type" in 、Undefined array key "order" in)错误问题。访问商户中心的时会涉及到一次ajax请求,获取商户的一些资料信息。该接口有两个固定传递变量【$_POST['type'];、$_POST['order']】这两个变量并非每个请求都会携带,因此需要进行三元运算处理。防止出现上述错误。
    10、【php版本升级错误处理】:修复 /module/xc_merchant/api.php(行数:21)文件出现( Undefined array key "name" in)错误问题。商户API接口(商户搜索)请求会通过POST超全局变量获取name搜索关键词,然后对关键词执行xc_content转义处理,但是如果未传递name变量。这个函数执行过程会发生错误返回。
    11、【php版本升级错误处理】:修复 /module/xc_merchant/api.php(行数:812、813)文件出现(Undefined variable $coun_cdn_json in、 Undefined variable $coun_cdn_money in )错误的问题。在访问商户中心会通过【商户月度订单】来获取最近几个月用户端成交额曲线图,这里的获取方式是通过.赋值进行遍历生成json。但是因为变量未被初始化会出现Undefined错误的情况。
    12、【php版本升级错误处理】:修复/function/function.php(行数:3004)文件出现(Undefined variable $state_1 in )错误的问题。通过xc_count_state方法进行订单号状态查询统计时,需要传递查询数据表,数据表状态标识。然后通过内置的wpdb语句构建sql来获取订单总数,这里存在一个问题,state支持数组切割模式,但是是通过传统explode来处理。切割时通过.赋值传递state_。但是该变量没有被初始化因此造成出现了上述错误。
    13、【php版本升级错误处理】:修复/module/xc_merchant/home.php(行数:358)文件出现(Undefined variable $state_01 in)错误的问题。商户中心页面会通过sql查询获取用户待处理的售后订单,如果存在记录则会通过switch来查询返回字段【data->state】,然后根据字段值来进行不同的state_01赋值,比如【等待应诉、裁定中、用户撤销、商户违规】等场景,但是你这里存在一个错误。没有考虑到未命中的情况。未命中等情况该字段会出现Undefined错误的情况。
    14、【php版本升级错误处理】:修复//functions/hook.php(行数:224)文件出现(Undefined variable $post_id in)错误的问题。通过manage_comments_custom_column钩子对wp后台评论列表进行接管时,会修改原来的LINK点击链接。这里是通过get_author_posts_url完成link生成的,但是传递的参数是post_id,但是钩子并没有接收到这个变量。需要手动自己二次转换处理。
    15、【php版本升级错误处理】:修复/global/cancel_account_list.php(行数:6)文件出现(Undefined array key "order" in)错误的问题。当管理员或审核组成员访问注销申请列表页面时,会从$_GET超全局变量数组中进行order赋值操作。这个变量因为被遗弃了,所以无论何种访问请求都不会获取到该字段。这就导致页面访问时出现Undefined错误。
    16、【php版本升级错误处理】:修复/global/cancel_account_list.php(行数:62、69)文件出现(Undefined variable $trade_no in、Undefined variable $time in)错误的问题。如果有用户申请了注销账户请求,则会读取xc_cancel_account数据表,然后生成列表清单。列表生成中会读取trade_no(订单号标识)、time(申请时间)两个字段。这里存在命名错误,导致变量赋值失败。
    17、【php版本升级错误处理】:修复/global/cancel_account_list.php(行数:22)文件出现(cancel_account_list_add('audit','Undefined variable $link_type in )错误的问题。页面菜单在进行动态传参时,写入link_type并不存在的变量值,导致整个菜单全部无法点击。已将link_type变量值从onclick事件中进行移除操作。
  • 0
    小小乐lv.2实名用户
    2024年5月20日
    1、【php版本升级错误处理】:修复 php start.php start -d命令脚本启动失败的问题,错误返回(PHP Parse error: syntax error, unexpected token "if" in)错误的问题,宫论异步程序库(start_GongLunTask.php)存在大量#[]语法注释,导致出现上述错误。php8会将#解释为函数执行命令,这导致整个执行进程出现错误。目前已修改脚本库所有注释方法。
    2、【php版本升级错误处理】:修复 php start.php start -d命令脚本启动失败的问题,错误返回( Undefined array key "SERVER_ADDR")的问题。异步进程通过xc_is_local函数来断当前请求是否来自本地或者白名单中的 IP中存在一个错误。SERVER_ADDR超全局变量是不可用的。在异步环境下无法通过$_SERVER['SERVER_ADDR']来获取IP地址,这导致出现了上述错误问题。正确的处理方式是通过isset来先检查变量是否存在。
    3、xc_is_local函数增加一个业务判断,通过xc_is_asyn()方法来进行异步环境检测。如果返回为TRUE则代表请求来源是异步,但是因为异步并不会存在_SERVER超全局数组,这将导致后续的请求验证无法视为安全有效。为了避免异地进程请求视为非法类型,这里会通过xc_is_asyn方法来做额外验证。只要返回true,则xc_is_local也会直接返回true,确保请求被放行或被允许。
    4、Workerman内核进行大更新从4.0.27升级到v4.1.15。gateway-worker内核从v3.0.22升级到v3.1.17。与之对应的依赖文件和库也都已经同步更新处理。注:本次更新是通过Composer包进行线上更新的,需要特别注意的是Workerman内核非常复杂和重要,为了防止冲突不与程序的Composer包进行关联,单独引入单独处理。
    5、【php版本升级错误处理】:修复/sdk/wss/vendor/workerman/workerman/Worker.php(行数:673)文件出现( Creation of dynamic property Workerman\Worker::$socket is deprecated in file)错误的问题。具体错误为:动态属性是在运行时动态添加到类的实例中的属性,而不是在类的定义中声明的属性。php8版本已启用该方法,需要重新升级底层依赖。
    6、宫论核心组件(websocket+异步进程)已经成功在PHP8.2环境启动并运行,这两个组件一个是负责消息双向通讯(包括:页面回调、私信聊天、消息通知、群组消息下发),一个是负责进程消息转发(异步任务执行、定时计划、消息队列、函数转发)非常核心的两个扩展,业务极度依赖。之前一直在PHP7.4环境下进行开发维护,目前已平缓升级到8.2内核。后续肯定还有很多错误指针,需要一一修复。但是进程脚本能够启动,说明问题基本不大。
    7、【php版本升级错误处理】:修复/hook.php(行数:7724)文件出现(Undefined variable $client_id in)错误的问题。client_id是用户websocket身份标识,如果服务进程出现异常 会导致用户无法连接。在执行xc_user_visits_hook钩子时,会因为返回结构体不是标准的json数据包,导致后续的ajax请求无法被顺利执行下去。正确的处理,在执行该变量参数的处理时,通过issest来进行参数初始化。
    8、【php版本升级错误处理】:修复xc_user_visits_hook函数:7701位置出现(Undefined variable $city in)错误的问题。当用户首次来访时会通过xc_ip_position方法去解析来访者IP信息,然后再赋值到$result['city']数组并返回到前端处理。这里的赋值处理没有考虑到IP解析失败的情况。当解析失败强行进行参数赋值会出现Undefined错误的情况。
    9、修复并解决websocket消息无法双向通讯的问题,前端页面只能单向链接,不会通过Events.php接口将消息转发到wss.php接口处理。这导致素有的自定义websocket消息数据包事件全部失效,前后端无法通过转发接口建立有效的沟通交流渠道。注:经过排查该问题是因为升级Worker进程导致的,原本自定义的接口文件(Events)被新版woker进程启用,默认不在调用自定义项目文件的配置。已进行修复并处理。
    10、修复并解决websocket来访事件,如果是同一用户多设备登录无法触发(其它设备登录)警告弹窗的问题。具体错误/function/websocket.php文件中websocket_is_online函数出现报错导致,该函数用于检查WebSocket服务器上指定用户是否在线。如果用户存在多个设备在线则返回对应数组。之前的登录异地检测就是通过该函数查询用户同时在线设备数来执行警告通知的。php8版本中,get_option获取配置信息失败,导致查询结果始终为0。
    11、【php版本升级处理】:修复/global/express.php(行数:59)文件出现( Undefined variable $tips in )错误的问题。淘货退货:tao_refund、拍卖藏品退货:bzg_refund会有tips标签提醒。提醒内容为(未经卖家同意,请不要寄出到付件。<BR>退回藏品建议采用(顺丰+保价),若出现损坏卖家可拒收)。除了这两种场景,其它发货页面则不会有该提醒。因此会出现Undefined错误的情况。
    12、【php版本升级处理】:修复/global/pay_order.php(行数:38)文件出现( Undefined variable $tips in )错误的问题。用户可以在我的账单页面,查看自己的全部的支付订单记录+退款订单记录。为了方便管理员溯源交易信息,这个页面允许超级管理员(后台级别)访问查看。换句话理解就是管理员可以查看指定用户的的交易付款记录,在访问指定用户的交易账单页的时候会效验用户身份,如果传递了author_id变量,并且是管理员那么就会展示tips(你正在查看XXX的支付记录)。该标签变量正常用户是不会输出的,因此访问的时候会出现上述错误。
    13、【php版本升级处理】:修复/global/pay_order.php(行数:144)文件出现(Undefined variable $img in、Trying to access array offset on value of type null in )错误的问题。账单支付页面会查询交易订单是否存在封面图,如果存在封面图则会菜单输出对应的商品图片。否则输出文字信息。这里在输出时没有考虑到变量未被初始化赋值的情况。
    14、【php版本升级处理】:修复/global/pay_order_api.php(行数:139)文件出现(Undefined variable $img in、Trying to access array offset on value of type null in )错误的问题。账单支付页面会查询交易订单是否存在封面图,如果存在封面图则会菜单输出对应的商品图片。否则输出文字信息。这里在输出时没有考虑到变量未被初始化赋值的情况。
    15、【php版本升级处理】:修复global/money_order.php(行数:43)文件出现( Undefined variable $tips in )错误的问题。用户可以在我的余额流水记录页面,查看自己的全部的余额收支记录。为了方便管理员溯源交易信息,这个页面允许超级管理员(后台级别)访问查看。换句话理解就是管理员可以查看指定用户的的余额收款记录,在访问指定用户的余额账单页的时候会效验用户身份,如果传递了author_id变量,并且是管理员那么就会展示tips(你正在查看XXX的余额记录)。该标签变量正常用户是不会输出的,因此访问的时候会出现上述错误。
    16、【php版本升级处理】:修复/global/money_order.php(行数:140、141、145)文件出现(Undefined variable $img in、Trying to access array offset on value of type null in、Undefined variable $commend_1 in)错误的问题。余额流水记录页面会获取交易订单数据,如果订单存在商品图或相关信息则会在菜单中展示。但是如果不存在则会因为变量未被初始化而返回对应的数组错误。
    17、【php版本升级处理】:修复/global/money_order_api.php(行数:7、8)文件出现(Undefined array key "year" in、Undefined array key "month" in)余额账单API分页接口查询支持月份查找,因此保留了两个post变量(year、month)字段。除非用户指定月份查询否则这个两个变量默认为空,因此在缺失变量的情况下,会出现Undefined错误结果。
    18、【php版本升级处理】:修复/global/money_order_api.php(行数:106、107、111)文件出现(Undefined variable $img in、Trying to access array offset on value of type null in、Undefined variable $commend_1 in)错误的问题。余额流水记录页面会获取交易订单数据,如果订单存在商品图或相关信息则会在菜单中展示。但是如果不存在则会因为变量未被初始化而返回对应的数组错误。
    19、账户余额收支API接口优化,增加一个安全检查。每次接口请求都会通过xc_is_login函数去获取当前用户的UID,如果获取失败则表明对方未登录直接返回错误【请登录后再操作!】,如果获取成功则将其赋值到user_id_变量,然后进行第二个安全检测。检查当前用户UID是否和查询用户对象一致,如果不一致则继续通过xc_is_admin获取当前用户身份。如果不一致,并且用户不是超级管路员则返回【你没有权限查看】。防止隐私泄露(用户能看到别人的支付记录)
  • 0
    小小乐lv.2实名用户
    2024年5月18日
    1、【php版本升级处理】:修复/hook.php(行数:3906)文件出现( Undefined array key "image" in )错误的问题。通过xc_feedback_reply_hook钩子对工单进行回复补充时,有个可选的超全局变量$reply['image']。回复的补充图片,该字段因为可选,所以不一定存在值。如果为传递则会因为PHP8严格效验导致出现对应的错误提示。正确的处理三元运算赋值false。
    2、【php版本升级处理】:修复/hook.php(行数:3914)文件出现( Undefined array key "last_reply" in )错误的问题。当反馈人员对工单进行回复时,会通过last_reply字段来获取最后回复的工单客服人员,然后提醒对方。但是如果工单没有客服回应,那么就无法获取到该字段。这会导致出现上述的Undefined错误。正确的处理方式,在输出判断前先对返回结果进行issest判断。有值才执行。
    3、【php版本升级处理】:修复/push.php(行数:581)文件出现( Uncaught TypeError: Cannot access offset of type string on string in )错误的问题。服务号封装的数据包,$avatar['nickname']用于获取服务号昵称,这个参数是以数组方式读取,但是实际获取到的结果是一个字符串。avatar数组在数据包处理之前已经被urlencode处理,正确的处理方式应当通过get_user_meta来获取。
    4、【php版本升级处理】:修复/hook.php(行数:3809)文件出现 (Undefined variable $image_list in )错误的问题。工单反馈发布的时候,会对image_list数组列表进行回调处理,将上传标识标记为OK。避免被系统定时任务删除图片。业务逻辑本身没有错,但是直接通过if来判断数组是否存在,不符合PHP8的规范。此处会直接触发Undefined错误。正确的处理是isset来来检测是否存在。
    5、xc_public_account_push服务号在线消息发送钩子进行优化处理:avatar不在通过urlencode来进行URL字符处理。而是直接改为htmlspecialchars函数来处理。避免头像数据包传递到前端时,如果未进行URL编码导致出现乱码现象。这个调整属于规范化。非特殊需求,所有的前端字符传递(涉及到HTML或用户提交的内容部分)一律采用htmlspecialchars编码化。
    6、前端收到service_notification的消息包后,会依次通过htmlspecialchars对以下参数进行解码处理(title:消息标题内容、content:收到的简短正文内容、img:服务号的头像信息,包括认证标识等、link:链接地址)。前后端做到统一交互处理,确保websocket消息不回因为出现'“造成json无法识别的问题。
    7、工单反馈详情页,现在会在头部区域展示【发布人的用户名】信息,方便客服或管理员知晓工单的发起人。头部区域展示内容如下【工单 XXXX .用户昵称. 2024-05-17 09:58 状态图标(待处理、待回复、已关闭)】同时页面右上角增加发起人的头像,管理员可以通过点击头像方式前往用户主页,以便进行更多操作。
    8、【php版本升级处理】:修复/global/im/history-one.php(行数:86)文件出现 (Undefined variable $time1 in)错误的问题。通过页面下拉加载更多料多聊天记录时,或尝试获取聊天的最后会话时间,然后通过计算来判断是否需要输入日期(段时间内的重复聊天记录,不显示时间)。这里的业务逻辑有个time1变量,该变量控制日期展示。如果获取的时间不需要展示,则变量不会初始化。这导致部分出错!
    9、【php版本升级处理】:修复/shortcode.php(行数:184)文件出现 (Undefined array key "title" in )错误的问题。通过xc_shortcodes_msg_card_shop输出商品卡片信息的时候,会强制性的使用urldecode对标题title进行url转化。部分商品在生成卡片的时候并未捕获到标题,这里的处理会直接造成Undefined错误返回。
    10、【php版本升级处理】:修复/function/function.php(行数:5375)文件出现(Undefined variable $result in)错误的问题。当内容通过xc_maskStringInRange函数进行脱敏展示输出的时候,会根据传递str和end进行参数转*处理。这个过程涉及到for遍历循环(当在指定访问内将字符替换*)并将结果处理赋值到$result。但是因为该变量未被初始化,这就造成了错误返回。
    11、【php版本升级处理】:修复/hook.php(行数:8929)文件出现( Undefined variable $verification in/ Trying to access array offset on value of type null in )错误的问题。通过xc_update_password_hook进行账户密码重置工作时,在完成业务逻辑后会额外返回一个id字段给前端。该字段是通过verification数据表获取。属于历史遗留字段(之前已经被移除)这里强行输出会导致出现报错。
    12、【php版本升级处理】:修复/global/history_api.php(行数:38)文件出现(Undefined variable $tips in)的错误问题。用户历史浏览记录是被允许管理员查看的,为了方便区别知晓当前管理员正在查看谁的浏览器记录,如果$_GET['ahthor']存在,并且用户身份是管理员,那么将会输出tips标签【你正在查看XXXX的访问记录】,该tips只有符合条件的情况下才会输出。因此用户查看自己的访问记录会在PHP8环境下发生错误警告
    13、【php版本升级处理】:修复/global/history.php(行数:57)文件出现(Undefined property: stdClass::$freight in)的错误问题。如果展示的浏览商品记录是淘货,那么会通过get_results方法去获取商品信息,并输出对应的页面元素,其中有个字段是freight:这是运费价格,但是该字段属于可选,也就是淘货可以选择包邮。如果包邮的话该字段会不存在。这导致输出淘货商品信息的时候,会因为包邮商品不存在运费价格而发生错误警告。
    14、【php版本升级处理】:修复/global/history.php(行数:48)文件出现(Attempt to read property "shop_img" on null in)的错误问题。在流量页面输出淘货商品信息时,如果shop_img(淘货商品图片)字段不存在,则会将该变量设置为空数组。避免后续的业务出现错误。注:shop_img字段正常都存在,但是在早期的商品测试中,该字段并未集成。因此有些商品未写入。
    15、【php版本升级处理】:修复/global/history.php(行数:58、59、60、64)文件出现(Undefined array key 0 in 、Attempt to read property "state" on null in、Attempt to read property "shop_order" on null in)当用户访问浏览历史页时,会通过wpdb去获取对应的记录。然后根据返回的数据表进行遍历输出。其中有很多字段非强制性的,可能存在也可能缺失。如果直接进行输出会产生相对应的错误。
    16、【php版本升级处理】:修复/module/xc_complaint/order_list.php(行数:79)文件出现( Undefined property: stdClass::$shop_amount in )错误的问题。申诉管理页面目前有两种商品类型(tao:淘货商品、bzg:拍卖藏品)这两个商品对于成交价的字段不一样,一个是shop_amount、一个是final_price。这个页面在处理价格输出的时候,因此需要根据类型进行不一样的参数赋值。否则会出现错误。
    17、【php版本升级处理】:修复/module/xc_complaint/order_list.php(行数:84、103、79)文件出现(Undefined variable $post_id in、Undefined variable $trade_no in 、)post_id和trade_no两个都是可选变量。在需要输出的时候需要通过三观运算进行判断,如果未被初始化则将其标记为空值。避免出现Undefined的错误返回。
    18、【php版本升级处理】:修复/module/xc_complaint/order.php(行数:155)文件出现( Undefined variable $status in)错误的问题。status是一个历史遗留字段,之前重构页面的时候该字段已经被丢弃不在使用。页面直接调用不存在的变量会出现上述错误返回。已移进行除处理。
    19、【php版本升级处理】:修复/module/xc_complaint/order.php(行数:189、243)文件出现(Trying to access array offset on value of type bool in)错误的问题。申诉举报页面会根据用户提交的商品信息来输出内容,其中有两个字段【 $sell_data['img']和 $sell_data['video']】是可选的(图片和视频材料),并不强制要求用户提供。如果用户未提供的情况进行输出,会出现对应的错误。
  • 0
    小小乐lv.2实名用户
    2024年5月17日
    1、【php版本升级处理】:修复/global/user_site.php(行数:113)文件出现(Uncaught TypeError: Cannot access offset of type string on string in、Stack trace: #0 {main} thrown in)错误的问题。访问APP资料设置页面时会获取用户的实名认证状态,如果用户存在$real['name']字段,则说明对方已认证,此时会通过加密函数对用户身份证信息进行脱敏显示。
    2、【php版本升级处理】:修复)/global/merchant_home.php(行数:46)文件出现(Undefined variable $bg in )错误的问题。访问用户主页的的时候,如果是商户主页则会读取bg字段(这个是保留字段,后面将允许用户自定义封面图)目前暂未进行参数设计,因此该字段是不存在的。直接通过if判断是会造成错误码访问的。
    3、【php版本升级处理】:修复/global/merchant_home_api.php(行数:42)文件出现(Undefined variable $appraisal in、Undefined variable $state_img in)错误的问题。通过分页接口去获取商户商品数据的时候,会读取appraisal和state_img两个字段。如果商品列表不包含该字段则会返回错误。
    4、【php版本升级处理】:修复/global/merchant_home_api.php(行数:129)文件出现(Undefined variable $class_cover_1 in、Undefined variable $final_price in)错误的问题。通过分页接口去获取商户商品数据的时候,会读取appraisal和state_img两个字段。如果商品列表不包含该字段则会返回错误。
    5、【php版本升级处理】:修复/function/function.php(行数:8684)文件出现(Undefined array key "report" in)错误的问题,通过get_status_mark函数查询用户某个状态提醒时,如果用户从未触发过提醒,直接进行if判断会返回错误Undefined。正确的处理是通过三元运算对返回值进行效验,没有则直接标记为false。
    6、【php版本升级处理】:修复/global/setting/setting_status.php(行数:135)文件出现( Undefined variable $admin in)错误的问题,访问账户功能状态页面时会通过xc_is_admin_x函数来检测用户是否具备管理员权限,如果是管理员则开放操作权限给当前用户,这里的判断存在一个瑕疵。直接通过if判断admin,但是普通用户没有进行赋值操作。会造成页面返回Undefined错误信息。
    7、【php版本升级处理】:修复/global/setting/setting_status.php(行数:139)文件出现(Undefined variable $onclick in )错误的问题,如果当前用户具备管理员权限,则会生成对应的onclick事件,可以通过点击菜单对用户的指定权限进行封禁操作。onclick变量仅管理员身份状态下会进行赋值操作,这导致非管理员身份访问会出现报错异常。
    8、【php版本升级处理】:修复/module/xc_report/detail.php(行数:53)文件出现( Undefined variable $report_admin in)错误的问题,如果当前用户具备管理员权限,则会生成对应的onclick事件,可以通过点击菜单对用户的指定权限进行封禁操作。onclick变量仅管理员身份状态下会进行赋值操作,这导致非管理员身份访问会出现报错异常。访问举报详情页时,会效验来访者是否具备操作权限(管理员或审核小组成员)会赋值变量 $report_admin = true。在一些内容展示上,如果用户身份具有操作权限会额外输出一些元素信息。这里是直接通过report_admin变量判断处理。如果用户不具备管理权限,那么report_admin则不存在,此时直接判断会造成页面出现警告提示信息。
    9、【php版本升级处理】:修复/module/xc_report/detail.php(行数:64)文件出现( Undefined variable $report_content in)错误的问题,如果当前用户具备管理员权限,则会生成举报者的用户参数信息(比如头像、昵称、认证标识)等内容。但是如果是用户本人查看则会忽视这一部分内容。判断过程中没有考虑到report_content变量在本人访问时未赋值的情况,因此造成了页面错误提示。
    10、【php版本升级处理】:修复/module/xc_report/detail.php(行数:101)文件出现( Undefined variable $report_admin in)错误的问题,如果当前用户具备管理员权限,并且举报内容是已处理状态(status=0)那么页面会输出status标记状态,并且会展示审核员的信息。如果不是管理员则只是显示已处理,二不展示是否删除。并且审核员会做信息保护,只展示宫论官方。这里是根据report_admin变量进行判断。如果该变量未被初始化则会造成页面错误。
    11、后端接口xc_account_freeze_check(账户申请风控冻结,资质检查)优化处理。1、通过xc_get_real获取用户用户是否完成账户实名方法,改为xc_is_login_idcard函数来执行。并且返回结果新增一个字段【jump:real】。2、如果用户未绑定手机号,并且后台已开启绑定手机号才能使用该功能,则会通过xc_is_phone来效验是否绑定手机号。如果未绑定手机号则返回对应错误提示,并额外返回字段【jump:login】
    12、账户申请风控冻结时,会通过xc_is_loginL来获取当前用户UID,如果未登录则直接返回错误【请先登录后再操作,并返回字段jump:login】。并且再进行后续的参数效验中,都通过xc_is_loginL返回的uid进行参数查询。之前是通过前端传递post[author_id]来核验,这个非常不严谨,并且容易暴露用户隐私。正确的处理方式是通过系统函数来获取当前用户UID。
    13、【php版本升级处理】:修复/global/api.php(行数:5809)文件出现(Trying to access array offset on value of type null in)错误的问题。通过API发起(feedback_publish)工单反馈提交请求时,会通过xc_feedback_publish_before_hook方法来验证用户的请求是否被允许,根据返回的code状态码决定最终提示。但是函数只会返回错误或权限不足的结果,如果被允许发布则不会传递结果。这导致在验证结果的时候出现变量异常的情况。
    14、xc_feedback_publish_before_hook钩子进行返回结果优化:新增一个拦截提示。通过xc_is_login来获取当前登录用户的UID,如果获取失败则表明用户未进行登录。并额外返回jump:login。同时原有的内置拦截也会根据情况返回jump这个数组参数。如果是因为手机号未绑定被拦截则返回jump:phone,如果因为未进行实名认证被拦截则返回【jump:real】。与之对应的API接口和前端接收参数函数都做了适配处理。
    15、【php版本升级处理】:修复/global/pages/hook_push.php(行数:6、28、35、3802、3809、3845、3850、3857)文件出现(Undefined global variable $Task_Worker in)错误的情况。通过xc_push_hook下发消息时,会使用$GLOBALS['Task_Worker']超全局变量来判断用户是否处于异步进程,这个判断方法不严谨,因为非异步环境不会主动初始化。正确的处理方式是:xc_is_asyn()来进行处理
    16、【php版本升级处理】:修复/global/pages/hook_push.php(行数:3838)文件出现(Undefined variable $link in)错误的情况。当push接口收到new_feedback消息下发请求时,会封装service_msg服务号消息通知数组,然后将消息发给客服人员。service_msg消息数组中有个变量$link是工单反馈的地址,这个变量填写错误,正确被初始化的变量应该为:card_link。
    17、【php版本升级处理】:修复/push.php行数:394)文件出现(Undefined variable $user_nickname in)错误的问题。通过xc_public_account_push函数下发服务号在线消息时,会通过xc_is_public_account来获取服务号的相关信息。然后将组件reply变量,以json形式写入消息参数信息。其中有个nickname字段,是通过user_nickname来获取昵称。但是该参数已被遗弃,导致整个reply小包出现异常。
    18、【php版本升级处理】:修复/function/is.php行数:2012)文件出现(Undefined array key "subscribe" in)错误的问题。通过xc_is_login_gzh函数检测用户是否关注了宫论微信公众号,是否被允许发送公众号模版消息时,使用$json['subscribe']进行结果识别是非常错误的处理。因为subscribe字段并不一定会存在,如果接口异常,该字段就捕获不到。此时直接判断会导致Undefined错误。
    19、【php版本升级处理】:修复/function/function.php行数:2401)文件出现(: Cannot modify header information - headers already sent by (output started at)错误的问题。通过xc_exit返回数据包给前端响应时,在极端情况下会出现重复执行header函数设置HTTP头的错误(比如内置函数有过提交xc_post请求)。处理方法,通过输出缓冲来解决这个问题。调用ob_start()函数来开启输出缓冲,在脚本结束时调用ob_end_flush()函数来发送缓冲区的内容并关闭输出缓冲。
  • 0
    小小乐lv.2实名用户
    2024年5月16日
    1、【php版本升级处理】:修复/page/xc_Vest(行数:3、4、5、8)文件出现(Undefined array key "user_id" in、Undefined array key "password" in、Undefined array key "dq_id" in、Undefined array key "jiebang" in )错误的问题。进行马甲切换的时候,会请求模块接口。同时通过post传递对应的参数变量。这里存在一个问题。接口处会直接通过$_POST[]超全局数组来获取对应的参数变量,但是接口存在多个业务逻辑,每次传递的变量参数不一致。全部初始化时获取,会导致读取失败。间接造成上述页面错误。正确的处理方式,通过三元运算来验证是否存在值,不存在值则进行null赋值操作。
    2、【php版本升级处理】:修复/global/pages/template.php(行数:311)文件出现(Undefined variable $limit_views in )错误的问题。提供模版引擎输入朋友圈内容的时候,会检测用户是否为作者或管理员,如果具备其一条件则会通过get_post_meta来读取字段【limit_views】来检测文章是否限流,如果限流则输出标识。但如果用户既不是管理也不是作者,会因为变量不存在而返回Undefined错误。
    3、【php版本升级处理】:修复/function/paging.ph(行数:311)文件出现(Undefined array key "filter" in)错误的问题,通过xc_moments_consult输出朋友圈内容时候,或读取当前用户的朋友圈配置,并检测配置是否存在filter过滤名单,如果存在则会屏蔽用户的内容输出。这里有个严重问题,如果用户没有设置屏蔽名单 则字段是读取不到的。直接判断会返回错误:Undefined。
    4、朋友圈评论回复钩子进行优化处理,如果因为账户权限问题而返回的错误,现在会携带jump返回体。比如:如果用户未登录,除了返回错误提示还会携带【jump:login】、如果因为没有绑定手机号,翻译错误提示。则会携带【jump:phone】。并且钩子返回数组结构,不在通过传统的code进行判断 而是将整个数组原封不动的传递到下个函数。这样多个函数嵌套时,前端始终能获取到正确的响应体。这个是规范化整个返回结构流程,后续所有的后端业务都必须按照这个标准进行数据返回。
    5、【php版本升级处理】:修复/function/function.php(行数:6038)文件出现 ( Undefined array key "state" in、 Undefined array key "state" in)错误的问题。初始化来访事件,会通过xc_is_tao方法来获取用户是否为淘货卖家,但是这个检测方法存在瑕疵。如果数据表查询不到结果则返回为空值,此时直接通过$results['state'] == 'sell'进行判断,会因为数组不存在而发生错误警告。正确的处理是通过三元运算来处理返回结果。
    6、【php版本升级处理】:修复/module/xc_moments/detail.php(行数:155)文件出现 (Undefined variable $power_state in)错误的问题。当作者或管理员查看朋友圈详情页的时候,会根据内容状态来输出【公开、私密、粉丝可见】等一系列提示,如果用户不是作者或管理员则状态变量获取不到。此时会出现php警告提示(Undefined)。
    7、【php版本升级处理】:修复/module/xc_moments/publish_image.php(行数:21、51)文件出现 ((Undefined array key "comment_close" in、Undefined array key "comment_close" in )错误的情况。进入朋友圈图文发布页面时,会通过读取用户元字段moments_config来获取朋友圈配置,通过读取配置来查询用户是否关闭了朋友圈,如果关闭了则返回提示。但是如果用户未配置过朋友圈,则字段和对应配置信息获取不到,直接if判断会造成错误返回。正确的处理方式是通过三元运算来赋值。
    8、【php版本升级处理】:修复/module/xc_moments/publish_video.php(行数:22、53)文件出现 ((Undefined array key "comment_close" in、Undefined array key "comment_close" in )错误的情况。进入朋友圈视频内容发布页面时,会通过读取用户元字段moments_config来获取朋友圈配置,通过读取配置来查询用户是否关闭了朋友圈,如果关闭了则返回提示。但是如果用户未配置过朋友圈,则字段和对应配置信息获取不到,直接if判断会造成错误返回。正确的处理方式是通过三元运算来赋值。
    9、新增ajax全局监听【complete】,当ajax成功获取到响应体数据后,会通过全局回调动作执行以下动作。1、通过 xhr.responseJSON 获取到服务器返回的 JSON 数据,并将其赋值给 data 变量。2、检查 data 是否存在,是否是一个对象,以及是否包含 'jump' 这个属性。3、如果存在jump那么就调用 xc_hook_jump_page(data.jump) 函数,并将 'jump' 属性的值作为参数传入。实现页面自动跳转功能。
    10、xc_hook_add_comment宫论内容评论统一提交钩子优化:后端在出来评论请求提交时 会通过xc_comment_before_hook进行参数效验,检测用户是否具备提交评论的条件。如果不具备条件则会返回拒绝原因给前端。之前仅返回code/msg两个字段,现在会返回所有数组结构。注:确保jump数组字段也能同步返回过去,以实现页面自动跳转需求。
    11、【php版本升级处理】:修复/global/setting/setting_moments.php(行数:11)文件出现 ( Undefined array key "filter"、 Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in、Stack trace:#0 {main} thrown)错误的问题。普通用户进入朋友圈设置页面后,会通过get_user_meta来读取moments_config配置,并从中提取filter过滤名单进行count统计处理,如果用户没有配置过朋友圈,j会因为数组参数不存在而发生一系列错误。
    12、修复用户在朋友圈设置页进行参数设定时,返回(你无权操作!)的错误提示。当API接口收到moments_permission_settings请求时,会获取当前用户的UID与与$_POST['author_id']; //操作用户进行对比,如果不等于则进行xc_admin管理员身份验证,两者都返回false的情况则提示对方无权操作。这里的判断存在一个错误||条件是相反判断,正确的判断方法是&&并且。
    13、【php版本升级处理】:修复/global/setting/page_moments_filter.php(行数:10)文件出现 (Undefined array key "filter" in/Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in )错误的问题,今日朋友圈黑名单列表页时会通过get_user_meta来读取moments_config配置,并从中提取filter过滤名单进行count统计处理,如果用户没有配置过朋友圈,j会因为数组参数不存在而发生一系列错误。
    14、用户朋友圈设置页面进行优化处理,移除moments_avatar_onclick变量的封装处理,防止出现套娃现象。注:为了确保预览效果更真实,话题封面页面基本与我的朋友圈页面头部区域一致,在右下角用户头像区域,保留了onclick点击事件,允许用户通过点击头像进入设置页面。这样的处理直接导致出现页面重复打开的现象。(封面图设置页面进入-朋友圈设置页面-进入封面图设置页面)。
    15、修复并解决朋友圈消息通知页,交互消息分页加载异常的问题,具体表现为。每次分页返回的结果只有最后一个,比如返回11-20的内容,则前端只会收到20这一条内容,其它11-19则无法获取到。经过排查,问题源于:notice_moments_api处理分页数据时,没有在for循环中采用.递增传递模式,而是直接通过html赋值。这导致for循环结束后金辉保留最后一个结果。目前已修正处理!
    16、修复并解决xc_home_access_hook用户主页访问钩子事件钩子:执行后出现错误(Uncaught TypeError: unserialize(): Argument #1 ($data) must be of type string, array given in)错误的情况,该钩子负责用户访问来访记录。在执行时候会读取user_config字段,如果获取成功则会写入$user_config['visits']字段。php8版本会严格效验变量,如果用户未生成过该数组则会返回错误。此时正确的处理方式应该是先偶去结果,在进行更新。如果没有结果应当创建空数组。
  • 0
    小小乐lv.2实名用户
    2024年5月15日
    1、修复通过xc_get_avatar函数返回的用户头像唤醒信息,nickname昵称都会携带()的问题,即便没有备注记录也会显示。在查询redis缓存记录时。错误的通过issest来判断remark_redis_data变量是否存在,这个判断只是检测是否存在变量赋值,而不是判断是否为空。正确的处理方式是通过empty来效验值是否真实存在。目前已进行修正处理。
    2、【php版本升级处理】:修复/function/is.php(行数:820)文件出现(Undefined variable $user_registered in)错误的问题。通过xc_is_msg_send检测用户是否具备消息发送条件时候,其中有一个检测是获取用户的注册时间,然后后台预设一个时间。注册时间小于XXX的将会拦截消息发送。这里的拦截存在一个赋值错误的情况,错误的将register_date写成user_registered导致进行一个不存在的变量判断。
    3、新增前端钩子:xc_hook_update_notice()更新用户聊天消息列表,当用户发生交互(发送消息、分享商品、收到消息)都需要更新用户的会话列表,这样用户才能才看预览到最新的消息记录。之前的处理方案是手动请求notice-page.php接口来完成,为了确保业务的统一性,这里封装成前端钩子。只要执行该钩子就会自动触发更新。
    4、聊天消息列表页(元素位置:global_notice_list_time)增加一个time自定义属性。用于记录消息会话列表的最后更新时间戳。当触发xc_hook_update_notice请求时,后端会进行字段核验,如果传递的时间戳和用户本身的时间戳是一致的话,说明没有会话记录更新动作。此时会过滤掉本次请求(前端私信会话页面无需进行更新)。
    5、xc_hook_update_notice前端事件新增两个拦截。1、如果xc.user_id不存在(即用户未登录状态,此时不存在会话列表页)将会禁止请求发出。避免接口出现风险(用户通过特殊手段,获取到非当事人的聊天会话激励)。2、当用户执行该函数时,会检测页面是否存在(global_notice)元素,如果不存在用户并未加载会话窗口,此时也不需要通过接口去请求更新会话记录列表。
    6、私信分享内容成功回调钩子:xc_hook_share_friends_ok,新增一个动作。执行xc_hook_update_notice请求,更新并同步用户的聊天会话窗口。注:只要私信内容分享成功,那么即用户与被分享用户的聊天会话则形成,此时如果不更新会话列表,用户不能看到聊天对象。必须重启页面才会显示。这明显不符合逻辑,正确的处理是分享成功,同步新的会话列表到用户窗口才对。
    7、css样式调整,通过私信分享的商品卡片.xc_msg_shop .top做出样式适配处理,默认的卡片会话窗口宽带容器固定为100vw、margin上下高度间距为1vw、商品卡片内容布局使用display:flex。确保聊天页面的商品卡片,不会因为内容长度不足,出现宽度压缩的现象。注:为了防止样式冲突,上述样式需要使用父级元素(chat-list)进行位置锁定。
    8、【php版本升级处理】:修复hook.php(行数:1590)文件出现(Undefined variable $user_registered )错误的问题。通过xc_send_im_hook执行消息发送时候,会检测用户的注册有效期是否低于后台限制,如果低于则不允许发送消息。这里的事件判断参数写入错误,register_date写成了user_registered,导致变量不存在。php8返回Undefined错误。
    9、【php版本升级处理】:修复hook.php(行数:1603)文件出现 (Undefined array key 3 in)错误的问题。消息发送会检测用户是否拉黑了对方或者对方拉黑了用户。如果有的话则不允许消息发送。这里的判断方式是直接通过读取用户字段:user_blacklist(黑名单列表),然后直接对$user_blacklist[$author_id]进行判断。如果处于黑名单则数组变量存在值。这个方法存在瑕疵。因为如果没有拉黑则数组不存在,会出现Undefined错误。正确的处理方式是通过array_key_exists和is_array两个函数来严格检查。
    10、【php版本升级处理】:修复hook.php(行数:1684)文件出现 ( Undefined variable $content_number in)错误的问题。私信发送消息是有聊天字数上限拦截,避免用户发送过长的消息过去。这里是从xc_im_content_max来获取后台字数限制上限,然后对比content_number。如果长度超过后台限制则返回对应错误。实际上content_number属于不存在的变量,之前并没有通过strlen来进行长度赋值,这导致PHP8返回错误异常。目前已进行修正处理。
    11、【php版本升级处理】:修复hook.php(行数:1535)文件出现 ( Undefined variable $user_id in )错误的问题。通过xc_add_msg_hook钩子执行消息创建时,会通过redis缓存来查找今日消息发送次数 并结合后台设置来做拦截处理。但是redis缓存键名存在异常,导致出现Undefined错误。具体表现:缓存键名【day:send_msg-' . $user_id】但是整个函数并没有初始化过user_id,因此该变量实际并不存在。
    12、【php版本升级处理】:修复/function/function.php(行数:4048)文件出现 ( Undefined array key 0 in、 Attempt to read property "time" on null in)错误的问题。当私信消息发送成功后,会执行xc_wss_message函数来发送websocket消息。函数内会通过xc_get_sql来读取缓存聊天消息,然后在解析参数。其中有个参数是【time】即最后的发送消息时间,会通过strtotime进行转换。但是之前这里的写法出现错误,数组写成了对象,这导致出现了Undefined错误。
    13、$.ajaxSetup全局AJAX请求事件增加一个优化处理:当请求触发success回调监听时候,会使用(data && 'jump' in data)方法去检测数组对象是否包含jump,如果包含则执行xc_hook_jump_page事件进行页面跳转处理。但是ajax请求返回的data并不一定是对象data,这会导致前端在收到非data结果时,出现(Uncaught TypeError: Cannot use 'in' operator to search for 'jump' in)错误的现象。正确的处理方式 通过typeof data === 'object'来检测是否为对象,如果不为对象则跳过执行。
    14、【php版本升级处理】:修复/global/api.php(行数:1495)文件出现(Undefined property: WP_Error::$ID in )错误的问题。通过login_password函数发起账户密码登录时,会通过wp_authenticate_username_password函数来核验用户输入的账户昵称和密码是否安全一致。如果不一致则会返回错误。这里会直接对返回值的$login_user->ID进行if判断。但实际如果获取不到对象,则判断会出现异常。
    15、【php版本升级处理】:修复/wss.php(行数:39、112、126、)文件出现 (syntax error, unexpected token "/", expecting "]" in)相关错误的问题,php8版本不在允许使用#[]方式进行内容注释,这种注释方法会导致出现syntax error错误。新版本会将#[]作为函数进行解析,而不是传统的注释用法。目前已对其进行修复处理。
    16、修复并解决websocket消息异常的问题,现在websocket消息包可以在php8环境下正常完成转发处理。数据包可以完成双向通讯处理。包括不限于(私信聊天,系统消息、群组消息、断线重连)等业务请求。websocket已适配兼容最新php8.2版本,原有的API接口目前都能正常使用,暂未发现其它问题!
  • 0
    小小乐lv.2实名用户
    2024年5月14日
    1、【php版本升级处理】:修复/module/xc_moments/detail.php(行数87)文件出现(Undefined variable $moments_like in)错误的问题。进入文章详情页会通过moments_like来获取点赞记录,如果存在该字段,并且为数组则会输出对应的点赞HTML信息。这里忽视了一个情况,并没有严格效验字段是否存在,直接进行is_array判断会返回警告。
    2、【php版本升级处理】:修复/module/xc_moments/detail.php(行数118)文件出现(Undefined variable $comment_html in)错误的问题,查询到comments_consult存在内容,并且为数组结构。会通过for循环遍历进行赋值处理,但是因为comment_html没有被初始化。这里会造成出现一个BUG。首次for遍历的时候会因为变量不存在而发生报错。
    3、【php版本升级处理】:修复/global/pages/template.php(行数:67)文件出现(Undefined variable $rely_comment in)错误的问题。通过模版引起输出评论列表时,会执行一个检测。检查是否评论存在上级回复。如果存在则会输出,正在回复XXX的字眼。但是rely_comment变量只有特定环境才会存在,直接输出会返回Undefined错误的情况。
    4、【php版本升级处理】:修复/hook.php(行数:6605)文件出现(Undefined array key "like" in、Trying to access array offset on value of type null in)错误的问题。进入话题列表页,会通过$meta['like'][0]来获取文章的点赞记录,如果获取不到则会出现Undefined错误,此时进行unserialize反序列字符处理又会发生二次错误。
    5、【php版本升级处理】:修复/hook.php(行数:6721)文件出现(Undefined array key "views" in 、 Trying to access array offset on value of type null in )错误的问题,进入话题列表页,当通过meta来获取views字段时,会因为缓存问题造成出错。目前已通过get_post_meta来提取字段,防止出现上述错误的问题。
    6、【php版本升级处理】:修复/hook.php(行数:6387)文件出现(Undefined variable $id in )错误的问题。当对朋友圈话题进行关注操作时,会通过xc_topic_follow_hook函数来执行业务交互。这里会进行一个检查,通过wpdb的语句去查询用户是否关注过这个话题,是否存在数据表记录。并将查询的结果赋值到ID变量,然后对其进行if判断。但是php8更严谨,如果查询不到结果进行ID判断会导致出现Undefined错误的问题。
    7、【php版本升级处理】:修复/global/setting/setting_topic.php(行数:62)文件出现(Undefined variable $follow_status in)错误的问题。之前的版本,会在用户打开话题设置页的时候通过相关函数去查询是否有关注记录,但是后来重构已经移除了这个判断,遗留变量follow_status还是会进行输出。php8会因为其不存在而返回对应错误信息。
    8、【php版本升级处理】:修复/hook.php(行数:6557)文件出现( Undefined array key 0 in)错误的问题,通过xc_save_topic_hook进行话题参数保存时,会读取 $meta[0]['image']字段来获取原有的封面图,然后与$save['background']进行对比,不符合不对等的情况下会执行update_term_meta更新话题元字段,实现背景封面图的修改。但是如果前端没有提交封面图,这个修改会导致错误返回。
    9、【php版本升级处理】:修复/hook.php(行数:6561)文件出现(Undefined array key 0 in 、Trying to access array offset on value of type null in )错误的问题、与前面话题背景保存异常一样的情况,通过xc_save_topic_hook函数进行参数保存时,会效验avatar字段是否存在。如果不存在(未传递)直接进行参数保存。会导致上述错误的出现。
    10、【redis版本升级处理】:尝试解决缓存在特定场景出现命中失败的问题,目前已将redis服务从7.12升级到7.24版本。同时为了避免不同PHP版本因为兼容问题导致出现查询错误的现象,PHP7.4和php8.2版本全部移除已有的redis扩展服务,其中8.2的版本进行重新安装,7.4则不在进行安装处理。
    11、【php版本升级处理】:修复(行数:8150、8151)文件出现(Attempt to read property "nickname" on bool in)错误的问题。通过get_userdata获取用户所有元字段时,因为缓存缘故可能无法读取到nickname昵称字段。因此在输出nickname的时候,需要对查询结果进行参数效验才对。避免出现Attempt报警。
    12、【php版本升级处理】:修复PHP8.2版本,进行话题保存时,如果上传了话题头像、话题背景。会出现错误( Trying to access array offset on value of type null in)的问题。该错误是由于变量识别错误导致。具体为:$meta[0]['image']是错误的书写方式,正确的数组读取方式为$meta['image'][0]。目前已进行修正处理。
    13、【php版本升级处理】:修复/hook.php(行数:6934)文件出现(Trying to access array offset on value of type bool in )错误的问题。具体错误为对内容进行评论时,会通过xc_sensitive_words函数进行敏感词检测。如果根据返回结果来判断是否存在敏感词汇。这里直接通过if判断,没有考虑无敏感词的状态。php8会出现对应报错。
    14、【php版本升级处理】:修复/hook.php(行数:5937)文件出现(Undefined variable $user_li in)错误的问题。触发xc_friends_share_hook私信分享请求时,会获取当前用户的好友信息列表,然后通过for遍历到user_li变量中,因为未被初始化,在首次赋值的时候会返回Undefined错误信息。
    15、【php版本升级处理】:修复/hook.php(行数:5960)文件出现(Undefined variable $html in)错误的问题。通过xc_follow_consult获取当前用户关注的好友列表后,会将获取的数组名单进行遍历for封装,将对应的HTML构载体赋值到html,然后返回给前端用户。但是因为该变量没有进行初始化赋值操作,会导致php8出现对应错误。
    16、【php版本升级处理】:修复/global/paging.php(行数:1446)文件出现(Undefined array key "search" in)错误的问题。进行私信关注好友分页列表加载请求时,会检查变量$_POST['search']是否存在,但是这个变量并非强制性的,如果用户不是搜索用户,则不会传递这个变量。php8会因为获取不到该变量而返回Undefined错误。
    17、【php版本升级处理】:修复/global/paging.php(行数:1485、1488)文件出现(Undefined variable $user_li in/ Undefined variable $follower_tips in)错误的问题。进行xc_follow_consult函数查询时,会将查找的用户赋值到user_li变量,然后将其返回前端。这里有个问题,如果未获取到用户数组。直接进行if判断会返回错误。
    18、【php版本升级处理】:修复/global/paging.php(行数:1491)文件出现(Undefined variable $follower_tips)错误的问题。通过xc_hook_friends_share_api进行分页用户查找时,如果是未提供用户搜索关键词变量 则默认会返回follower_tips变量。标记当前返回的用户名单为关注用户列表。这里有个IF判断和php8发生冲突,直接对 follower_tips进行判断,刚好传递了search变量,会导致返回Undefined。
  • 0
    小小乐lv.2实名用户
    2024年5月13日
    1、【php版本升级处理】:修复/hook.php(行数:3082)文件出现(Trying to access array offset on value of type bool in)错误的问题。发布内容时如果插入了话题,则会通过is_moments_topic_power来检测话题是否具备使用权限,这个函数返回的不是数组结构,而是布尔值。因此不能通过返回code进行检查。
    2、【php版本升级处理】:修复/global/api.php(行数:5037)文件出现( Trying to access array offset on value of type null in)错误的问题。当发布内容时,会执行xc_moments_publish_check_hook钩子检测,根据返回结果来判断是否符合发布要求。但是这里存在一个致命性的错误,钩子不会返回code=0,这将导致出现符合条件的情况下,发布会因为捕获不到code参数值而出现错误。
    3、【php版本升级处理】:修复/hook.php(行数:4078)文件出现(Undefined variable $linnk in )错误的问题,当文章内容发布后,如果存在艾特用户,会通过回调钩子执行xc_aite_uid名单检测,如果存在用户则会创建function_variable数组,然后通过异步进行push消息下发。这里存在一个问题,封装消息数组时,link参数拼写错误。导致写入空变量错误。
    4、【php版本升级处理】:修复/function/function.php(行数:9550)文件出现(Undefined array key "height" in、Undefined array key "width" in、Undefined array key "size" in、Undefined array key "time" in)错误的问题,当视频没有info信息时回通过xc_video_info进行提取。但是有些参数是无法通过接口捕获到。如果强制进行数组写入,这这会导致出现一系列的错误空值。
    5、【php版本升级处理】:修复/module/xc_moments/detail.php(行数:183)文件出现( Undefined array key "views" in 、Trying to access array offset on value of type null in)错误的问题。显示输入文章阅读量字段时候($meta['views'][0])如果字段不存在会出现上述两个错误。
    6、修复xc_views_count通用浏览量计数函数,出现(Undefined variable $history in)错误的问题,当触发浏览计数时会使用wpdb查询数据表(xc_history),如果未查询到记录,则会根据浏览类型来决定是否记录真是阅读量。之前采用的写法是通过if来处理,但是这个方法存在一个弊端。php8不能对空值进行直接判断,会返回错误。
    7、【php版本升级处理】:修复/module/xc_moments/detail.php(行数:146)文件出现(Trying to access array offset on value of type null in)该错误是由于大量文章自定义元字段不存在,没有进行过滤导致出现的错误。已通过三元运算进行参数修正处理。
    8、【php版本升级处理】:修复/module/xc_moments/detail.php(行数:146)文件出现( Parameter must be an array or an object that implements Countable in)错误的问题,通过xc_article_list_hook进行文章模版输出的时候,对于点赞的处理不能通过count进行数据统计,因为统计源不一定是是数组或对象。
    9、修复并解决我的朋友圈页面视频不能正确加载的问题,该问题在PHP8/7.4都会复现。进过栈线程追踪,最终确定问题出在分页模版数据输出问题上。通过moments_video_html获取视频html构载体的时,错误的将moments_video变量参数写错(之前修改php版本升级错误时造成的),该错误直接导致整个视频输出出现了致命性的错误。目前已进行修正。
    10、修复并解决get_post_metadata过滤器在返回【文章所有字段】数组结构时,有部分文章ID始终返回空数组的问题,该问题源于WordPress原生缓存文件库存在异常导致,具体表现,通过redis接管了内置缓存器,但是缓存管理器有些字段会出现缓存异常(包括文件对象缓存)。目前的临时修复方案,所有缓存请求走内置方法来处理,不经过object-cache文件。
    11、xc_get_avatar函数增加一个优化处理,在输出备注用户名时,会进行一次判断,检测remark_redis_data是否与user_id对等,如果对等则代表输出当前用户的昵称,此时会进行过滤处理。避免极端情况下,自己给自己添加上了备注。同时备注缓存字段会进行isset效验。防止新版本报错。
    12、修复朋友圈详情页views阅读量始终为0的错误,通过get_post_meta获取文章所有元字段信息的时候,无法通过$meta['views'][0]获取到数据。但如果通过单独字段提取是存在缓存的,并且会通过xc_views_count进行数值更新。初步片段式wordpress对象缓存器的问题。这里暂时记录下,改为通过单字段来提取该数值,后期再进行缓存排查问题。
    13、通过xc_share_im_hook接口私信分享内容的时候,会对title标题做两个处理。1、通过mb_strlen获取文字长度,一个中文算一个字。超过100字则进行拦截。提示【分享的文字不能超过100字】。2、通过xc_is_html对分享文字进行检测,禁止分享的内容包含html参数。
    14、为了保证短代码的安全,在创建xc_msg_shop商品短代码卡片的时候,会对title、link参数进行addslashes函数处理,对字符串中的特殊字符进行转义。这个函数会在以下字符前添加反斜线:单引号(')、双引号(")、反斜线(\)和NULL。这样即便文字存在'“也不用担心被破坏结构。
  • 0
    小小乐lv.2实名用户
    2024年5月12日
    1、【php版本升级处理】:修复/global/setting/phone.php(行数:7、22)文件出现(Undefined variable $email in、Undefined variable $onclick in、Undefined variable $title_a in)错误的情况,当用户进入手机号绑定、手机号换绑页面时,会通过xc_is_login_phone来查询用户是否已绑定手机号,默认情况下是传递用户USER_id但是这里填写错误,传递的是不存在变量phone。从而导致出现第七行报错。onclick和title_a的报错则是因为这两个变量仅在用户未绑定手机号的情况下才执行赋值。这导致已绑定过的情况会出现Undefined错误。
    2、【php版本升级处理】:修复/global/im/notice/service.php(行数:81)文件出现(Undefined variable $online_status in)错误的情况。访问服务号消息列表页面时,会通过online_status字段获取对方在线的时间,但是服务号是系统消息,已经移除这个字段的处理。因此该字段是不存在的。这里需要做兼容处理,移除或固定为false。防止出现上述错误。
    3、【php版本升级处理】修复/global/api.php(行数:3532)文件出现( Undefined array key "address" in)错误的情况,当用户进行登录安全设置时(登录限制、报警、地区锁定)会检测用户是否设置了城市区域,如果设置了则$_POST['address']变量存在,则会执行登录地域限制。如果为设置则字段不存在,直接if判断就会出现Undefined错误返回。
    4、【php版本升级处理】修复/global/setting/app_setting.php(行数:33、39、92)文件出现(Undefined variable $user_info in、Attempt to read property "city" on null in 、Undefined variable $user_info in、Attempt to read property "city" on null in、Trying to access array offset on value of type bool in、Trying to access array offset on value of type bool in)。该页面会通过xc_user_obj来读取APP设备信息,如果用户不处于APP环境 则无法读取。对应的字段则会统统返回错误。
    5、【php版本升级处理】修复/global/ems.php(行数:101、26、31、230、240、103、120)文件出现( Undefined array key "order" in、Trying to access array offset on value of type bool in、Trying to access array offset on value of type bool in 、Undefined variable $xc_pay in、Undefined variable $xc_express in、Trying to access array offset on value of type null in)错误的情况,该页面为快递查询页面。通过数据包解析获取快递的物流信息。有些字段可有可无,因此造成了上述页面大量错误。已通过issest三元运算方式做赋值处理。
    6、【php版本升级处理】通过xc_order_inquire返回订单数据时,会依次检索大量的额商品sql数据库,这些sql返回的信息回通过if直接判断是否存在,在php8版本中这个方法是错误的,会导致出现大量Undefined错误。正确的处理方式是通过isset来效验数据表是否有数据返回。目前已进行修正处理。
    7、【php版本升级处理】修复/global/ems.php(行数:124)文件出现(Undefined variable $btn in)错误的问题。这里的按钮字段已经被遗弃了,直接echo输出会因为变量不存在而导致php8返回Undefined错误。已对其进行参数删除处理。
    8、【php版本升级处理】修复/global/transfer_list.php(行数:37)文件出现(Undefined variable $tips in)错误的问题。转账列表页,管理员可以插件其它用户的转账记录,当查看别人的转账记录时,会在页面输出tips便签,提示正在查看XXX的转账记录。如果用户查看自己的转账记录,则该变量不存在。会出现Undefined错误。
    9、【php版本升级处理】修复/global/pay_details.php(行数:146)文件出现(Undefined array key "img" in)错误的问题。交易订单详情会通过xc_order_inquire去获取交易详细数据,其中就包括img字段,如果交易的是商品,那么一般情况下会通过img返回图片。此时会在页面输出商品图标,方便用户快速辨认。但是很多支付订单(转账充值)等是没有商品图标的,因此是无法获取到该字段。未处理会返回Undefined错误。
    10、【php版本升级处理】修复/function/function.php(行数:8125、8134、8135、8145)文件出现(Attempt to read property "description" on bool in、 Attempt to read property "description" on bool in、Attempt to read property "verify_info" on bool in、Attempt to read property "nickname" on bool in)错误的问题。通过xc_get_avatar函数去获取用户头像相关资料信息时,如果不存在缓存或者缓存已过期的情况 会通过内置方法来读取用户元数据,来生成缓存。这其中有些字段用户不存在,比如认证标识、个人描述等。未经过issest就直接返回值会在php8版本中出现警告错误。
    11、【php版本升级处理】/global/api.php(行数:5025)文件出现(Undefined array key "shop" in)错误的问题。朋友圈发布有很多可选元素,比如shop商品卡片插入、topic_list话题插入、朋友圈图片image_list。这些元素属于可选范畴,因此可能并不存在,而发布接口会对其进行if直接判断,如果不存在就会返回Undefined错误、
    12、【php版本升级处理】修复/acocoa/hook.php(行数:2945、2948、2955)文件出现(Undefined array key "shop" in 、Undefined array key "topic_list" in、Undefined array key "video_url" in )错误的问题。当朋友圈内容发布时会触发xc_moments_publish_check_hook钩子,对发布的内容进行拦截检测,根据提交的参数检测的规格各不相同。其中shop、topic_list、video_url都是可选范畴,如果为传递直接判断就会发生错误了。
    13、【php版本升级处理】修复/global/api.php(行数:5037)文件出现( Tryingtoaccessarrayoffsetonvalueoftypenullin)错误的问题。如果朋友圈内容发布,出现核验错误。会返回非法字符而不是标准的数组结构。这将导致的后续判断出现错误。因为判断的不是数组字段。
    14、【php版本升级处理】修复/acocoa/hook.php(行数:3169、3175)文件出现(Undefinedarraykey"video_url IN、Undefinedarraykey"shop"in)错误的问题。通过xc_moments_publish_hook执行内容发布时,会根据提交的变量数组来决定是否写入指定字段,如果不存在则直接if判断会出现错误。
    15、【php版本升级处理】修复/function/function.php(行数:9256)文件出现(UndefinedglobalvariableTask_Worker in )错误的问题,朋友圈内容发布后会通过xc_moments_consult_clear_cache清理缓存,因为清理过程比较繁琐,通常是采用异步来执行。为了避免异步中出现套娃(死循环现象,会在函数内执行异步进程检测),这里的检测方式是直接通过!$GLOBALS['Task_Worker']来处理,php8版本这个判断方式会产生错误。正确的判断应该是通过xc_is_asyn()方法来处理。
    16、【php版本升级处理】修复/acocoa/hook.php(行数:3189、3203)文件出现( Undefined array key "topic_list" in、Undefined array key "video_url" in)错误的问题。在发布钩子中,执行话题插入或者媒体资源同步更新时,会效验数组的topic_list、video_url、image_list是否存在,如果存在则直接执行对应的业务逻辑。因为php8不允许对不存在的数组变量进行判断,因此未传递参数就会出现Undefined错误。
    17、【php版本升级处理】修复/js_css.php(行数:139)文件出现(Undefined variable $avatar in)错误的问题。当首页进行加载时 如果用户已登录状态则会通过xc_get_avatar来获取用户的缓存头像信息,方便前端提取参数。但是如果用户未登录,则会因为该变量不存在而出现Undefined错误。正确的处理方式,通过三元运算进行处理。
    18、【php版本升级处理】修复/hook.php(行数:683)文件出现( Undefined array key "uniapp_cid" in)错误的问题。用户登录请求发送到后端后会通过xc_login_hook钩子来处理,该钩子会从超全局变量_COOKIE中尝试提取【uniapp_cid、client_id】两个变量,这两个变量可能存在,也可能缺失。尤其是uniapp_cid只有APP端才有可能获取到。如果获取不到直接进行赋值会导致出现Undefined错误。
    19、【php版本升级处理】修复/function/function.php(行数:8115)文件出现(: Undefined variable $remark_redis_data in)错误的问题。通过xc_get_avatar读取缓存用户头像信息时,会有限读取缓存,并将结果赋值到remark_redis_data变量,如果获取不到缓存,则对这个变量执行if判断会返回Undefined错误。
    20、【php版本升级处理】修复/function/function.php(行数:6835)文件出现(: Undefined variable $wpdb in Attempt to read property "prefix" on null in)错误的问题。通过xc_update_security更新用户环境安全状状态时,会通过全局对象wpdb来动态获取数据表名,但因为没有提前通过global进行声明,造成出现Undefined错误。
  • 0
    小小乐lv.2实名用户
    2024年5月11日
    1、【php版本升级处理】:修复/global/paging.php(行数:689)文件出现(Undefined variable $html in)错误的问题,违规资源列表分页请求verifier_list_api,在执行sql查询后,如果有更多记录则会通过for循环遍历输出到html变量中,然后在将结果返回到前端。因为php8对于变量处理更严谨,在for循环时,因为html未被初始化会导致出现Undefined错误返回。
    2、【php版本升级处理】:修复/global/setting/login_device.php(行数:23、27)文件出现(Undefined variable $app_ios in)错误的问题。登录设备管理页面,会通过内置函数(xc_ua_device)来检测UA来源是什么设备环境,该函数有一个iOS通用处理规则,如果是iPhone或iPad则会将app_ios标记为true。但是非iOS设备该变量则视为无效。这导致安卓设备普遍出现Undefined错误的问题。
    3、【php版本升级处理】:修复/global/setting/login_device.php(行数:23、27)文件出现(Undefined array key 2 in)错误的问题,登录设备管理页面 为了更详细的展示设备型号或系统,会通过正则表达式来提取UA参数,尝试获取精准的设备型号和系统。但是这个正则规则并不适用于所有UA,这会导致识别失败后页面出现Undefined错误。
    4、【php版本升级处理】:修复//push.php(行数:910)文件出现(Undefined variable $random in)错误的问题,当通过push接口下方短信时会通过xc_phone_push函数来构建短信接口所需要变参数,其中random是随机整数,目的是在需要排查问题时查找日志信息。之前处理的方案是没有考虑到这个参数,因此默认为空。这导致php8发生Undefined错误。
    5、【php版本升级处理】:修复/fun_sql.php(行数:93)文件出现(Trying to access array offset on value of type bool in)错误的问题,通过xc_update_sql更新数据表记录时,没有通过isset对ID、id、order、shop_order四个变量请求进行是否存在验证,导致执行过程中出现错误返回的情况。目前已进行修复。
    6、【php版本升级处理】:修复/function/function.php(行数:6827)文件出现(Undefined variable $wpdb in )错误的问题,通过xc_update_security对用户设备进行安全更新时,会提前建立table_name表,以便后续的函数进行sql操作时不必手动创建表名。但是table_name表名创建是通过wpdb来获取动态前缀,没有提前引入超全局变量导致出现上述错误。
    7、【php版本升级处理】:修复/function/function.php(行数:6897)文件出现(Attempt to read property "prefix" on null in)错误的问题,将用户环境标记为安全可靠,并通过xc_update_sql进行数据表更新时,有个参数(prefix)是通过超全局变量wpdb来获取的对象,该参数因为之前为引入,导致出现上述问题。
    8、【php版本升级处理】:修复/global/api.php(行数:5806)文件出现(Undefined array key "author_id" in)错误的问题,通过xc_hook_email_code发送邮箱验证码时,会通过xc_is_login_email来检测(author_id)的邮箱是否与传递的邮箱账户是否一致,如果不一致则返回错误。这里存在一个错误,那就是$_post['author_id']是可选的,用户可以选择性传递。一般登录情况下获取的验证码,这个变量默认不进行传递。这导致直接进行if判断会因为变量不存在而返回Undefined错误。
    9、【php版本升级处理】:修复/push.php(行数:630、651)文件出现(Undefined variable $wpdb in、Attempt to read property "prefix" on null in)错误的问题,通过xc_email_push函数下发邮件消息时候,会提前封装table_name表名,以确保后续可以直接使用。但是封装表名需要在函数内引入超全局变量$wpdb,如果未引入就会出现上述错误。
    10、【php版本升级处理】:修复/push.php(行数:458、473)文件出现(Undefined variable $wpdb in、Attempt to read property "prefix" on null in)错误的问题,通过xc_push_app_hook函数下发APP消息时候,会提前封装table_name表名,以确保后续可以直接使用。但是封装表名需要在函数内引入超全局变量$wpdb,如果未引入就会出现上述错误。
    11、【php版本升级处理】:修复/push.php(行数:1015、1049)文件出现(Undefined variable $wpdb in、Attempt to read property "prefix" on null in)错误的问题,通过xc_gzh_push函数下发公众号莫版本消息时候,会提前封装table_name表名,以确保后续可以直接使用。但是封装表名需要在函数内引入超全局变量$wpdb,如果未引入就会出现上述错误。
    12、【php版本升级处理】:修复/push.php(行数:1325、1392)文件出现(Undefined variable $wpdb in、Attempt to read property "prefix" on null in)错误的问题,通过xc_service_push函数下发服务号消息时候,会提前封装table_name表名,以确保后续可以直接使用。但是封装表名需要在函数内引入超全局变量$wpdb,如果未引入就会出现上述错误。
    13、【php版本升级处理】:修复/push.php(行数:310)文件出现(Undefined variable $push_gzh in/Trying to access array offset on value of type null in)错误的问题,通过xc_notify_hook_app进行APP消息发送检测时,会通过xc_is_push_app来检测是否允许发送APP消息,返回值是赋值到push_app这个数组,但是进行if判断时确用到了push_gzh,这导致出现上述两个错误。
    14、【php版本升级处理】:修复/function/function.php(行数:3928)文件出现(Undefined array key "service" in)错误的问题,当通过xc_update_notice_list更新用户消息会话列表时,为了避免列表过大 后台会设定一个上限值。如果会话记录大于后台值,则会自动移除最久的会话。确保会话记录始终保持在指定上限。但是如果用户没有这个会话记录,会出现报错情况。
    15、【php版本升级处理】:修复/global/setting/email.php(行数:7、22)文件出现(Undefined variable $email in、Undefined variable $onclick in、Undefined variable $title_a in)错误的问题。当用户进入邮箱绑定、邮箱换绑页面时,会通过xc_is_login_email来查询用户是否已绑定邮箱,默认情况下是传递用户USER_id但是这里填写错误,传递的是不存在变量email。从而导致出现第七行报错。onclick和title_a的报错则是因为这两个变量仅在用户未绑定邮箱的情况下才执行赋值。这导致已绑定过的情况会出现Undefined错误。
    16、【php版本升级处理】:修复并解决PHP8版本,宫论账户服务号消息无法成功写入到用户会话列表的问题,具体错误如下。当需要创建服务号消息时 会执行xc_update_notice_list来更新用户的消息会话列表,并读取用户自定义字段【notice_list】,然后检索用户是否存在对应的服务号消息,如果有则追加相应的记录值。如果没有则进行创建。新的PHP版本,无法在没有数组的情况下来直接新建数组,需要提前进行建立空数组。否则会导致消息无法写入的BUG。
    17、【php版本升级处理】:修复/push.php(行数:180、190)文件出现(Undefined variable $wpdb in、Attempt to read property "prefix" on null in、Undefined variable $data in)错误的问题,前两个报错是因为统一消息发送钩子xc_notify_hook在执行消息发送时,没有提前引入wpdb超全局变量导致。后一个报错是因为写入data到数据表时 只进行了is_array数组检查,没有通过isset检测变量本身是否存在。
    18、【php版本升级处理】:修复hook.php(行数9229)文件出现(Undefined variable $result in)错误的问题。当邮箱绑定/换绑成功会触发xc_binding_email_ok_hook回调钩子,为了其它业务可以动态接收回调预埋了一个xc_do_action动态注册钩子。但是这个钩子需要传递result,回调钩子并未提前预设参数。这导致出现上面的错误。
    19、宫论邮件发送钩子xc_email_push进行重构处理,不在通过内置方法来调用xc_sdk_phpmailer_link,这个方法在个别情况下会导致( Cannot declare class PHPMailer\PHPMailer\PHPMailer, because the name is already in)错误,即邮件类名出现重复与WordPress自带的PHPMailer发生冲突。经过官方资料查询,发现可以直接通过全局变量$phpmailer来访问程序自带的PHPMailer类,因此摒弃原来的sdk引入,直接调用程序自身的PHPMailer来执行邮件发送请求,避免因为冲突导致的错误返回!
    20、【php版本升级处理】修复/hook.php(9095、9028)文件出现( Undefined variable $ip in、Undefined variable $ua in、Undefined variable $result in)错误的问题,当用户进行手机号绑定或换绑操作成功后,会触发异步消息提醒,将通过xc_notify_hook将消息发送出去。因为是异步执行,为了确保接口可以正确响应客户端IP,会将IP和UA封装到push_data数组中一并发过去。这里的ip和UA量变量没有赋值导致出现错误。最后一个错误则是动作回调钩子,返回一个不存在result导致,正确处理应该是创建空数组。
  • 0
    小小乐lv.2实名用户
    2024年5月10日
    1、【php版本升级处理】:修复/global/paging.php(行数:815)文件出现(Undefined variable $html in)错误的问题,工单反馈分页查询feedback_consult_api接口在查询到数据时,会通过for遍历将结果递增到$html变量中,但是因为这个变量没有被初始化,php8在首次传递时会发生Undefined警告信息。
    2、【php版本升级处理】:修复/module/xc_feedback/urgent.php(行数:29)文件出现(Undefined variable $tips_style in)错误的问题,当管理或客服人员前往加急工单列表页时,会通过函数来检测是否有待处理(或用户标记加急)的工单列表,如果没有则不会输出对应列表清单。tips_style变量如果不存在会强行输出会导致出现Undefined错误的问题。
    3、【php版本升级处理】:修复/module/xc_feedback/record.php(行数:29)文件出现(Undefined variable $tips_style in)错误的问题,当管理或客服人员前往工单处理记录列表页时,会通过函数来检测是否有等待我回复的工单列表,如果没有则不会输出对应列表清单。tips_style变量如果不存在会强行输出会导致出现Undefined错误的问题。
    4、【php版本升级处理】:修复//fun_sql.php文件出现(Undefined array key "ID" in、Undefined array key "order" in、Undefined variable $db_cache in、Trying to access array offset on value of type null in)一些错误问题,该错误是因为sql_inquire_db_id方法没有正确返回xc_get_sql结果导致。注:sql_inquire_db_id已被遗弃,但是很多旧方法还在使用。原来的处理是将其转发到xc_get_sql处理。但是封装没有使用return 导致接管失败!
    5、【php版本升级处理】:修复/global/paging.php(行数:1228)文件出现(Undefined array key "title" in )错误的问题,该错误源于report_consult_api分页接口在执行数据返回时,会将$analysis['title']传递到对内容中去,但是这个字段是可选的,数据库中可能并不包含。这将导致php8返回Undefined的错误。
    6、【php版本升级处理】:修复/global/paging.php(行数:1230)文件出现(Undefined variable $html in )错误的问题,该错误源于report_consult_api分页接口在执行数据返回时,会将返回的数组进行for遍历循环输出,循环的结果赋值到HTML变量,然后返回给前端处理。但html变量没有进行初始化处理,会导致首次执行赋值时出现Undefined警告问题。
    7、【php版本升级处理】:修复/module/xc_report/detail.php(行数:56)文件出现(Undefined array key "title" in)错误的问题,审核员查看举报详情时,会在页面显示举报来源。一般情况下会显示文章或商品标题信息,但是极端情况下可能获取不到title,强行输出的话会导致Undefined错误返回。注:内容标题和link是通过xc_report_analysis_hook钩子进行输出返回的。
    8、【php版本升级处理】:修复/global/setting/page_report.php(行数:52、74)文件出现(Undefined variable $tips_style in、Undefined array key "title" in)错误的问题。客服审核员可以查看用户的举报记录,如果存在举报记录则会在页面显示用户的举报历史记录。如果没有举报历史记录则不会输出。这里有两个变量(tips_style、title)属于可选范畴。如果未获取到则php8会返回错误信息。
    9、【php版本升级处理】:修复/global/paging.php(行数:1273)文件出现(Undefined variable $html)错误的我呢天,当用户的举报历史记录超过两页时,允许通过页面下拉的方式加载更多记录。内容加载函数请求为report_history_consult_api,该接口会通过xc_report_history_consult来查询是否有更多记录,如果有则将结果数组通过for遍历赋值到html变量,但是因为该变量未被初始化,首次执行时会产生对应错误。
    10、【php版本升级处理】:修复/global/unified_payment.php(行数:144)文件出现(Undefined variable $shop_text in)错误的问题,宫论统一支付页面(旧版)会根据支付类型来展示商品介绍(标题),但是有些支付类型比如转账是不存在商品介绍的,因此shop_text变量获取失败,最终导致支付页面返回Undefined错误。
    11、【php版本升级处理】:修复/global/unified_payment.php(行数:152)文件出现(Undefined variable $pay_tao_freight in)错误的问题,宫论统一支付页面(旧版)会有个额外字段展示(运费成本),这个变量在淘货商品中是存在的,但其它支付类型商品则不存在,因此非淘货商品支付会出现Undefined错误的现象。
    12、【php版本升级处理】:修复/global/follower_api.php(行数:11)文件出现(Undefined array key "type" in )错误的问题,当用户访问粉丝列表页时,会通过$_POST来获取变量type然后使用strip_tags进行解析处理。如果超全局变量不存在则会返回Undefined错误吗。目前已进行修正处理,通过三元运算进行变量查询,如果不存在则将其赋值false。
    13、【php版本升级处理】:修复/function/function.php(行数:4695)文件出现(Undefined array key 3 in)错误的问题,用户进行通过xc_update_follow函数执行(关注、取关、拉黑)动作时,会读取fanlist和follow字段。来查询双方关系,如果双方没有关注记录则会读取失败,造成$other_follow[$user_id]字段为空。进而导致Undefined错误情况。
    14、【php版本升级处理】:修复/global/api.php(行数:70)文件出现(Undefined array key 3 in )错误的问题,当用户进行关注请求时,会通过【宫论关注事件】执行业务处理请求。此时会读取双方的follow关注列表、blacklist:拉黑名单列表,来判断双方的关系状态。如果未读取到被关注者的follow就会造成$author_follow[$user_id]查询失败,进而发生 Undefined错误情况。注:为了防止同类问题的出现,所有的关注动作检测,都会通过isset进行处理,避免出现空值错误的情况。
    15、【php版本升级处理】:修复/global/setting/setting-more.php(行数:180、192)文件出现(Undefined variable $tips_marker in、Undefined variable $tips_marker)错误的问题,用户更多资料页,会展示用户的工单提交记录,内容举报记录(未读消息),如果用户没有未读消息则会造成Undefined错误问题返回。
    16、【php版本升级处理】:修复/global/setting/page_verifier.php(行数:40)文件出现( Undefined variable $tips_style in)错误的问题,当审核员或用户查看自己的上传违规记录时,会通过sql查询是否存在违规(疑似违规)的记录,如果有则将其赋值到upload_verifier,然后for遍历输出内容。如果没有查询到记录 则赋值失败,会导致出现上述问题。
    17、【php版本升级处理】:修复/global/paging.php(行数:757)文件出现(Undefined variable $html in)错误的问题,当用户或审核员在上传违规历史页面进行下拉加载更多内容时,会通过分页接口请求verifier_history_api执行sql查询,如有更多记录返回则通过for循环遍历输出到html变量,然后在输出给前端。因为没有提前创建html变量 会导致php8返回Undefined错误。
    18、【php版本升级处理】:修复/module/xc_verifier/audit.php(行数:56)文件出现(Undefined variable $user_link in)错误的问题,用户查看违规详情资源的时候,会根据用户身份来决定是否显示上传者信息,如果是管理员或者访问者不是违规用户则显示用户信息,否则不显示当事人信息。当事人查看自己的违规记录,因为不会显示个人信息,会导致变量不存在。php8不会屏蔽过滤,而是反馈Undefined的问题。
    19、【php版本升级处理】:修复/global/setting/page_follow.php(行数:32)文件出现( Undefined variable $tips in )错误的问题,当用户通过资料页查看自己的关注好友列表时,页面会检测查看用户是否为当事人,如果不是则会输出tips提示框,显示正在查看xxxx的关注列表。因为当事人没有这个变量,php8会因为变量缺失而返回Undefined错误。
    20、【php版本升级处理】:修复/global/setting/page_fanlist.php(行数:32)文件出现( Undefined variable $tips in )错误的问题,当用户通过资料页查看自己的粉丝用户列表时,页面会检测查看用户是否为当事人,如果不是则会输出tips提示框,显示正在查看xxxx的粉丝列表。因为当事人没有这个变量,php8会因为变量缺失而返回Undefined错误。
    21、【php版本升级处理】:修复/global/setting/page_blacklist.php(行数:32)文件出现( Undefined variable $tips in )错误的问题,当用户通过资料页查看自己黑名单列表时,页面会检测查看用户是否为当事人,如果不是则会输出tips提示框,显示正在查看xxxx的黑名单记录。因为当事人没有这个变量,php8会因为变量缺失而返回Undefined错误。
  • 0
    小小乐lv.2实名用户
    2024年5月9日
    1、【php版本升级处理】:修复/function/websocket.php文件出现(Undefined variable $client_id)错误的问题,当通过xc_wss_user给指定用户下发消息时,会携带client_id变量,该变量默认为接收消息用户的websocket消息推送标识。该标识并非强制性的,因此很多场景是不会传递。PHP8会对参数严格效验,如果不存在会导致出现上述错误。
    2、【php版本升级处理】:修复/global/paging.php文件出现【 Attempt to read property "link" on array in 】错误的问题,当用过分页接口执行notice_moments_api(朋友圈通知消息分页请求)时,会在返回的html构造体中写入朋友圈内容页面link地址和用户主页地址user_link进行输出,但是这两个字段非强制性的,如果获取不到则会产生错误警告。
    3、【php版本升级处理】:修复/global/setting/page_moments_filter.php文件出现(Undefined variable $tips in)错误的问题。前台管理员是被允许查看用户的朋友圈屏蔽名单,当管理员查看别人的屏蔽名单时,也会会输出tips标签,显示正在查看XXX的屏蔽名单。但是如果用户查看自己的屏蔽名单时,则该变量为空。这导致新版PHP版本出现报错问题。
    4、【php版本升级处理】:修复/global/setting/setting_moments_image.php文件出现( Undefined variable $vip in )错误的问题。朋友圈背景封面图设置页面,后台预设的朋友圈背景有些事vip会员可用,有些则不做限制。在输出封面图背景时,会直接通过if判断$defalut['vip']字段进行处理,php新版本会严格效验 如果字段不存在(后台未设定vip)则会返回上述错误问题。
    5、【php版本升级处理】:修复/function/function.php文件出现( Trying to access array offset on value of type bool in)错误的问题。当用户更新或上传封面图时,后台会通过xc_upload_media_ok函数来检测图片地址是否在媒体库上传的,如果是系统的图片则是获取不到数据库记录。此时执行ID赋值操作会导致出现错误异常的情况。
    6、【php版本升级处理】:修复/global/setting/setting_moments_image.php文件出现(Undefined variable $defalut in)错误的问题。朋友圈背景封面图设置页面,支持用户自定义上传图片,如果用户现在的背景图是通过自己上传的则访问页面显时会优先显示自己的图片。但是因为defalut配置不存在,导致if判断错误值。php就会返回上述错误问题。
    7、【php版本升级处理】:修复/hook.php文件出现(Undefined array key "image" in、Trying to access array offset on value of type null in、Undefined array key "author" in、Undefined variable $image_list in)错误的问题。朋友圈话题列表页通过xc_article_list_hook钩子输出模版内容时,对参数没有正确处理导致的。
    8、【php版本升级处理】:修复/hook.php文件出现(Undefined variable $follow_btn in、Undefined variable $video_play in、Undefined variable $moments_shop in 、)错误的问题。模版生成内容HTML构造体时,会根据文章是否有视频、商品、图集来进行不能的组件封装。一些组件不存在进行空字段判断,就会产生上述的问题。通过三元运算或isset来处理。
    9、【php版本升级处理】:修复/global/paging.php(Undefined variable $html in)错误的问题。朋友圈话题分页加载请求函数moments_topic_publish_api,在执行话题列表输出时没有提前将$html变量进行赋空值处理,导致直接调用出现Undefined错误返回。已进行修正处理。
    10、【php版本升级处理】:修复/function/function.php文件出现( Undefined variable $end in 、 Undefined variable $start in)错误的问题,通过话题列表页进行搜索时,会通过xc_moments_topic_consult_search钩子进行数据查询时,会通过end和start来计算每页显示的话题数量,该方法在之前的重构过程中已进行遗弃,钩子无法获取准确的变量大致错误返回。
    11、【php版本升级处理】:修复/global/paging.php文件出现(Undefined array key "end_time" in)错的问题,橱窗商品数据获取时,如果是拍卖商品会涉及到字段【end_time】的解析处理,该字段只有拍卖存在。淘货或其它类型商品不存在,新的php8版本,对于不存在的字段进行输出会产生Undefined问题,目前已进行修正处理。
    12、【php版本升级处理】:修复/global/paging.php文件出现(Undefined variable $msg in 、Undefined array key "end_time")两个错误问题,当用户在橱窗商品窗口进行页面下拉加载请求时,会将for遍历获取到结果存储$msg变量中,在通过xc_exit返回给前端,但是分页接口没有对msg进行赋空值处理,造成php8检测其不存在,导致出现上述错误。
    13、【php版本升级处理】:修复/global/paging.php文件出现(Undefined array key "author_id" in )错误问题,当用户通过橱窗窗口查看自己的收藏记录时,会通过分页接口请求数据返回。此时会通过post获取两个变量(1、author_id(当前会话用户)2、sort:请求分页类型)。其中author_id是可选变量,也是就是有的场景不需要传递。但PHP8版本会严格效验参数,不存在未传递会导致出现上述错误。
    14、【php版本升级处理】:修复/module/xc_moments/edit.php文件出现(Undefined variable $avatar in)错误问题,朋友圈文章内容管理页面,顶部右上角会显示作者头像信息,方便知晓当前操作的用户对象。用户对象信息获取是通过$avatar数组来完成的,但是之前这个方法已经被移除。这也导致打开页面会出现Undefined错误。
    15、【php版本升级处理】:修复/module/xc_moments/edit.php文件出现(Undefined variable $fans_checked in 、Undefined variable $privacy_checked in、 Undefined variable $close_checked in、 Undefined variable $limit_views_checked in )错误的问题,在内容管理页面,用户或管理员可以对朋友圈内容进行(评论、访问、限流)等进行操作,这些参数状态通过文章字段来获取,如果文章没有手动修改过权限 则这些字段是不存在的。这会导致php新版本出现报错现象。
    16、【php版本升级处理】:修复/module/xc_feedback/publish.php文件出现(Undefined variable $tips_marker in)错误的问题,当用户访问工单反馈页面时会通过get_status_mark查询用户是否有待回复的工单,如果有则输出对应的图标铃铛,提醒用户查看。php8新版本如果没有获取到tips_marker字段内容会输出错误报警,而不是忽视。
    17、【php版本升级处理】:修复/global/setting/page_feedback.php页面出现(Undefined variable $tips_style in)错误的问题,管理员可以通过资料页面查看用户的工单反馈历史记录,为了方便区分,查看非本人工单历史记录时会输出tips标签,提示当前正在查看XXX的工单反馈记录。如果是查看自己的工单反馈记录 则会出现上述报错问题,因为变量tips是不存在的。
    18、【php版本升级处理】:修复/global/paging.phpp页面出现(Undefined variable $html in )通过feedback_history_api发起工单分页查询-指定用户历史记录时,会将查询的结果通过for遍历赋值到$html。但是这个变量并没有被初始化空值,这导致首次遍历的时候会出现Undefined的错误,正确的处理方式在执行for循环前,进行赋值操作
    19、【php版本升级处理】:修复/module/xc_feedback/detail.php页面出现( Undefined array key "image" in)错误的问题,工单详情页,允许用户带图反馈。但是用户如果没有评论带图(包括评论)那么image字段就会获取不到,这就会导致php8在进行评论输出时查找不到变量而返回Undefined错误。
    20、【php版本升级处理】:修复/module/xc_feedback/detail.php页面出现(Undefined variable $tips in)错误的问题,工单详情页,如果工单因为超时关闭、用户主动关闭。会在工单下面显示对于的tips提示信息,方便客户或客服人员了解工单为什么关闭。如果不是这两种状态,则访问会出现Undefined错误,这是因为tips变量仅在这两种场景才会生成。
  • 0
    小小乐lv.2实名用户
    2024年5月8日
    1、通过xc_upload_hook钩子成功上传文件后,会触发回调钩子:xc_upload_hook_success,对于不同的上传类型,需要做不同的业务动作处理。比如记录用户的今日发图次数,视频上传次数,有序集合记录今日用户图片的上传总数,删除一些临时文件等操作。都通过这个回调钩子来执行业务。注:钩子需要上传记录的主键ID
    2、当文件成功上传后,会主动执行xc_update_sql函数进行数据表回调,将CDN地址字段(remote)进行更新,将其值变更为真实有效的remote_url字段参数。注:不通过xc_upload_hook_success回调钩子来执行sql操作是因为兼容考虑,新增第二个字段会造成以前的回调动作可能存在异常错误的情况。
    3、文件上传成功后会加载【动作钩子】,通过xc_do_action(__FUNCTION__, $result, func_get_args());方法动态注册钩子,如果有其它业务需要知晓或触发上传动作回调,可以通过add_action进行注册函数,当文件上传成功后,会将ID主键和文件地址转发到注册函数。注:通过动作钩子执行业务回调,不能有结果返回,否则会破坏原始返回结果集。
    4、宫论文件上传钩子已完成封装,该钩子具备以下特性。1、基础安全检测(文件不存在,数据表不存在、文件地址异常)等场景、会进行安全拦截。2、支持不同类型的场景识别,后期如果变更存储方案,钩子可以一键接管新旧业务,不需要重构操作。3、支持try/catch捕获异常,上传遇到接口网络的问题都会捕获并返回。4、支持日志模式,如果发生上传错误的情况,会写入到日志文件中。5、数据库回调动作,完成文件上传后 会对数据表的remote和state两个字段进行更新。5、业务回调动作,当文件成功上传,涉及到上传类型的计数、websocket、删除等行为,都会转发到xc_upload_hook_success钩子来执行。6、动态注册动作钩子:第三方业务如果需要对上传文件进行业务操作,允许注册自定义函数来接受参数。
    5、新旧上传接口替换:私信上传图片接口(上传类型:im、image)用户通过私信发送单张图片不在通过xc_upload_admin接口来处理上传请求,而是通过xc_upload_hook钩子来完成图片云端上传请求。如果上传失败则返回钩子原始错误。如果上传成功则执行xc_app_push消息推送,并返回$upload_hook['url']地址给前端处理。
    6、修复并解决xc_upload_hook钩子文件请求上传后返回【status:500、internal_server_error】的错误,通过xc_update_sql更新回调数据表后,错误的将result赋值到结果。造成后续result数组结构
    无法响应,从而导致返回的接口出现上述的错误信息。
    7、新旧上传接口替换:私信上传视频接口(上传类型:im、video)用户通过私信发送视频文件不在通过xc_upload_admin接口来处理上传请求,而是通过xc_upload_hook钩子来完成视频云端上传请求。如果上传失败则返回钩子原始错误。如果上传成功则执行xc_app_push消息推送,并返回$upload_hook['url']地址给前端处理。
    8、新旧上传接口替换:blob通用上传图片接口(blob、image)除了私信图片外,所有的图片上传请求都会通过这里进行处理(有图片上传组件封装),该接口目前已不在通过xc_upload_admin接口来处理上传请求,而是通过xc_upload_hook钩子来完成图片云端上传请求。如果上传失败则返回钩子原始错误。
    9、新旧上传接口替换:blob通用上传视频接口(blob、video)除了私信视频外,所有的视频上传请求都会通过这里进行处理(有视频上传组件封装),该接口目前已不在通过xc_upload_admin接口来处理上传请求,而是通过xc_upload_hook钩子来完成视频云端上传请求。如果上传失败则返回钩子原始错误。
    10、【php版本升级处理】:修复/upload/upload.php文件出现(Undefined array key "max_size" in)错误的问题,该问题源于$data['max_size']数组变量不存在导致,通过blob传递文件时,该参数不再强制传递,php8版本如果获取不到直接写入,会导致出现Undefined错误,已修复处理。通过isset进行三元运算处理,如果获取失败则设置为空字符。
    11、【php版本升级处理】:修复hook.php钩子脚本(xc_upload_block_hook)出现Undefined array key "max_size" in错误的问题,通过钩子执行上传安全检测时,max_size(最大上传限制参数未传递)直接进行赋值处理,会造成Undefined array问题。已修复处理。和上传接口处理方式一样,通过三元运算处理,如果获取失败则设置为空字符。
    12、宫论cos云端同步接口已完成重构,新版本SDK采用composer来维护和更新。同时支持【PHP7.x+PHP8.x】两个版本。重构后的接口支持日志报警、接口切换、回调动作,能适配并一键部署到到各个上传场景。注:本次重构的原因是 旧的上传接口不支持PHP8版本,既然决定升级PHP版本,就要应对并解决SDK不兼容问题。
    13、修复并解决私信发送图片和视频后,返回聊天页显示裂图或视频不存在的问题。重构采用新的上传接口后,在处理私信消息时 没有正确提取变量导致。具体为:图片上传成功后,会将远程CDN图片地址写入到聊天content中,在将其插入到消息数据表。在创建content变量时,读取的是旧接口变量 导致图片地址变量返回为空。造成裂图和视频不存在的问题,已经进行修复。
    14、【php版本升级处理】:修复/global/setting/setting_moments.php文件出现【Undefined variable $tips in】错误的问题,如果用户有未读的朋友圈消息,在朋友圈设置页右上角有个铃铛显示。新的php版本对于tips_marker变量输出没有做过滤处理,如果不存在强行输出会造成出现 Undefined错误。
    15、【php版本升级处理】:修复/global/setting/setting_moments.php文件出现【 Undefined variable $tips_marker in】错误的问题,管理员可以设置其它用户的朋友圈设置,此时为了方便识别处理用户,会在页面输出一个tips提示框【你正在查看 XX的朋友圈设置】。但是如果是用户查看自己的朋友圈设置,则tips并不存在。新的php版本对于不存在的变量输出不是隐藏过滤,而是直接返回报错。
    16、【php版本升级处理】:修复/global/setting/setting_moments.php文件出现(Undefined variable $close_moments in 、Undefined variable $close_comment in)错误问题,朋友圈设置页面或读取查询用户对象的(朋友圈访问权限、评论权限状态信息),如果用户未配置则新版本会发生错误显示。
    17、【php版本升级处理】:修复/hook.php文件出现( Trying to access array offset on value of type bool in)错误的问题,用户通过xc_update_desc_hook更新用户自己的个人介绍时,会通过xc_sensitive_words方法进行敏感词检测,检测结束后会对返回值进行判断。新的PHP版本,对不存在的变量数组进行if检测时会返回上述错误。
  • 0
    小小乐lv.2实名用户
    2024年5月7日
    1、【php版本升级处理】:修复/chat.php文件出现(Parse error: syntax error, unexpected variable "$messages" in)错误的问题,打开用户会话窗口出现死亡圈圈现象。代码层级包含#[]的注释风格导致的,8.0版本会将这类注释视为代码变量,导致出现意外错误 已进行修复处理!
    2、【php版本升级处理】:修复/upload/upload.php文件出现(Parse error: syntax error, unexpected token "if" in )错误的问题,用户通过私信发送图片出现返回异常的现象,代码层级包含#[]的注释风格导致的,8.0版本会将这类注释视为代码变量,导致出现意外错误 已进行修复处理!
    3、【php版本升级处理】:修复/function/is.php文件出现(Undefined array key "HTTP_REFERER" in)错误的问题,宫论API接口请求检测函数is_api_request()在获取$_SERVER['HTTP_REFERER']超全局变量的时候,会通过isset来检测是否存在,如果不存在则直接返回false,而不是通过strstr进行字符包含检测。
    4、【php版本升级处理】:修复/upload/custom_upload_cos.php文件出现(Undefined array key "token"、Undefined array key "name"、 Undefined array key "url" )错误的问题,最新php版本会严格效验超全局变量数组,如果未传递直接赋值直接回返回对应错误。解决方案,通过isset执行三元运算处理,没有传递返回false
    5、composer包更新和维护:为了更好的维护上传接口,宫论cos腾讯云接口通过composer来进行更新和维护,旧版接口保持现状,后续的请求都将转发到composer包来执行上传、删除、移动等操作。目前cos包的版本信息为(qcloud/cos-sdk-v5 v2.6.9 PHP SDK for QCloud COS)。注:所有的SDK扩展请求都必须通过composer包进行处理。
    6、修复cos上传接口出现异常的问题,所有的上传请求(私信、发布)都返回同一个错误(cos数据同步异常),问题源于上传接口(转发到其他文件进行处理)时,文件名等参数xc_post发送,接受文件错误的采用$_poat超全局变量来接收数据。正确的处理是通过file_get_contents("php://input")来获取原始的POST数据。注:属于历史遗留问题,重构xc_post接口请求后造成的毛病。
    7、封装新的统一文件上传钩子:xc_upload_hook(),需要传递$ID变量(xc_upload)数据表的主键值。该函数会通过xc_get_sql读取上传记录,从中获取到待上传的本地文件,以及它的状态标识。如果获取失败或者已完成上传的文件,则直接返回对应的错误。注:这个上传钩子负责所有类型的文件上传处理,封装成钩子是为了后期上传扩展,如果上传方式增加,可以在这个钩子内进行回调,比如取消cos上传,改为阿里云oss。
    8、xc_upload_hook不做安全拦截,只要执行就会触发数据表查询,如果是等待上传则会立即触发上传同步请求。上传钩子在执行业务时无论文件是否可进行上传,是否上传成功,都会返回标准的数组结构。code=0代表上传成功,code=1代表上传失败,msg是上传失败的原因。
    9、宫论统一上传钩子在执行上传请求前,会执行以下参数效验来确保上传是否可靠。1、通过empty检测传递的参数是否为空,如果不为空则继续通过is_numeric检测是否为数字,如果通过则返回【上传失败:传递的参数异常!】2、通过xc_get_sql来读取数据表记录,如果读取查询失败则返回【上传失败:数据表记录查找失败!】3、检测$upload['state'] 是否等于OK,如果等于代表文件已完成了上传,返回【上传失败:文件已完成上传!】。4、检测$upload['state']状态是否已经已删除,如果已删除则返回【上传失败:文件已被删除!】5、通过parse_url来获取本地文件的连接地址,如果结构白喊scheme则说明是远程地址,返回【上传失败:等待上传的文件是远程地址'】6、通过file_exists来检测本地文件是否存在,如果不存在则返回【上传失败:本地文件不存在!】。
    10、宫论统一上传钩子完成文件核验操作后,会直接通过require_once来引入composer包的加载文件,这种就包含了腾讯云 COS SDK。完成初始化SDK的加载后,将会读取后台配置(secretId、secretKey、region、bucket、cos_domain)等参数,来封装cosClient对象信息,以便后续发起上传请求。
    11、完成cosClient对象的封装,就可以通过内置方法来发起上传请求。具体参数如下:region:存储桶地域(通过xc_upload_cos_region配置字段来读取)bucket:存储名称(通过xc_upload_cos_bucket配置字段来读取)、key:存储的路径键值通过($upload['remote']数据表记录来获取,在创建sql记录时,会提前生成远程路径位置)、body:文件内容(通过fopen打开$upload['local']本地文件路径来获取)。
    12、为了更好的维护上传请求接口,通过COS SDK上传文件时会采用try/catch语句来处理异常情况。上传过程中出现的任何错误 包括(上传失败、网络问题、权限问题、配置错误)都会通过catch来捕获错误,并且从中提取对应的错误字符。如果上传成功则通过try来返回对应语法。
    13、新增错误日志报警配置,日志说明:【上传接口】文件上传出现异常,日志唯一标识(upload),触发报警条件(如果当天累计出现10次错误,则触发报警通知管理员)每日报警通知次数未2,超过2次则不在触发通知。短信通知该功能开启。注:该日志报警触发于xc_upload_hook钩子,当cos文件请求上传时返回try错误时会触发xc_log_error_warn函数来写入。日志格式如下 [上传时间:- 年月日时分] [上传用户 - UID] [错误日志 - 报错的字符串原因]
    14、宫论文件cos上传成功后,会返回四个字段。code=0,标记文件上传成功的回调状态码。msg=文件文件上传成功。type=cos(本次上传方式为cos对象存储,后期将支持不同的上传方式,不同的上传接口 需要返回不同的类型做区别。)url=远程访问路径,这个字段通过xc_upload_cos_domain字段+remote参数组装。正常情况下url返回的是cdn有效访问地址。
  • 0
    小小乐lv.2实名用户
    2024年5月6日
    1、【php版本升级处理】:修复我的朋友圈-分页接口函数moments_consult_api两个错误返回【Undefined variable $html :返回结果前,需要提前定义变量,$_POST['page']和$_POST['author']不是必备参数,在未传递的情况会导致出现Undefined array key】错误的问题,解决方法通过isset来执行三元强行赋值false。
    2、【php版本升级处理】:修复/function/is.php文件出现【Undefined array key "moments_close"】错误的问题,访问朋友圈详情页时会通过xc_is_moments_visit来判断朋友圈文章的查看权限,其中有个字段是moments_config,用户未配置的情况是获取为空的。与之对应的参数就会获取失败,新版本会严格效验,对不存在的字段进行判断会导致出现上述错误,已进行修复处理!
    3、【php版本升级处理】:修复/module/xc_moments/detail.php文件出现【Undefined array key "limit_views" in、Trying to access array offset on value of type null in】两个错误的问题,朋友圈内容涉及到限流操作,访问详情页时会尝试读取文章limit_views字段,如果存在则进行的输出。这个参数非强制性存在,这也导致了没有限流的文章出现上述的错误。
    4、【php版本升级处理】:修复shortcode.php文件出现( Undefined variable $html in)错误的问题,通过xc_shortcodes_image_list输出图片列表HTML信息时,没有提前对html变量进行赋值处理,导致for循环内部通过.html内容叠加出现报错。目前已进行修正。
    5、【php版本升级处理】:修复/module/xc_moments/detail.php文件出现【Undefined array key "limit_views"】多个报错的问题,为了方便前端获取页面的状态标识,会在元素【moments_detail】区域进行赋值操作,其中有个变量是limit_views限流状态。直接输出的是$meta['limit_views'][0],但是这个可能为空不存在,这导致出现大量上述报错。解决方法是直接对参数进行三元运算。
    6、【php版本升级处理】:修复/module/xc_moments/detail.php文件出现【 Undefined variable $follow_btn in 、Undefined variable $limit_tips in】两个报错的问题,第一个错误是获取用户关注按钮状态发生错误,如果当事人是作者,那么不存在follow_btn内容输出。第二个错误是文章如果被限流会输出(已被限流标识),但是如果文章没有限流 会造成页面错误。目前已提前赋空值来处理!
    7、【php版本升级处理】:修复/module/xc_moments/detail.php文件出现(Undefined variable $video_play in、Undefined variable $moments_shop in)在内容元素输出时候,会根据字段来决定。上述两个错误就是因为字段不存在,导致判断异常,简介造成了新版本的输出错误。解决方案,进行三元运算处理来处理字段不存在的情况。
    8、【php版本升级处理】:修复/module/xc_moments/detail.php文件出现(Undefined variable $sticky_html)的错误问题,当朋友圈文章被置顶的时,会在底部标记已置顶,允许管理员或作者点击取消置顶操作。如果用户未置顶 则文章不存在该字段标识。强行输出将发生上述错误。解决方案同样是是采用三元运算来进行字段空值处理,如果不存在则标记为false。
    9、【php版本升级处理】:修复/function/is.php文件出现(Undefined array key 2 in 、Undefined array key 3 in )错误的问题,具体问题是xc_is_blacklist方法,在检测用户是否拉黑状态时,如果采用传统的方案来查询数组是否存在名单记录,最新版本php会产生报错,正确的处理方式是通过array_key_exists来检测比较可靠安全。
    10、【php版本升级处理】:修复/hook.php文件出现( Undefined variable $action in )的错误问题,当执行点赞操作钩子xc_like_hook时,完成业务操作后,会通过xc_moments_like_ok_hook钩子触发操作成功回调。该钩子需要传递action变量,来标记是点赞成功还是取消点赞。之前的语法命名出现错误,导致该变量捕获为空造成上述错误。目前已修复!
    11、【php版本升级处理】:修复/acocoa/worke.php文件出现( Undefined variable $db_name in)错误的问题。通过woker_app_push下发异步消息通知时,会通过add_sql_insert_task插入消息到任务队列,该函数需要传递两个变量,其中之一是db_name,但是函数并未写入这个变量。导致php出现异常错误。目前已手动进行赋值进行修复处理。
    12、【php版本升级处理】:修复/global/paging.php 文件出现( Undefined variable $comment_html)错误的问题,xc_moments_home_comment_more_api朋友圈首页,加载更多评论请求时,comment_html作为返回值在执行内容写入前,没有提前创建变量。导致写入变量不存在的错误异常。目前已进行修正处理!
    13、【php版本升级处理】:修复/module/xc_moments/detail.php文件出现(Undefined variable $moments_detail_footer_show、Undefined variable $like_show in)两个错误问题。当朋友圈存在点赞记录,会依次展示moments_detail_footer_show和like_show两个变量问题。如果这两个变量有空值就会返回上述错误,已修正。
    14、【php版本升级处理】:修复/module/xc_moments/detail.php文件出现(Undefined variable $comment_show in)错误问题。如果不存在评论内容,则comment_show会创建css样式(display:none)来隐藏评论表单,如果存在则不做任何操作。因此造成Undefined空值返回错误。已修正处理。无论是否有内容都会将其赋值处理。
    15、【php版本升级处理】:修复hook.php文件出现(Undefined variable $admin_li )错误的问题,分享组件函数钩子xc_share_more_hook在生成返回结构体时,没有对admin_li值进行提前赋值操作,导致直接通过for循环变脸输出admin_li内容时,出现空值错误,已进行修正处理!
    16、【php版本升级处理】:修复/global/im/notice-page.php文件出现(Undefined array key "notice_list_time" in、Undefined array key "social" in、 Undefined array key "reply" in、Undefined array key "like" in、Undefined array key "service" in、Undefined array key "normal" in、)错误问题。上述字段在获取后都会通过三元运算进行处理,如果不存在或者为空则标记为false。防止后续业务判断因为不存在的值导致错误。
    17、【php版本升级处理】:修复/global/im/notice-page.php文件出现( Undefined array key "normal" in、Uncaught TypeError: array_reverse(): Argument #1 ($array) must be of type array, null given in)错误问题,在执行消息会话列表输出时$notice_list_arr['normal']的值是null而不是一个数组。array_reverse执行条件必须为数组。因此造成了上述错误。解决方法,初始化将normal设置为一个空数组。
  • 0
    小小乐lv.2实名用户
    2024年5月5日
    1、【php版本升级处理】:修复数据表修改函数xc_update_sql执行过程中出现(Undefined array key "id" in)错误,数据表操作时候,函数会检测ID和id两个变量参数是否存在,如果有其一存在则执行对应的sql操作记录,php新版本无法直接执行if判断,这个会造成错误。修复半部分通过isset来效验。
    2、【php版本升级处理】:修复数据表修改函数xc_update_sql执行过程中出现(Undefined array key "order、shop_order" in)错误,数据表操作时候,函数会检测order和shop_order两个变量参数是否存在,如果有其一存在则执行对应的sql操作记录,php新版本无法直接执行if判断,这个会造成错误。修复半部分通过isset来效验。
    3、【php版本升级处理】:修复数据表查询函数xc_get_sql执行过程中出现(Undefined array key 【id/ID/order/shop_order】)错误,数据表操作时候,函数会检测上述四个数组变量参数是否存在。如果有对应的参数存在则执行对应的sql操作记录,php新版本无法直接执行if判断,这个会造成错误。修复半部分通过isset来效验。
    4、【php版本升级处理】:修复数据表查询函数sql_inquire_db_id执行过程中出现(Undefined array key 【id/ID/order/shop_order】)错误,数据表操作时候,函数会检测上述四个数组变量参数是否存在。如果有对应的参数存在则执行对应的sql操作记录,php新版本无法直接执行if判断,这个会造成错误。修复半部分通过isset来效验。
    5、【php版本升级处理】:修复APP模块插件uniapp_content函数出现: Undefined array key 0 in 错误的问题,通过jinsom_get_post_content函数获取文章内容后通过preg_match_all正则来匹配图片,然后将匹配的结果插入到images_arr变量,这里没有考虑到未获得图片的情况,因此当文章没有图片时会返回上述错误。
    6、【php版本升级处理】:修复bar.php文件出现【Undefined variable $post_type in 】错误的问题,文章底部输出内容时候,未考虑post_type字段是否存在,如果不存在而执行内容输出会造成上述的错误信息。修复方式,在执行post_type字段获取后,会通过三元运算来处理返回值,不存在则标记false。
    7、【php版本升级处理】:修复post-more.php(主题分享菜单内容)文件出现【: Undefined array key 0 in 】错误的问题,与APP模块的底部分享菜单报错一样,通过正则提取文章图片时,没有考虑到没有图片返回的情况,因此当文章没有图片时会返回上述错误。解决方案,正则匹配的结果进行isset处理在返回。
    8、【php版本升级处理】:修复global/im/notice/moments.php文件出现【Attempt to read property "link" on array in、Undefined variable $user_link in 】错误的问题,朋友圈消息提醒时,有些消息是不会写入$data->link字段,直接输出会导致新版本识别错误,进而出现页面错误。
    9、【php版本升级处理】:修复/function/paging.php 文件出现【Undefined variable $update_sql in】错误的问题,当用户访问朋友圈消息页面时,会执行sql回调处理,将所有的未读朋友圈消息标记为已读状态。此处有个执行异常BUG,7.4版本会直接忽视,但是8.X版本会直接输出上述错误。已修正异常的地方。
    10、【php版本升级处理】:修复/function/is.php 文件出现【Undefined array key "moments_close" in】错误的问题,具体报错函数为xc_is_moments_comment,建仓当前朋友圈内容是否允许评论时,会读取moments_config用户字段,然后根据moments_close配置来查询用户是否禁用评论,但是这个字段除非用户主动设置,否则是不会显示的。这造成了字段不存在,直接if判断出现异常的问题。
    11、【php版本升级处理】:修复/global/pages/template.php 文件出现【Undefined array key "video_url" in 】错误的问题,通过模版函数输出朋友圈内容时,会读取文章自定义字段【video_url】,如果存在则会输出评论列表。该字段只有朋友圈类型为视频才会写入,如果非朋友圈视频则不存在。8.0会返回上述错误,解决方案通过isset增加一个效验,只有存在的时候才会执行。
    12、【php版本升级处理】:修复/global/pages/template.php 文件出现【Undefined array key "shop" in】错误的问题,通过模版文件执行xc_moments_output_content函数输出商品卡片时,如果朋友圈内容没有插入商品则不存在字段shop,通过if做检测会返回上述的错误码,修复方法,通过empty来进行空值检测。
    13、【php版本升级处理】:修复/global/pages/template.php 文件出现【Undefined array key "image" in、Undefined variable $moments_footer_style in、Undefined variable $border_style in 】三个错误的问题,朋友圈内容具有多个自定义字段,这些字段控制内容展示,比如话题等参数,传统的if判断会导致新版本出现Undefined错误。已进行一一修复,对值做进一步效验。
    14、【php版本升级处理】:修复/global/pages/template.php 文件出现【Undefined array key "order" in和type】这两个变量是通过$_POST 超全局数组中获取 'type' 和 'order' 这两个键的值,然后将它们赋值给 $type 和 $order 变量。然而,如果 $_POST 数组中不存在 'type' 或 'order' 这两个键,那么会得到 "Undefined array key" 的警告。目前已通过isset来检测键是否存在。
    15、【php版本升级处理】:修复xc_moments_output_content函数初始变量大量存在Undefined array key错误的问题,为了解决该问题 以下字段(post_id、type、author、time、content、power)都会进行三元运算来处理为空的存在,如果不存在则将其主动标记为false,避免后续请求造成错误。
  • 0
    小小乐lv.2实名用户
    2024年5月4日
    1、宫论支付体系进行全面重构操作,支付的请求发起、环境安全效验、订单数据生成、支付接口调用、支付回调业务都采用统一钩子来处理,不同的支付场景只需要在相关钩子处进行参数设定,即可完成一件接入方案。这样后期维护更新会轻松很多,重构支付体系过程中,不会对原有的支付体系造成问题。
    2、服务端正式集成支付SDK(yansongda/pay)版本号(2.10)通过composer安装和管理。项目包维护地址(/wp-content/module/public/function/acocoa/sdk/)后续所有的项目支付请求,都将通过该SDK来完成。包括不限于(微信APP支付、微信网页支付、微信公众号支付、微信小程序支付、支付宝APP支付、支付宝网页支付)所有支付接口请求都通过该项目包来完成封装。注:目前主流接口是微信支付和支付宝支付,但是如果业务需求也可以集成银联支付。
    3、宫论网站程序PHP版本从7.4升级到8.2。拥抱新语法新特性,升级过程中会遇到各种旧语法兼容性报错,后续将一一进行适配处理。升级php版本是必须迈出的一步,越早越好。现在所遇到兼容性语法问题,计划一星期内一一解决。升级8.2版本主要是有两个原因。1、性能更好、安全性更高、新函数更丰富。2、后续的等保问题,必须用php8.X。注:升级后,需要重点处理SDK,很多SDK不一定能够适配,需要想办法解决。
    4、【php版本升级处理】:修复新版本无法使用redis缓存的问题,返回错误Uncaught RedisException: Connection refused in。处理解决方案:1、先卸载redis组件,避免版本冲突。2、旧的php版本移除redis扩展,8.2版本安装上redis扩展(不能同时启用,会产生异常)。3、重新安装并启用redis组件。
    5、服务器文件进行一次全面的备份处理,因为网站项目要升级过渡到php8.2最新版本,涉及到很多方面的重构处理,万一升级失败 需要做无缝回滚操作。为了整体的数据文件安全可靠性,宫论服务器做完整的一次备份处理,备份的内容包括(网站所有文件、数据库核心文件、已加载过的第三方脚本)等。
    6、宫论项目mysql版本从5.6升级到8.0。拥抱新的sql语法和特性,提升数据库的响应速度,增强字段查询的索引能力。既然下定决心升级php版本,那么索性一次性解决数据库版本问题。升级流程:1、备份数据库,存放多个地方。防止出现安全问题,同时mysql目录文件也备份,万一数据恢复失败可以通文件进行恢复。2、删除所有的数据版本,然后卸载停用5.6版本。3、安装mysql8.0,根据之前的配置恢复设置。4、数据库恢复还原。
    7、【php版本升级处理】:修复paging.php分页接口返回的错误(Parse error: syntax error, unexpected variable "$exclude_ids" in)8.0对于#[]有改变,不能像以前当做注释方法来使用,PHP 会把它当作普通的代码来处理,这也就是造成接口返回错误的原因。
    8、全面排查并修复【#[]】注释语法产生冲突的文件,目前已修正并处理的文件有【hook.php、paging.php、hook_push.php push.php、redis.php、log.php、fun_sql.php、timing.php、recurring_task.php、system_task.php、api.php、function.php】
    9、【php版本升级处理】:修复redis接口请求函数xc_redis出现错误(Warning: Undefined global variable $Task_Worker in)的问题,$Task_Worker超全局变量,是用于检测设备是否处于异步的方法,在异步进程中默认为true,用户环境则未定义。新版更严谨,不允许访问未定义方法,这导致出现语法错误的情况。解决方案是通过isset来判断。
    10、【php版本升级处理】:解决js_css.php在处理日志打印权限输出时,新版本返回错误(Warning: Undefined variable $ops_cosnole in)的问题,该问题源于ops_cosnole未定义导致,之前只考虑了用户有权限的情况,未考虑无权限的状态。这导致无权限状态下,返回上述错误码。解决方法,无论是否有权限都会返回值。
    11、【数据库版本升级处理】:修复升级后后台数据配置全量丢失的问题,问题源于配置字段(序列号数组)结构,获取后无法转为json。连续备份文件都存在该问题,经过长时间的数据对比,手动完成数组结构转换,成功回复json文件。并恢复于后台。注:后台配置以后设计sql搬迁升级等高风险操作,需要提前手动备份。避免出现问题。
    12、【php版本升级处理】:修复ajax.php拦截器返回(Undefined array key "HTTP_REFERER"和"ajax_code")的错误。因为请求不一定会携带HTTP_REFERER和ajax_code两个变量,8.x版本会严格效验参数是否存在,如果不存在或缺失直接if判断就会返回上述错误,正确的处理方式,通过isset进行三元运算,如果不存在则标记为false。在进行后续检测。
    13、【php版本升级处理】:修复is.php返回错误(Undefined global variable $Task_Worker、Undefined array key "GATEWAY_ADDR")具体错误源自xc_is_asyn检测当前用户环境是否处于进程脚本的函数,提取$GLOBALS['Task_Worker']和$_SERVER['GATEWAY_ADDR']两个变量错误导致的,php新版本如果变量不存在直接if判断会出现错误。解决方案,通过三元运算处理,如果不存在则标记false。
    14、【php版本升级处理】:修复用户来访请求事件钩子xc_user_visits_hook出现(Undefined array key "uniapp_cid" in、 Undefined array key "uuid" in)的错误,uuid是APP端才有的设备码、uniapp_cid是APP端才有的消息推送码,其他环境是无法获取的。因此需要做三元运算处理。防止字段报错。
    15、【php版本升级处理】:修复用户来访请求时,钩子执行是否清理其他设备在线请求时出现的【 Undefined array key "other_accounts" in】错误,该参数通过登录钩子才会携带,正常情况下是不存在的。因此需要做三元运算,进行参数效验。避免其他场景来访,因为该字段不存在导致的错误。
  • 0
    小小乐lv.2实名用户
    2024年4月30日
    1、xc_face_ok_hook钩子已通过xc_do_action挂载动作钩子,如果有其它业务需要对人脸识别结果进行回调动作,可以通过add_action来注册关联事件进行绑定,这样当人脸识别对比成功后,会在输出结果前将处理结果发送给对应函数,比如账户实名认证成功,其它业务需要触发回调通知,那么就可以使用add_action来创建一个函数来对接处理。注:动作钩子只负责回调,不负责结果返回。
    2、人脸识别后续事件处理成功后,为了确保前端能够正确响应和处理业务逻辑(中转事件过多,导致业务无法解析)。xc_face_ok_hook钩子现在除了返回code和msg两个字段外,还会返回【type:人脸认证场景,比如账户实名(personal)、id:写入的主键ID、table_name:人脸识别的数据表名】需要特别注意的一点,这里表名和主键ID是xc_face。
    3、前端新增钩子:xc_hooke_real_personal_ok,账户实名认证成功时候触发,具体为:人脸对比与用户输入的身份证信息结果一致。后端业务已完成封装处理,此时会通过xc_hook_face_result钩子触发code=0,如果携带的返回体type参数等于【personal】则此时会触发这个钩子,触发该钩子时会携带msg原始数据包过去。
    4、当用户实名认证成功,前端页面会通过xc_hooke_real_personal_ok钩子依次执行以下动作。1、通过xc_msg触发提示【账户实名认证成功】。2、将user.is_login_real对象标记为true,告诉前端该账户已完成实名账户请求。3、锁定页面元素【page-content.xc_real_personal】将子类real_personal_btn的onclick点击事件移除、文本变更为账户实名认证成功、背景颜色调整为黑色。
    5、人脸识别后台配置新增字段:xc_face_needPicture_local(人脸采集的图片存放路径),服务器本地目录:(绝对路径)。示例:示例:/www/wwwroot/www.acocoa.com/wp-content/xxx/<br>如果不想要外部访问这些图片,可以放到非网站目录。注:涉及到严重的隐私问题,目前暂不考虑同步到云端对象存储,仅限本地服务器存储。
    6、后端新增文件下载钩子:xc_download_hook($url, $saveDir) 这个函数接受两个参数:文件的URL和保存文件的目录。如果目录不存在,函数会尝试创建它。如果目录创建失败,函数会返回错误信息。如果没有指定保存的文件名,函数会从下载文件的URL中提取。如果下载失败,函数也会返回错误信息
    7、文件下载钩子优化,考虑到同名文件的存在。下载的文件如果沿用原有的文件名,会导致出现覆盖保存现象。因此文件会进行系统重命名。规则如下 1、通过pathinfo获取提取文件扩展名。2、通过time()添加时间戳和uniqid随机字符到文件名以避免冲突。3、最终的文件格式为1714451993_663076197b94f.jpg。jpg是原文件格式,通过url完成提取。这样的命名处理,可以避免同文件被覆盖的问题。
    8、文件下载钩子现在返回标准的数组结构:code=0代表下载成功,url是本地文件路径。code=1代表下载保存失败,msg是失败的原因。文件下载一般有两个场景会发生错误。1、通过mkdir进行目录创建的时候,因为权限不足导致创建失败会返回错误。2、curl_exec请求失败时(文件不存在,拒绝响应)也会返回对应的错误码信息。
    9、xc_face_result_hook如果请求云函数成功,会对返回结果进行核验。如果返回值包含【pictureUrl:用户人像采集的图片地址(有效期15分钟)】则检查后台是否启用图片采集,如果启用则通过xc_download_hook将其下载到本地,路径由后台设定。保存成功后,将会将本地路径存放并更新到数据表主键中。方便后续查询。
    10、xc_face(人脸识别核验结果数据表)和xc_real_personal(账户实名认证记录数据表)的三个同名字段进行加密存储(name:真实姓名。code:身份证号码、img:人像采集的图片),加密方式xc_encrypt($data)。如果需要提取这三个字段需要通过xc_decrypt($data)对其进行解密处理。否则会显示乱码。这三个字段涉及到用户个人隐私,出于安全考虑在写入sql前需要进行加密处理。
    11、为了方便溯源,如果实名认证出现问题相关问题,可以通过官方渠道查询调用详情。xc_face数据表会通过字段:remake来记录face凭证(certifyId)。账户实名认证表xc_real_personal会通过字段:token来记录该值。注:certifyId是服务商(阿里云:蚂蚁金服)返回的唯一凭证,可以通过该字段返回查询结果(有时效限制!)
    12、修复并解决xc_real_personal账户实名认证记录表写入失败的问题,一共有四个问题造成。1、name和code两个字段设置为varchar(16)和varchar(32)。但是加密后的字符大于这个数值造成sql执行异常。目前已全部变更为256。2、在执行sql写入前,没有在xc_face_ok_hook钩子中引入wpdb全局对象,造成sql无法顺利执行。3、return返回前端数据时,返回的是空【result】数组,正确应该是face_ok数组对象。4、在构建sql语句时,data字段错误的将,写成; 造成执行出现故障。目前已一一修正。
    13、WEUI顶部提示消息组件优化,top_msg函数现在新增第三个可选变量(time)默认值为显示3秒,如果需要延迟或减少展示时间,可以通过改变这个字段来控制(目前只支持整数传递)不过需要特别注意的一点,顶部弹窗会遮挡左上角返回按钮,目前也不支持点击自动关闭。在进行长时间内容展示时,需要注意用户体验!
    14、账户个人实名认证流程基本完成封装,交互执行动作如下。1、用户填写身份姓名、身份证号码表单,勾选页面相关用户协议。2、点击页面底部按钮(下一步,人脸识别认证)前端会检测用户表单是否输入正确,是否勾选协议、是否已实名过。如果不符合要求则返回提示中断请求。3、将用户提交的身份证号码、身份证姓名、通过ajax提交到后端进行处理。4、后端收到用户提交请求,会调用钩子:xc_face_check_hook钩子(账户实名的type值:personal)来执行检测。5、人脸前的核验检测包括一下(1。通过xc_is_face_metainfo检测是否符合环境要求,主要是获取设备SDK参数,获取失败则拦截。2、检查用户是否绑定手机号,如果未绑定手机号不允许进行实名。3、检测本次身份主体是否有人认证过,有人认证是否超过后台限制。如果超过拒绝。4、通过xc_is_login_idcard查询用户是否已实名过,如果已实名过则拒绝二次实名。5、通过xc_is_security核验用户环境是否安全可靠,不安全则需要核验短信。6、通过xc_idcard_verification_hook核验身份证和姓名是否有效(是不是存在合真人),如果不存在返回错误。7、读取用户可用人脸核验额度,如果不存在或小于1则需要付费【这里涉及支付系统,后面才接入】。)符合以上条件,则说明当前用户具备的实名认证的基础条件。6、调用内部封装好的云函数(xc_dcloud_face,请求获取certifyId凭证),如果获取失败或异常则返回对应错误。7、成功取得certifyId凭证后,将会建立redis令牌缓存,以用户设备指纹做标识。存储(用户身份信息、certifyId值)等信息,作为前后端交互的同行灵。8、后端的核验请求完成封装,返回code=0,并且附带certifyId参数。9、前端收到certifyId 凭证后,会触发xc_hooke_face_sdk钩子事件。钩子内部会通过xc_isplus来检测用户环境是否支持plus,如果支持则会触发APP通讯请求(xc_hook_h5_evaljs)。10、xc_hook_h5_evaljs是网页与APP通讯的钩子,实名认证会传递两个参数(type:startFacialRecognitionVerify、certifyId:之前的凭证)。11、APP收到startFacialRecognitionVer请求,则会检测certifyId值是否有效,如果有效则调用人脸识别SDK。12、用户成功调起实人认证界面,便可以进行人脸识别(眨一眨眼睛、向左右砖头)进行身份对比。12、完成人脸比对操作后将会触发complete监听事件(携带初步比对结果)账户实名认证会在原有基础上写入两个字段(type:face_result、certifyId)然后执行that.app_h5请求。13、app_h5是新封装的通讯事件(APP发送消息给网页端),完成人脸比对后,会将结果发送到前端钩子xc_hook_app_evaljs。14、前端xc_hook_app_evaljs钩子收到:face_result(人脸验证结果)请求后,会将数据进行还原成数组对象,然后执行单独的事件(xc_hook_face_result:人脸识别处理结果)。15、xc_hook_face_result负责将结果发送到后端处理,在发送前依旧会检测用户环境是否处于APP。16、后端收到人脸比对结构将会转发到xc_face_result_hook钩子来处理。17、xc_face_result_hook会尝试读取之前预设的令牌redis缓存,如果读取失败则返回【处理失败:令牌无效或已过期】,如果读取成功,但是令牌比对不一致则返回【处理失败:certifyId对比异常!'】。18、完成令牌比对后。直接对传递的数据包进行效验,如果数据包errCode不等于0,则说明错误或异常,此时将直接返回数据包的错误结果集。19、如果数据包表明人脸核对完成,则说明本次核验有效,账单已生成。此时会读取用户自定义字段【face_number】,进行-1处理。20、数据包具有伪造特性,为了确保安全。此时会执行第二次云函数请求xc_dcloud_face(请求的标识为:getAuthResult)。21、xc_dcloud_face会返回标准的结构体,如果不等于0则直接返回对应的错误信息。如果等于0,说明用户核验有效。22、通过xc_redis_count进行计数操作,计数标识为:api:face,统计人脸接口的调用成功次数。23、检测远函数返回的数据包是否包含pictureUrl,如果包含则说明存在人像采集。此时会通过xc_download_hook方法进行下载到服务器,下载保存的路径后台定义。完成下载后,会对下载地址进行xc_encrypt加密。24、执行sql写入动作,将本次的人脸核验请求参数、以及结果等信息写入到xc_face数据表(姓名、身份证、图片)会加密。25、根据云函数返回的字段【authState】来执行不同的业务逻辑。等于FAIL代表对比失败。直接返回【刷脸失败:人证信息比对不一致】。等于SUCCESS代表成功,触发单独的钩子:xc_face_ok_hook。26、xc_face_ok_hook是人脸核对成功的回调钩子:该钩子会接受id变量。该变量为人脸识别表的主键ID。触发后会检测是否存在记录,不存咋则返回【刷脸成功:但是(xc_face)数据表写入失败<br>系统问题,请联系管理员处理!】。27、xc_face_ok_hook如果处理的是【personal:账户实名认证】,那么会将本次实名记录信息写入到xc_real_personal数据表(这个代表用户真正意义上完成的实名认证)。28、除了写入sql记录,还会通过update_user_meta标记用户自定义字段real_type,将其标记为1。29、xc_face_ok_hook钩子支持do_action动作回调,如果其它业务需要知晓用户人脸比对成功结果,可以通过注册函数来进行业务回调。30、完成上述操作后,代表账户的实名认证流程(后端业务)已完成处理。此时会返回【code、msg、type、id、table_name】字段到前端页面。31、前端接收到人脸比对成功结果,会对msg.type进行判断,如果是【personal:账户实名认证】,那么将会触发xc_hooke_real_personal_ok钩子。32、xc_hooke_real_personal_ok钩子是负责账户实名认证通过后页面回调动作的,该钩子会接收msg(后端数据包)变量。33、xc_hooke_real_personal_ok会将实名认证页面操控按钮【real_personal_btn】进行如下操作,将onclick事件移除,防止继续点击、将按钮文字变更为账户实名认证成功、将按钮背景颜色调整为浅黑色。同时将user.is_login_real标记为true,告诉前端当前用户已完成账户实名。34、至此:账户实名认证流程基本完成!!
  • 0
    小小乐lv.2实名用户
    2024年4月29日
    1、xc_face_result_hook基础拦截效验已完成封装,触发人脸识别结果处理时,会依次执行进行以下动作。1、通过xc_is_fingerprint获取当前设备指纹,然后以此作为主键,查询face_token缓存令牌数据是否存在,如果获取失败则认定用户非法提交。2、检查传递的对象是否包含($face['certifyId'])凭证,如果未包含则视为非法提交。3、检测传递的certifyId是否与缓存令牌的certifyId是否一致,如果不一致则视为非法提交(最核心的一个效验)。4、检测errCode状态码是否为0,如果为0则说明接口本身就返回错误。此时将会返回对应的错误提示。
    2、完成基础拦截事件后,会创建real数组 里面包含两个字段【way:getAuthResult、certifyId:$face['certifyId']】然后通过xc_dcloud_face发起云端函数请求,请求face云函数返回本次的处理结果。注:real所提交的两个字段都是必须的,如果有缺失会在云函数发起前就会返回错误。注:人脸识别完成,只能通过云函数来获晓是否对比成功。
    3、通过xc_dcloud_face进行人脸结果核验时,基本可以确定已完成扣费工作(本次用户人脸识别需要支付服务商接口对应费用),为了避免云函数接口返回异常,导致后续处理失败。会提前执行两个动作。1、通过delete_redis_meta删除通讯令牌,确保用户的下次请求能够顺利执行,也是确保令牌被重复调用。2、通过缓存读取操作用户user_id,然后获取其字段【face_number】,在其原有数字基础上进行-1处理。相当于操作用户的人脸识别流量包。注:因为人脸识别场景可能存在非登录场景,所以扣费的处理必须通过缓存对象来获取。
    4、xc_face_result_hook方法现在能正确响应并处理【xc_dcloud_face】核验的最终数据,有2种数据包返回。1、接口抛出的错误为标准的uni错误对象,这类错误统一返回code:1,msg是返回体加错误码。示例(0000:Api调用失败【424】:该certifyId用户未完成认证或认证进行中)2、人脸核验成功,但是需要通过authState字段来获晓检测状态。
    5、xc_dcloud_face请求方法优化处理,现在能准确处理【getAuthResult和getCertifyId】两个场景业务返回。如果是getCertifyId来源,并且返回的errCode等于0则会返回certifyId值。如果是getAuthResult来源,并且返回的errCode等于0,那么将返回以下字段【authState核验结果、pictureUrl:身份证图片、data:原始数据包】
    6、后台新增宫论redis计数器:【计数器】API - 人脸识别调用接口(标识:api:face)。当用户通过xc_face_result_hook完成人脸核验后(只要接口请求成功,不论核验是否成功)都会通过xc_redis_count方法进行计数操作。可以通过get_redis_count($key)获取计数器统计详情,支持查询【总数、今日、昨日、本周、上周、本月、上月、今年、去年】多维度的计数器查询统计。注:这个计数器可以监听每日接口调用次数,
    7、通过xc_dcloud_face进行getCertifyId结果核验时,如果用户人脸核验成功。将会对返回结构体进行单独封装。返回给后端的字段如下【code=0标记为成功、authState:核验结果(SUCCESS代表是本人、FAIL不是本人)、pictureUrl:对象存储临时图片地址(有效期15分钟)、data:原始返回数据包】
    8、当人脸识别接口完成扣费操作后,无论用户是否核验比对成功 都会建立sql数据表记录。写入字段如下【user_id:提交用户,通过缓存字段获取、type:来源场景、ip:当前客户端IP信息、ua:当前客户端UA信息、fingerprint:设备UUID码、name:核对姓名、code:身份证号码、img:临时图片地址、data:接口返回的数组对象、getMetaInfo:用户设备信息、time:当前时间日期、status:固定值SUCCESS或FALE】
    9、人脸识别采集数据,在提交数据库时会进行优化处理。1、nanme身份证姓名、code:身份证号码,会通过xc_encrypt()方法进行加密,隐私安全保护。提取和效验这个参数必须进行解密。2、data字段存储json数据,该数据来源为云函数原始包,通过json_encode进行json字符处理。3、写入数据库后,会读取insert_id(主键ID),方便后续业务跟进。
    10、人脸识别接口成功产生账单费用后,会对操作源用户$redis_meta['user_id']进行如下操作。1、读取对方自定义字段:face_number,如果值-1后小于0,则直接删除对方该字段。否则在原有的用户字段基础上-1处理。之前是仅进行-1操作,如果出现纰漏会出现负数。同时用户发起人脸识别时,可用额度检测增加一个判断。如果字段为空不存在也会返回错误!
    11、人脸核验返回结果后会对$dcloud_face['authState']字段进行对比处理,如果等于FAIL,则说明检测失败。此时会直接返回前端【code=1、msg=刷脸失败:人证信息比对不一致】,如果等于SUCCESS,则代表认证合一返回前端(code=0、msg=刷脸成功:数据对比成功!)。如果以上情况都未触发,则会返回系统异常,防止死亡圈圈出现。注:为了方便后续业务的对接,无论是FAIL还是SUCCESS,都会返回【id、table_name】数据表名、主键id。
    12、后端新增钩子:xc_face_ok_hook,需要传递【id:人脸识别数据表的主键ID】当用户完成人脸识别,并且核验对比一致时会触发该表。相关的业务回调可以通过这个钩子来处理。因为人脸识别的场景非常多,比如(解除账户冻结、账户实名认证、账户注销申请、找回丢失账户)等,业务逻辑都封装在xc_face_result_hook钩子内部,会造成维护非常不方便。只要人脸成功,并且成功建表。则通过xc_face_ok_hook来做处理,该钩子不需要返回操作结果,只管执行逻辑。
    13、考虑到业务回调问题,人脸识别结构如果请求来源是:personal。则会在xc_face_ok_hook钩子内部依次执行以下动作。1、通过xc_get_sql读取数据表【xc_face】对应主键记录,如果读取失败则返回【刷脸成功:但是(xc_face)数据表写入失败<br>系统问题,请联系管理员处理!】2、强制通过update_user_meta方法来更新用户字段real_type,将其标记为1,表明用户已完成账户认证。3、创建xc_real_personal数据表记录,将用户实名记录写入到该表。如果写入失败则返回【刷脸成功:但是(xc_real_personal)数据表写入失败<br>系统问题,请联系管理员处理!】。4、返回coe=0,msg=刷脸成功:账户实名认证成功。
  • 0
    小小乐lv.2实名用户
    2024年4月28日
    1、宫论后台人脸识别配置页面新增switcher字段:xc_face_needPicture,是否采集用户照片(开启后,将会采集用户的人脸图片)。需要慎重考虑,非身份证图片。而是人脸识别过程中拍摄的图片。这个涉及到用户隐私问题。注:涉及到本地存储问题,人脸识别通过后需要通过接口将图片采集到本地(并对存储地址进行加密处理)。
    2、xc_dcloud_face接口优化,现在在执行云函数请求前,会读取后台配置xc_face_needPicture,来进行$real['needPicture']变量赋值。通过三元运算来决定该值属性为true和false。同样的云函数脚本执行frvManager.getCertifyId请求时会核验param.real.needPicture参数,如果为true则标记为采集图片信息。
    3、face云函数脚本现在强制要求提供【way】变量,固定值(1、getCertifyId:获取SKD所需要的certifyId。2、getAuthResult:获取认证结果)与之对应的云函数脚本现在也以支持frvManager.getAuthResult方法的处理,该方法需要传递两个变量值:way= getAuthResult、certifyId:实名认证唯一凭证。云函数脚本收到请求后,会先核验秘钥和请求头是否符合规范,符合规范的情况下解析获得传递对象,然后通过对象way来知晓请求是获取凭证还是查询结果。
    4、app项目新增网页通讯事件(app_h5:通过APP像网页发送数据包),该方法一般作用于handleMessage监听行为中,当业务请求处理完毕后,APP需要将结果发送到前端(网页内部)进行处理时将通过这个事件来完成。需要传递data对象数组,注意禁止传递字符串,必须包含data.type(方便业务进行区分)。该方法会在内部获取webview对象,然后通过currentWebview.evalJS方法执行消息下发。(单向通讯,不存在结果返回)
    5、APP端新增通讯hook钩子:xc_hook_app_evaljs(data),data是一个数组对象,必定包含type(操作来源)。钩子内部将通过type来识别场景,然后执行对应的业务逻辑,业务所需要的变量参数通过data来提取。注:之前的旧版通讯办法H5_js继续保持不变,后续的通讯请求则必须通过新版方法来处理。
    6、网页端继续新增通讯HOOK钩子:xc_hook_h5_evaljs(data),data是一个数组对象,必定包含type(操作来源)。钩子内部将通过type来识别场景,然后执行对应的业务逻辑,业务所需要的变量参数通过data来提取。注:之前的旧版通讯办法xc_app_js继续保持不变,后续的通讯请求则必须通过新版方法来处理。注:xc_hook_h5_evaljs是网页和APP通讯、xc_hook_app_evaljs是APP与网页通讯。两者都不支持回调,属于单向通讯。
    7、网页与APP端新增一个固定调试方法【type:test】,如果需要对接口请求做通讯测试,可以通过xc_hook_app_evaljs来发起,只需要对讲type标记为(test)即可。注:虽然是调试预留方法,但是同样可以通过data来传递其它参数。需要特别注意的是,新增通讯事件必须先通过test的验收,在来自定义type标识。
    8、app.js已完成数据包的接收处理,当APP项目通过app_h5执行evalJS数据发送请求时,前端会通过window.xc_hook_app_evaljs方法来接收数据,在成功取得data对象信息后,会先通过JSON.stringify转为json格式,然后在利用$.parseJSON将其转为json对象,最后在将对象转发到xc_hook_app_evaljs钩子进行业务分发处理。
    9、APP收到(startFacialRecognitionVerify)请求时,会先检测certifyId是否存在,如果不存在返回错误并阻止后续执行。如果存在则调起实人认证界面。并对后续的动作进行监听处理。目前已支持的监听有(success:实名认证扣费成功(不代表认证通过,只是人脸识别成功。系统完成扣费)、fail:操作失败时被调用,一般为用户主动退出,调用接口失败、账户欠费、无权使用。complete:无论操作成功还是失败,这个函数都会在操作完成后被调用。)
    10、成功调用APP端人脸识别SDK后,如果存在返回结果,会通过complete事件监听来触发【that.app_h5】方法,将SDK返回的结果信息(e对象)通过currentWebview.evalJS方法发送到网页端。网页端经过数据解析在转发到xc_hook_app_evaljs通讯事件。最后的业务逻辑处理通过该钩子来完成。注:转发e对象前,会将e.type赋值为【face_result】
    11、新增前端钩子:xc_hook_face_result()负责处理APP端返回的人脸识别结果。该钩子需要传递face_result数组对象,里面包含SDK返回结果集。在执行前会通过xc_isplus来效验用户环境,如果不处于APP则直接拒绝用户的执行。钩子触发后,会调用xc_loading_show显示【处理中】,然后将face_result发送到后端效验。注:是否人人脸识别成功,必须通过后端来决定。
    12、新增后端钩子:xc_face_result_hook,负责处理人脸识别SDK返回的结果。该钩子返回标注的数组结构,来核验并返回处理结果。code=0代表操作成功,一般表明用户本次人脸识别效验成功。code=1代表失败,msg是详细的错误信息。注:code=1的返回包括(缺少参数诺参数错误、账户欠费、服务商异常不可用、刷脸异常、网络中断、用户主动退出、当前客户端环境异常)等等。
    13、修复app与网页通讯出现【Error: java.lang.IllegalArgumentException: field】错误的情况,通过evalJS发送数据前会先通过JSON.stringify将对象变成字符串,然后在使用encodeURIComponent进行URL编码处理。这样可以确保传递的对象信息不回因为特殊字符造成解析异常。同样的通过xc_hook_app_evaljs接受APP数据时,会先试用decodeURIComponent进行uRL还原,在通过JSON.parse转为对象。
    14、人脸识别过程中,为确保前后端交互安全(验收参数不会被非法篡改伪造)。app在执行startFacialRecognitionVerify方法时。无论返回的状态码是什么,都会通过h5.certifyId来获取验证凭证。该凭证会通过app_h5->xc_hook_app_evaljs->xc_hook_face_result->一直传递到后端业务钩子(xc_face_result_hook)。钩子将以凭证作为查询标准 来核验用户的请求是否安全可靠!
  • 加载更多评论
    单栏布局 侧栏位置: