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