如何生成订单确认链接



这是我的OrderController.php,负责向下订单的人发送一封包含订单详细信息的电子邮件。

<?php
namespace AppHttpControllers;
use AppModelsOrder;
use IlluminateHttpRequest;
use IlluminateSupportFacadesMail;
class OrderController extends Controller
{
public function submitOrder(Request $request)
{
$credentials = $request->validate([
'email' => ['required', 'string', 'email'],
'name' => ['required', 'string', 'max:255'],
'order' => ['required'],
'total' => ['required', 'numeric'],
'status_id' => ['required'],
]);
$order = Order::create($credentials);
Mail::to($credentials['email'])->send(new AppMailsendOrderConfirmation($order));
return response([
'msg' => 'Order submitted successfully',
'order' => $order,
]);
}
}

我没有任何用户帐户。我想在电子邮件中生成一个URL,这样一旦用户单击它,它就会将订单的status_id设置为已确认。我试着看看Laravel是如何通过电子邮件确认用户注册的,但没有成功。

感谢您的帮助。

首先,我建议您创建一个uuid并添加到订单详细信息中,因为用户没有帐户我就是这样做的。

function create_uuid()
{
$nodeProvider = new RandomNodeProvider();
$clockSequence = 16383;
return Uuid::uuid1($nodeProvider->getNode(), $clockSequence);
}

记住包括这些以及

use RamseyUuidProviderNodeRandomNodeProvider;
use RamseyUuidUuid;

然后使用它创建一个唯一的url,其中包含用户电子邮件、uuid令牌以及可能的过期时间(可能不是必需的(

public function createVerificationUrl($email, $order_id)
{
$dataToken = ['email' => $email, 'id' => $order_id, 'token' => $this->create_uuid()];
$crypted = Crypt::encrypt($dataToken);
$url = env('APP_URL') . '/verify-user/' . $type . '?verify=' . $crypted;
return $url;
}

下一步是在收到时验证发送到电子邮件的令牌

public function verifyToken($verifyToken)
{
$decrypt = Crypt::decrypt($verifyToken);
$verify = Order::where($decrypt);
if ($verify->exists()) {
$verify->update(['status_id' => 'whatever_id'])
}
}

经过一些调整,这应该会变魔术!

最新更新