接口发送回调通知怎么实现如果接收方没有返回指定字符串则在半小时内阶梯性重发

接口发送回调通知怎么实现如果接收方没有返回指定字符串则在半小时内阶梯性重发,譬如第一次重发间隔5分钟 第二次间隔10分钟 第三次间隔15分钟。这样算下来30分钟重发三次。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

我理解的是类似微信支付的支付通知回调这种功能吧,微信商户平台支付成功后会通知服务器支付成功,如果服务器没有返回正确的内容,微信商户平台就会通过你说的这种阶梯性重发,我觉得实现起来不是很难,就是利用消息队列。

创建一个Job,假设命名为SendPaySuccess,如果是通知的话,可以直接创建通知,就不用创建Job,因为通知也可以加入到消息队列,大致原理就是在Job里面判断是否成功,如果没有成功就再次调用自己并延时

示例Job:

class SendPaySuccess implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * 延迟时间
     * @var int $delayMinutes
     */
    private $delayMinutes;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(int $delayMinutes = 5)
    {
        $this->delayMinutes = $delayMinutes;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // 发送回调通知...

        // 判断返回的结果,如果未成功,则重新调用本Job
        if (!$success) {
            SendPaySuccess::dispatch($this->delayMinutes + 5)->delay(now()->addMinutes($this->delayMinutes));
            // 通知类似
            Notification::send($user, (new SendPaySuccessNotification($this->delayMinutes + 5))->delay(now()->addMinutes($this->delayMinutes)));
        }
    }
}
5年前 评论
讨论数量: 2

我理解的是类似微信支付的支付通知回调这种功能吧,微信商户平台支付成功后会通知服务器支付成功,如果服务器没有返回正确的内容,微信商户平台就会通过你说的这种阶梯性重发,我觉得实现起来不是很难,就是利用消息队列。

创建一个Job,假设命名为SendPaySuccess,如果是通知的话,可以直接创建通知,就不用创建Job,因为通知也可以加入到消息队列,大致原理就是在Job里面判断是否成功,如果没有成功就再次调用自己并延时

示例Job:

class SendPaySuccess implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * 延迟时间
     * @var int $delayMinutes
     */
    private $delayMinutes;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(int $delayMinutes = 5)
    {
        $this->delayMinutes = $delayMinutes;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // 发送回调通知...

        // 判断返回的结果,如果未成功,则重新调用本Job
        if (!$success) {
            SendPaySuccess::dispatch($this->delayMinutes + 5)->delay(now()->addMinutes($this->delayMinutes));
            // 通知类似
            Notification::send($user, (new SendPaySuccessNotification($this->delayMinutes + 5))->delay(now()->addMinutes($this->delayMinutes)));
        }
    }
}
5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!