• 注册
  • 发动态
  • 发帖子
  • 发视频
  • 发红包
  • 暂没有数据

  • 推荐
  • 视频
  • 关注
  • 瓷器
  • 字画
  • 玉石
  • 钱币
  • 铜器
  • 木器
  • 紫砂
  • 杂项
  • [ls_fbk]
  • 查看全文
  • 查看作者
  • 宫论项目开发记录

    记录2023年项目进度周期。

  • 2
  • 709
  • 0
  • 15.45w
  • 小小乐小可鸭鸭

    请登录之后再进行评论

    登录
  • 0
    小小乐lv.2实名用户
    2025年7月29日
    1、xc_close_payment_sdk_hook的(支付宝订单关闭)执行流程如下:初始化 SDK引用:通过 require_once xc_get_option('xc_sdk_composer'); 引入支付 SDK。 配置获取:调用 xc_payment_config_hook() 函数获取支付配置。条件判断:检查 $type 是否为 'alipay'。 配置设置:使用 \Yansongda\Pay\Pay::config($config); 设置支付配置。 订单信息构建:创建订单信息数组,其中包含 out_trade_no(订单号)。 订单关闭: 调用 \Yansongda\Pay\Pay::alipay()->close([...]); 关闭支付宝订单。 将返回结果转为数组,检查 sub_code 是否存在以确定错误。 根据结果设置 code、msg 和 data 到 $result。 返回 $result。 异常处理: 捕获 GatewayException:返回网关异常信息。 捕获 InvalidArgumentException:返回参数异常信息。 捕获 InvalidSignException:返回签名异常信息。 捕获其他异常:返回其他异常信息。
    2、在通过 xc_close_payment_sdk_hook 发起订单关闭请求时,如果遇到错误情况,系统会记录 SDK 返回的异常错误信息,并将这些信息以日志的形式保存。日志标识为 payment_sdk_error,其格式包含多个关键字段:错误发生的具体时间(格式为 y-m-d H:i:s)、支付订单的主键 ID、SDK 发起的支付类型(如微信支付或支付宝支付),以及详细的错误信息。这些日志会在以下情况时触发写入:网关异常、参数异常、签名异常以及其他未定义的异常。错误记录的主要方式是通过 catch 语句监听 SDK 抛出的错误,以确保所有处理失败的详情都能被准确记录。
    3、完成了SDK的关闭处理动作,整个支付关闭动作基本已完处理处理。大致的处理流程如下:初始化和锁定 Redis锁定:创建一个 Redis 锁 payment_callback:$id,有效期为30秒,使用 xc_lock() 函数。 如果锁定失败,返回状态码和信息,提示订单处于锁定状态。 2. 数据库查询 获取订单信息:使用 WordPress 数据库类 $wpdb 查询 xc_pay 表,获取指定 id 的订单信息。 如果订单不存在,返回状态码和信息,提示关闭失败,订单不存在。 如果订单状态不是 wait_pay,返回状态码和信息,提示订单未处于付款阶段。 3. 订单关闭条件判断 任务关闭: 如果 $type 为 'task',检查订单的 close 时间。 如果当前时间未超过 close 时间,返回状态码和信息,提示订单未超过付款截止时间。 用户关闭: 如果 $type 为 'user_id',检查当前登录用户。 如果当前用户未登录或不是付款用户,返回状态码和信息,提示关闭失败,用户不是付款用户。 卖家关闭: 如果 $type 为 'seller',检查当前登录用户和卖家信息。 如果当前用户未登录或不是收款用户,返回状态码和信息,提示关闭失败,用户不是收款用户。 4. 更新订单状态 更新订单状态: 获取订单的 meta 信息,更新 close 字段的时间和类型。 更新订单状态为 close,调用 xc_update_sql() 函数更新数据库。 关闭成功回调: 调用 xc_close_payment_ok_hook($id) 函数执行订单关闭成功的回调操作。 5. 尝试关闭支付订单 SDK关闭支付订单: 如果订单的 pay_select 是 'wxpay' 或 'alipay',调用 xc_close_payment_sdk_hook() 尝试关闭支付订单。 6. 返回结果 返回成功信息:设置状态码为 0,信息为支付订单已关闭,并返回结果。
    4、新增了一个名为“主副锁计划”(xc_task_alipay_wait_refund)的机制,专门处理支付宝订单中处于等待退款状态的情况。在业务逻辑发起订单退款后,订单状态会被标记为“wait_refund”,随后启动进一步的业务逻辑以关闭订单。在完成关闭处理后,若订单涉及微信或支付宝付款,资金需要按原路径退回。通常情况下,这一步会通过SDK发起退款请求。然而,由于退款过程涉及结算和清算处理,可能会出现多种情况,导致退款无法实时返回或成功。这种情况下,订单虽然已经关闭,但退款可能迟迟未到账。为了应对这一问题,系统设定了一个定时计划,以便在必要时重新发起退款请求,确保资金能够及时退回至用户账户。这一机制旨在提高退款处理的效率和可靠性,减少因延迟退款带来的用户困扰。
    5、在xc_task_alipay_wait_refund初始化阶段,系统会进行以下操作:首先,初始化一个名为result的数组,后续的返回结果将采用标准的数组结构进行呈现。其中,两个关键参数是code和msg。code用于表示执行状态,值为1时代表执行异常失败,此时可以通过msg来了解具体的失败原因;值为0则表示执行成功,意味着业务处理已完成。此外,该阶段还会执行一个基于Redis的上锁保护操作。锁的标识是函数名称,在执行过程中会首先尝试获取锁。如果获取锁失败,系统会返回code=1,并提示“上锁保护:请稍后再重试”,以防止并发情况下重复执行退款请求的情况发生。这种机制有效地确保了退款请求的处理不会因为多线程并发而出现重复操作,从而维护系统的稳定性和数据的一致性。
    6、在完成了基础的拦截验证后,系统会通过global关键字引入核心的wpdb对象,接着利用WPDB构建一个查询语句,以检索支付订单数据表(xc_pay)中符合特定条件的记录。具体来说,该查询旨在筛选出付款类型为支付宝(alipay)且状态为等待退款处理(wait_refund)的订单。同时,这些订单的退款时间(refund_time)必须早于当前时间的10分钟之前。如果查询成功并找到符合条件的订单,则系统会继续执行后续的业务逻辑处理;若查询未能获取到符合条件的记录,则系统将直接返回code=1,并提示用户:没有找到符合条件的退款订单。
    7、新增了一个名为xc_refund_query的事件,用于查询特定支付订单的退款状态。为了实现这一功能,必须传递一个固定变量id,该变量与支付主键参数相对应。此事件通过订单号来查询退款状态,并将查询结果返回给调用者。具体操作中,该方法会调用SDK进行查询处理,并返回相应的订单信息。在初始化阶段,系统会对id进行检查处理。如果通过is_numeric函数检测发现id不是数字或者数字是字符串,系统会立即返回错误信息:“查询失败:订单号必须为数字”。如果id是数字,系统会统一进行订单查询,并更新支付订单数据表的记录。若查询失败,将返回相应的错误信息;若查询成功,则会将获得的支付信息保存到payment中。此外,该方法还会返回标准化的数组结构,以便上一级系统可以直接接受和处理查询结果。此设计旨在确保查询过程的高效和准确,同时提供便捷的结果处理机制。
    8、在进行退款查询时,设置了一系列拦截和返回处理机制,以确保查询结果的准确性和及时性。首先,如果查询过程中发现payment对象不存在,会立即返回错误信息,提示用户:查询结果显示订单不存在。其次,当检测到$payment['refund_order']为空时,这意味着该订单从未发起过退款申请,会直接返回:查询结果表明订单未发起过退款。接下来,对于通过余额(money)付款的订单,如果订单的state状态标记为refund,会返回:查询结果显示该订单已完成退款。需要注意的是,余额退款处理没有延迟,平台会自动完成清算。如果订单状态不为refund,则返回:该订单未退款。通过这样的流程,确保用户能够迅速了解订单的退款状态。
    9、如果查询退款的订单是微信订单,则整个执行流程如下:SDK引用: require_once xc_get_option('xc_sdk_composer');:引入SDK所需的Composer文件。 配置支付参数: $config = xc_payment_config_hook();:获取支付配置参数,这通常包括支付接口的密钥、证书路径等信息。 设置SDK配置: \Yansongda\Pay\Pay::config($config);:通过SDK的方法设置支付配置参数。 定义订单信息: $order = ['out_refund_no' => $payment['refund_order'], '_action' => 'refund'];:定义查询的订单信息,主要是退款单号。 查询退款状态: $refund_result = \Yansongda\Pay\Pay::wechat()->query($order);:使用SDK查询微信退款状态。 $refund_result = $refund_result->toArray();:将查询结果转换为数组格式。 检查查询结果: if (empty($refund_result) || !isset($refund_result['status'])):检查结果是否为空或是否包含状态字段。 如果结果异常,返回错误代码和信息。 处理退款状态: 使用 switch 语句根据 refund_result['status'] 的值进行处理: 'CLOSED':退款关闭,返回错误信息。 'PROCESSING':退款处理中,返回错误信息。 'ABNORMAL':退款异常,返回错误信息。 'SUCCESS':退款成功,返回成功代码和信息,并附带退款结果数据。 default:任何其他未知状态,返回异常信息。 异常处理: catch (\Exception $e):捕获任何异常。 在异常情况下,返回错误代码和异常信息。 返回结果: 每个处理分支都会返回一个包含 code 和 msg 的结果数组,表示操作的成功或失败状态。
    10、如果订单是支付宝订单,则整个执行流程如下:SDK引用: require_once xc_get_option('xc_sdk_composer');:引入SDK所需的Composer文件。 配置支付参数: $config = xc_payment_config_hook();:获取支付配置参数,通常包括支付接口的密钥、证书路径等信息。 设置SDK配置: \Yansongda\Pay\Pay::config($config);:通过SDK的方法设置支付配置参数。 定义订单信息: $order = ['out_request_no' => $payment['refund_order'], 'out_trade_no' => $payment['payment_order']];:定义查询的订单信息,包括退款请求号和交易订单号。 查询退款状态: $refund_result = \Yansongda\Pay\Pay::alipay()->query($order);:使用SDK查询支付宝退款状态。 $refund_result = $refund_result->toArray();:将查询结果转换为数组格式。 检查查询结果: if (empty($refund_result) || !isset($refund_result['refund_status'])):检查结果是否为空或是否包含退款状态字段。 如果结果异常且有 sub_msg 字段,返回错误信息包含该字段内容。 如果没有 sub_msg 字段,返回错误信息指示不可识别的数据。 处理退款状态: if (isset($refund_result['refund_status']) && $refund_result['refund_status'] == 'REFUND_SUCCESS'):如果退款状态为成功,返回成功代码和信息,并附带退款结果数据。 时间检查和失败处理: if (time() - strtotime($payment['refund_time']) > 30):检查退款请求时间是否超过30秒。 如果超过30秒,返回退款失败信息。 如果未超过30秒,返回退款失败但可能正在处理的信息。 异常处理: catch (\Exception $e):捕获任何异常。 在异常情况下,返回错误代码和异常信息。 返回结果: 每个处理分支都会返回一个包含 code 和 msg 的结果数组,表示操作的成功或失败状态。
    11、在通过 xc_refund_query 发起的 SDK 退款查询过程中,如果出现错误,系统会通过日志记录详细信息。日志标识为:refund_query_error,其格式包含了错误发生的具体时间(格式为 Y-m-d H:i:s)、支付订单的主键 ID、SDK 发起的支付类型(如微信支付或支付宝支付),以及具体的错误信息。目前,支持的错误监听返回信息如下:【微信支付】:CLOSED:表示退款已关闭,查询结果返回 CLOSED。PROCESSING:表示退款正在处理中,查询结果返回 PROCESSING。ABNORMAL:表示退款出现异常,查询结果返回 ABNORMAL。【支付宝支付】:当返回的 sub_msg 显示异常时,表示 SDK 返回了无法识别的数据。此外,如果 refund_time 超过 30,则系统会直接返回退款失败的结果,这可能意味着退款正在处理中,请稍后再进行查询。通过这些详细的日志记录和错误监听,能够帮助及时发现和解决退款查询中的问题。
  • 0
    小小乐lv.2实名用户
    2025年7月28日
    1、在xc_close_payment_order_hook支付订单关闭事件中,完成初始化处理(包括拦截动作和上锁保护动作)后,如果成功通过wpdb获取到对应订单记录,将进行一系列验证处理。首先,检查$payment['state'],如果其状态不等于"wait_pay",则会直接返回错误信息:“关闭失败:订单未处于付款阶段。”接着,根据请求来源进行进一步处理:如果type为task(表示系统发起的关闭行为),则会通过strtotime获取订单的截止付款时间,若该时间小于当前时间,则返回“关闭失败:订单未超过付款截止时间。”如果type为user_id或seller(即买家或卖家关闭订单),系统会通过xc_is_login获取当前登录用户,并验证其身份是否符合要求,如果不符合,则会分别返回“关闭失败:你不是收款用户”或“关闭失败:你不是付款用户”。
    2、在完成支付订单业务的检测工作后,将根据订单类型来执行相应的业务关闭请求。为此,设计了一个专门的事件来处理这些关闭请求。由于支付订单数量预计将持续增加,每个订单关闭都涉及到相应的回调处理,如果每种订单都通过hook进行处理,业务的维护将变得异常复杂。因此,采用事件分离的方式,可以更加有效地管理这些回调处理。新增的事件为:xc_close_payment_callback()。这个回调事件只需传递一个固定变量,即数据表的主键ID值。该方法会根据不同的支付场景执行相应的处理,其中最基本的操作是对原支付记录的关联表进行交易关闭处理。这种设计不仅简化了业务逻辑的维护,还提高了系统的扩展性和稳定性,为后续的订单处理奠定了坚实的基础。
    3、在执行xc_close_payment_callback时,系统会通过统一订单查询功能来获取相关的支付记录。如果查询支付记录失败,系统将返回相应的错误信息。若查询成功,系统会进一步检查订单的状态是否为“wait_pay”。如果订单状态不是“wait_pay”,同样会返回错误信息。值得注意的是,这个方法不涉及权限验证,因为其上级方法已经进行了全面的权限处理,该回调方法的主要职责是处理业务逻辑。回调方法返回的结果是一个标准的数组结构,其中code表示执行的状态结果:如果code为1,则表示执行失败,具体表现为订单关闭失败。失败的原因可能有多种,需要根据具体情况进行分析和处理;如果code为0,则表示订单关闭操作已成功完成。此外,msg字段包含具体的错误提示信息,可以直接传递给前端用户以便于他们了解具体的错误原因。
    4、在xc_close_payment_callback成功处理完相关交易订单后,系统会触发一个第三方回调动作。这一过程通过xc_do_action注册事件,使得第三方或外部系统可以通过动态钩子接收到订单关闭的通知。传递参数时,系统会将支付ID一并发送,确保信息完整。此动作采用Swoole的异步通知机制,将关闭消息传递给已挂载的处理方法,同时同步告知相关接口,确认订单已被彻底关闭。这种机制不仅提高了信息传递的效率,还确保了外部接口能够及时响应和处理订单关闭的相关信息。值得注意的是,系统在订单关闭成功和删除成功时都会进行同步下发,以保证外部系统能够迅速且准确地接收和处理这些重要的状态更新。
    5、在订单处理的业务逻辑中,xc_close_payment_order_hook的功能主要依赖于xc_close_payment_callback的结果。首先,该钩子会进行必要的效验操作,然后持续监听callback的返回结果。当callback返回code=1时,意味着在业务执行过程中出现了错误,这将导致整个操作被立即中断,并将错误信息反馈给上一级处理模块,以确保问题得到及时解决和处理。如果callback返回code=0,则表明相关业务已经顺利完成,此时可以继续进行后续的响应处理。在返回code=0的情况下,系统会首先通过xc_update_sql方法更新支付订单的记录,具体的更新逻辑包括将订单的state状态更改为close,即关闭状态。此外,系统还会写入一条meta信息,用以记录订单关闭的方式和关闭时间,以便后续查询和审计。这一系列操作不仅确保了订单处理的准确性和完整性,还为后续的业务分析提供了详尽的数据支持。
    6、在xc_close_payment_callback函数执行失败的情况下,会自动触发一个日志错误写入操作,详细记录此次失败的具体原因。这一机制确保了后续的运维人员能够通过日志分析问题根源,并采取相应的措施进行处理。日志写入是通过宫论日志函数xc_log_error_warn实现的,日志的唯一标识为close_payment_error。目前,该日志仅用于记录错误信息,并不会触发任何报警机制,但未来可以考虑添加警报功能,通过内置接口将消息通知发送给管理员。日志的格式设计得非常简洁,包括以下信息:报警时间——记录具体的年月日时分秒;id——标识出错的支付主键id,以便于确认是哪个订单出现了问题;error——详细描述错误信息,无论错误的起因是什么,均需返回相应的错误信息以便进一步分析和处理。
    7、在完成SQL的回调处理操作后,订单关闭的流程基本上已经接近尾声。系统此时会触发一个名为xc_close_payment_ok_hook()的额外事件,用于处理支付订单关闭成功后的业务逻辑。这个钩子函数需要提供一个用于识别和解析订单的id变量。在触发该事件时,系统将通过统一的订单查询方法获取相关的支付订单信息,并将查询结果保存到一个名为payment的数组中。后续所有处理所需的参数都将从这个数组中提取。为了避免内部事件阻塞进程,该方法采用了Swoole异步处理机制。在执行Swoole异步处理之前,系统会先检测环境是否支持Swoole处理,以确保流程能够顺利进行。通过这种设计,系统能够高效地管理订单关闭流程,提升整体运行效率和稳定性。
    8、在xc_close_payment_ok_hook中,目前会触发两个关键事件。首先,通过xc_do_action挂载注册事件的处理机制,允许第三方通过注册方法获取回调通知。这种设计使得订单关闭的消息可以被动态地转发至指定的函数,从而实现灵活的业务扩展和处理。由于订单关闭往往伴随着一系列的业务变动,因此确保关闭消息的及时传递至关重要。其次,该机制还会触发一个Redis计数器,用于记录发起付款但最终被关闭的订单数量。这个计数器支持区域性查询,能够提供本周、上月、今年、昨日等不同时间跨度的统计数据。通过这种方式,运维团队可以清晰地了解订单关闭的数量及其变化趋势,从而为后续的业务分析和决策提供有力的数据支持。
    9、在订单完成关闭操作后,对于使用微信支付(wxpay)或支付宝支付(alipay)这两种支付类型的订单,还需要进行额外的处理。具体来说,需要通过SDK远程关闭这些订单,并通知相应的支付服务商订单已被放弃。这一操作至关重要,因为如果不执行,可能会导致不符合支付标准的情况。例如,用户可能会长时间停留在支付页面未完成付款,当他们最终尝试付款时,原支付订单可能已被系统关闭,而支付服务商却未收到任何关闭通知,仍然允许付款,这可能导致用户在付款成功后发现订单早已关闭。因此,为了确保支付的安全性和可靠性,系统需要集成一种全新的方法来处理通过SDK下发的关闭通知,确保每个订单的关闭状态准确无误地传达给支付服务商。
    10、支付订单的关闭处理是通过 xc_close_payment_sdk_hook 方法来实现的,该方法需要传递两个参数:payment_order 和 pay_select。其中,payment_order 是服务商生成的唯一订单号,用于标识具体的支付订单;pay_select 用于指定支付方式,以确定是通过支付宝还是微信渠道进行关闭操作。由于该方法仅在关闭支付业务时才会被触发,因此无需通过统一订单获取支付信息,也不需要传递订单ID进行处理。在方法触发后,将利用 Swoole 进行异步处理,以避免阻塞关闭进程。在执行 Swoole 转发之前,会检查当前环境是否支持异步处理。如果环境不支持,则将采用同步处理方式以确保关闭流程的顺利进行。
    11、xc_close_payment_sdk_hook的(微信订单关闭)执行流程如下:初始化 SDK引用:通过 require_once xc_get_option('xc_sdk_composer'); 引入支付 SDK。 配置获取:调用 xc_payment_config_hook() 函数获取支付配置。 2. 微信支付订单关闭 条件判断:检查 $type 是否为 'wxpay'。 配置设置:使用 \Yansongda\Pay\Pay::config($config); 设置支付配置。 订单信息构建:创建 $order 数组,其中包含 out_trade_no(订单号)。 订单关闭: 调用 \Yansongda\Pay\Pay::wechat()->close($order); 关闭微信支付订单。 将返回的结果转为数组,并设置 code、msg 和 data 到 $result。 返回 $result。 异常处理: 捕获 GatewayException:返回网关异常信息。 捕获 InvalidArgumentException:返回参数异常信息。 捕获 InvalidSignException:返回签名异常信息。 捕获其他异常:返回其他异常信息。
  • 1
    小小乐lv.2实名用户
    2025年7月25日
    1、现已将通过xc_clean_redis_key发起的Redis清理匹配事件全面转为异步处理,以提高系统稳定性和效率。该事件涉及多个步骤,首先通过内部键位匹配和游标执行SCAN批量扫描来识别目标键值。当处理的数据量特别庞大时,这个过程可能需要较长的等待时间。匹配到的键值数组后,系统会利用管理对象执行$pipeline->exec()来完成删除操作。如果采用同步执行方式,当缓存键位达到数万条时,容易导致进程崩溃。因此,采用Swoole进行异步处理是至关重要的。在处理开始前,系统会先检测当前环境是否支持异步操作,以避免发生意外错误。这一改进有效防止了因同步处理大量数据导致的系统故障,为应用的稳定运行提供了保障。
    2、宫论每日固定计划组的任务xc_redis_day_remove在触发执行时,首先会进行一个关键的处理动作,即调用【xc_clean_redis_key('day:*');】。这一操作通过内置的清理机制,将系统和用户的每日限制数据进行全面清理。系统在设计时规定,所有涉及每日拦截的键名,无论是系统层面还是用户行为,都会以day:为前缀进行命名。因此,每天的00:01,这个固定计划会自动运行,重置前一天积累的限制数据,彻底清除昨日的记录,确保新的操作额度得以释放和更新。这种设计不仅简化了管理流程,还提高了系统的运行效率,使得每日的资源使用更加合理。
    3、xc_redis_day_remove在完成每日行为清理任务后,会针对有序集合(Sorted Set)进行相关处理。以下场景广泛应用了Redis有序集合的功能,包括但不限于:最新用户在线记录、每日转账金额统计、每日转账收款金额统计、每日订单退款金额统计、每日上传文件大小统计以及拍卖商品页面访问量统计等。在这些场景中,有序集合通常以成员的时间戳(如00:00)作为分值记录相关数据,后续通过排行榜页面可以按日、按周等形式展示对应的榜单记录,支持精确到个人的分数排名。为了保证排行榜数据的准确性以及系统性能,有序集合需要定期进行清理操作,移除过期或冗余的数据,从而确保统计结果的准确性和实时性,同时为后续的排名计算提供可靠的数据基础。
    4、新增了一个名为xc_delete_redis_group的方法,用于根据指定前缀批量删除Redis中的有序集合(Sorted Set)。这个方法需要传递一个$prefix参数,作为有序集合键名的前缀。由于有序集合在Redis中是通过键名进行管理的,因此我们引入了一个统一的清理机制,以提高执行效率,而不是逐个删除有序集合。该方法在触发后首先会通过xc_redis来初始化Redis对象,确保后续所有操作都通过这个对象进行。此外,还会将迭代器初始化为null,这是为了在执行do-while循环时做好准备,从而实现批量删除的功能。通过这种机制,能够更高效地管理和维护Redis中的有序集合,节省系统资源。
    5、xc_delete_redis_group的执行处理流程如下:初始化 Redis 连接: xc_redis() 函数被调用以获取 Redis 连接实例,假设这个函数已经正确配置并返回一个 Redis 客户端对象。 初始化变量: $iterator 被初始化为 null,用于控制 SCAN 命令的迭代。 $keysToDelete 是一个空数组,用来存储所有待删除的键名。 使用 SCAN 命令获取键名: 在 do-while 循环中,使用 $redis->scan($iterator, $prefix . '*') 来获取所有以 $prefix 开头的键名。 SCAN 命令会返回一部分匹配的键名,并更新 $iterator,直到 $iterator 为 0 时停止。 每次 SCAN 获取的键名都合并到 $keysToDelete 数组中。 检查是否有键需要删除: 如果 $keysToDelete 数组不为空,表示有键需要删除。 进入 Pipeline 模式: 调用 $redis->pipeline() 进入 Pipeline 模式,以便批量执行 Redis 命令。 批量删除键: 使用 foreach 循环遍历 $keysToDelete 数组,逐个将 DEL 命令添加到 Pipeline 中。 执行 Pipeline: 调用 $redis->exec() 执行 Pipeline 中的所有命令,从而批量删除所有指定的键。 关闭 Redis 连接: 调用 close_redis() 关闭 Redis 连接,确保资源的正确释放。
    6、在通过 xc_redis_day_remove 方法触发有序集合清理操作时,系统会依据当前的时间对不同时间段的有序集合排行榜进行清理。默认情况下,系统会调用 delete_redis_group('sortedset:day_') 来清理当天的有序集合排行榜,这个操作用于移除当天的所有统计数据。接着,系统会检查当前是否为周一,通过 date('N') == 1 来进行判断,如果是周一,则执行 delete_redis_group('sortedset:week_'),以清理每周的有序集合排行榜。随后,系统会通过 date('j') == 1 判断是否为每月的第一天,如果条件满足,则调用 delete_redis_group('sortedset:moon_') 清理月度排行榜。同样,系统还会检查是否为1月1日,即通过 date('m') == 1 && date('j') == 1 来进行判断,如果是新年的第一天,则执行 delete_redis_group('sortedset:year_'),以清理年度排行榜。在完成上述所有清理操作后,系统将通过 close_redis 方法关闭 Redis 连接,以确保资源的合理释放和系统的稳定运行。
    7、在宫论的订单支付系统中,订单支付状态被细分为四种:待支付、已支付、已过期以及已退款。其中,"已过期"状态专指订单超过预设时间限制后未支付的情况。不同类型的订单有各自不同的时间限制,例如,淘货订单要求在5分钟内完成支付,否则订单将自动释放;而拍卖订单则允许长达24小时的支付时间,超过此期限未支付则会被取消。这些时间限制需要根据后台配置进行灵活调整。在构建支付订单时,系统会提前将最终截止时间记录在close字段中,以确保在规定时间内完成支付。为了维护订单的有效性并防止安全隐患和订单释放问题,系统引入了一个名为xc_corn_close_payment的任务调度机制。这一机制负责定期检查和处理过期订单,以保证支付流程的正常运作和用户体验的安全性。通过这样的安排,系统能够及时识别和处理过期订单,确保支付过程的顺利进行。
    8、在xc_corn_close_payment任务的设定中,该任务属于主副锁计划组,每隔5分钟(300秒)会由系统自动触发执行。任务启动时会进行两个关键的初始化动作:首先,执行xc_task_start_callback($task_name)回调,这是任务定时执行前的必要步骤,主要用于拦截和处理并发安全问题。目前,这一回调主要通过redis的安全锁机制来确保任务执行的安全性和可靠性。其次,初始化result数组,该数组在整个任务执行过程中用于返回标准的数组结构,包含主要参数code和msg。code参数代表任务的处理状态,指示任务是否成功完成,0表示成功,1表示中断。msg参数则用于返回具体的错误信息,以便更好地了解任务执行中的问题。
    9、在完成初始化动作后,xc_corn_close_payment会启动一个wpdb查询以处理支付订单数据表【xc_pay】。该查询的目标是筛选出状态为wait_pay(等待支付)的订单,并且其关闭时间小于当前时间(使用current_time('mysql')函数获取)。如果找到符合条件的记录,则会通过get_results方法进行返回处理,并使用ARRAY_A参数确保返回的数据为数组格式而非对象格式。为了避免SQL注入风险,查询过程中采用prepare方法对参数进行过滤处理。如果查询未能找到符合条件的记录,则此次任务将被跳过,不执行任何进一步的操作。这一过程确保了支付订单的状态及时更新,同时通过安全的查询方法维护数据的完整性。
    10、新增了一个名为xc_close_payment_order_hook的HOOK,它专门负责处理待支付的交易订单关闭操作。这个HOOK需要传递两个关键变量参数:id和type。其中,id是支付订单的唯一标识符,通过这个主键ID可以读取相关记录,获取原始支付订单的信息。type则指明了关闭订单的来源,它可能是系统任务(task)、付款用户(user_id)或卖家用户(seller)。这两个参数都是不可或缺的,尤其是type,因为订单关闭的来源不同,其业务逻辑处理方式也各不相同。因此,在设计和使用这个HOOK时,确保正确传递这两个参数至关重要,以便准确执行相应的关闭操作。
    11、在xc_close_payment_order_hook的初始阶段,进行了以下几项关键操作:首先,初始化了一个空的result数组,这是遵循标准HOOK返回数组的规范所必需的准备步骤。返回参数是由固定值code与msg组合而成。接下来,我们实施了上锁保护处理逻辑,通过使用xc_lock对【'payment_callback:' . $id】进行锁定,锁定有效期为30秒。这种锁定机制不会主动释放,而是会在到期后自动关闭,确保在处理订单业务时,任务不会在执行过程中被二次触发,从而有效地防止了潜在风险。最后,我们通过内置的统一订单方法进行订单查询,以获取与id对应的支付信息。这个查询过程禁用了缓存,以避免缓存结果可能导致的数据差异。如果查询失败,则会返回相应的错误信息,并终止后续的执行步骤。这一系列措施旨在确保订单处理的准确性和安全性。
  • 查看全文
  • 查看作者
  • 文章测试

    江西·萍乡
  • 4
  • 54
  • 0
  • 14.27w
  • 咸鱼梦想小可鸭鸭小小乐学藏官方

    请登录之后再进行评论

    登录
  • 0
    欣然lv.1
    最低多少钱?最低多少钱?
  • 0
    咸鱼梦想lv.2实名用户
    测试看看最低多少钱?
  • 0
    咸鱼梦想lv.2实名用户
    内容测试出
  • 查看全文
  • 查看作者
  • 鉴定师入驻协议

    欢迎使用宫论APP鉴定师入驻申请功能,本协议主要阐述您申请成为相关领域鉴定师的相关的权利和义务,请您务必仔细阅读。一、概述 1、本协议内容包括协议正文及所有宫论已经发布或将来可能发布的关于鉴定师入驻。所有规则为本协议不可分割的一部分,与协议正文具有同...
  • 学藏官方 学藏官方
  • 3
  • 50
  • 1.7k
  • 官网公告
  • 2023-03-20 09:21 电脑端
  • 查看全文
  • 查看作者
  • 宫论藏品寄售协议

    欢迎使用宫论App藏品寄售申请功能,本协议主要阐述您作为藏品持宝人相关的权利和义务,请您务必仔细阅读。一、概述 1、本协议内容包括协议正文及所有宫论已经发布或将来可能发布的关于藏品寄售的规则。所有规则为本协议不可分割的一部分,与协议正文具有同等法律效...
  • 学藏官方 学藏官方
  • 1
  • 1
  • 1.8k
  • 官网公告
  • 2023-03-17 08:58 电脑端
  • 查看全文
  • 查看作者
  • 藏品回收申请协议

    欢迎使用宫论APP藏品回收功能,本协议主要阐述您作为藏品持宝人相关的权利和义务,请您务必仔细阅读。一、概述 1、本协议内容包括协议正文及所有宫论已经发布或将来可能发布的关于藏品回收的规则。所有规则为本协议不可分割的一部分,与协议正文具有同等法律效力。...
  • 学藏官方 学藏官方
  • 1
  • 1
  • 1.6k
  • 官网公告
  • 2023-03-13 09:29 电脑端
  • 查看全文
  • 查看作者
  • 宫论藏品鉴定协议

    欢迎使用宫论APP鉴赏功能,本协议主要阐述您作为藏品持宝人相关的权利和义务,请您务必仔细阅读。一、概述 1、本协议内容包括协议正文及所有宫论已经发布或将来可能发布的各类规则。所有规则为本协议不可分割的一部分,与协议正文具有同等法律效力。 2...
  • 学藏官方 学藏官方
  • 1
  • 0
  • 1.6k
  • 官网公告
  • 2023-03-11 15:17 电脑端
  • 查看全文
  • 查看作者
  • 淘货发布协议

    淘货发布协议在宫论APP为了能够约束好每个卖家发布商品,也制定了统一的商品发布规范,如果各位也想要开淘宝店铺,那就需要好好去了解一下宫论APP商品的发布规范。第一章 概述第一条【适用范围】适用于在宫论APP发布商品的卖家。第二条【效力级别】本规范已有规定的,适...
  • 学藏官方 学藏官方
  • 2
  • 0
  • 1.7k
  • 官网公告
  • 2023-03-09 15:33 电脑端
  • 查看全文
  • 查看作者
  • 宫论提现协议

    宫论提现协议 《宫论钱包提现协议》(以下简称“本协议”)适用于所有在宫论平台进行提现的用户(以下或称“您”)。本协议被视为《宫论用户服务条款》的补充协议,是其不可分割的组成部分,与其构成统一整体。本协议与《宫论用户服务条款》内容存在冲突的,以本协议为...
  • 学藏官方 学藏官方
  • 2
  • 0
  • 1.6k
  • 官网公告
  • 2023-03-09 11:44 电脑端
  • 查看全文
  • 查看作者
  • 消费者保障服务协议

    本协议由您与济南谋佐科技有限公司共同缔结,本协议具有合同效力。本协议中协议双方合称协议方,济南谋佐科技公司在本协议中亦称为“宫论”。一、协议内容及生效1、本协议内容包括协议正文及所有宫论已经发布或后续发布的相关的规则与协议。前述规则与协议为本协议不可分割的组成...
  • 学藏官方 学藏官方
  • 2
  • 0
  • 1.4k
  • 官网公告
  • 2023-02-25 20:27 电脑端
  • 查看全文
  • 查看作者
  • 店铺保证金协议

    一、什么是店铺保证金?店铺保证金是如果涉及理赔、违规处罚等情况时,可利用店铺保证金进行支付;如没有前述情况,店铺保证金可全额退回的一种机制。二、为什么要缴纳店铺保证金?(1)重点强调-店铺无违规情况认证有效期内且缴纳店铺保证金后下个整点,可搜索到店铺,若未缴纳...
  • 学藏官方 学藏官方
  • 1
  • 0
  • 1.6k
  • 官网公告
  • 2023-02-25 20:20 电脑端
  • 查看全文
  • 查看作者
  • 宫论特殊类目经营资质

    尊敬的宫论商家:为了保障宫论类目健康、提升交易体验、维护商家及买家利益,现对于以下类目入驻认证需提供对应资质:类目店铺类型需要资质陨石骨牙-骨石企业/个人①与平台店铺认证主体信息一致的水野生保护动物经营利用许可证及副本(如许可证上未列举所有可经营物种明细的需额...
  • 学藏官方 学藏官方
  • 1
  • 0
  • 1.6k
  • 官网公告
  • 2023-02-25 20:16 电脑端
  • 单栏布局 列表样式:矩状 侧栏位置: