我对WooCommerce很陌生,我无法弄清楚这一点。 我正在创建一个自定义API(根据用户要求),我让用户使用这样的发布请求登录Laravel:
public function login (Request $req)
{
global $woocommerce;
$v = \Validator::make($req->all(), [
'username' => 'required|max:255',
'password' => 'required|max:255',
]);
if ($v->passes())
{
$user = wp_signon(['user_login'=>$req->input("username"),"user_password"=>$req->input("password")],true);
if (is_wp_error($user) || !is_user_logged_in())
{
return response(['success' => false, 'message' => "Invalid Username or Password."], 401);
}
$key = md5($user->ID . $user->user_login. (time() + 7200) . $user->email);
$cookie = wp_generate_auth_cookie($user->ID, (time() + 7200), "auth", $key);
$store = [
'user_login' => $user->data->user_login,
'user_id' => $user->data->ID,
'user_nicename' => $user->data->user_nicename,
'user_email' => $user->data->user_email,
'user_url' => $user->data->user_url,
'user_registered' => $user->data->user_registered,
'display_name' => $user->data->display_name,
];
Session::push($cookie, $store);
WC()->cart->set_session();
return response(['auth_token' => $cookie, 'success' => true, 'cart'=>WC()->cart->get_cart_for_session(), 'timeout' => 7200], 200);
}
return response(['success' => false, 'message' => "Required field(s) missing."], 401);
}
现在,每当我将产品添加到购物车时,它只会替换以前的值,并且只有一个商品会添加到购物车中。当我登录我的WordPress网站并访问购物车时,它显示错误“未定义的索引”,而购物车是空的。这是将项目添加到购物车的代码:
public function add($productId)
{
//WC()->session->set_customer_session_cookie(true);
$cart_id = WC()->cart->generate_cart_id( $productId );
$prod_in_cart = WC()->cart->find_product_in_cart( $cart_id );
// Add the product only if it's not in the cart already
if( ! $prod_in_cart )
{
WC()->cart->add_to_cart($productId,1,0,null,null);
}
return response([
'user'=>WC()->session->get_customer_id(),
'cart'=>WC()->cart,
]);
}
我知道我做错了什么但不知道是什么。任何帮助将不胜感激。
修改
如果它有助于我使用WooCommerce版本2.3
答案 0 :(得分:0)
您已将数量硬编码为1.以下是功能:
WC()->cart->add_to_cart($productId,1,0,null,null);
在此功能中,第二个参数是数量。如果你愿意,可以提高数量。
$qty = 2;
WC()->cart->add_to_cart($productId,$qty,0,null,null);
答案 1 :(得分:0)
据我见过您的代码,您正在使用两个不同的会话
WC()->cart->set_session();
& WC()->session->set_customer_session_cookie(true)
I.E用户登录后,第二个用户将产品添加到购物车。您是否在没有登录的情况下检查是否完美无缺?其他可能的问题是主题集成或者你要调试模式 ON 的任何一种方法都可以帮到你解决问题的地方。