POST 请求 RESTful CART API 期间出现意外响应代码 500
Unexpected response code 500 during POST request to RESTful CART API
我目前正在为 Woocommerce 使用 RESTful API 将商品添加到购物车。根据 API 的文档,它应该接受 "product_id" 和 "quantity" 作为参数,我在其中使用了以下代码:
JSONObject addcart = new JSONObject();
try {
addcart.put("product_id", 28);
addcart.put("quantity", 1);
Log.e("params", addcart.toString());
} catch (JSONException e) {
e.printStackTrace();
}
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, domain+api,addcart,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Toast.makeText(OrderActivity.this, response.toString(), Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(OrderActivity.this, error.toString(), Toast.LENGTH_LONG).show();
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Content-Type", "application/json");
return params;
}
};
Controller.getPermission().addToRequestQueue(request);
}
但是我在执行 POST 请求时收到此错误消息:
E/params: {"product_id":28,"quantity":1}
E/Volley: [365] BasicNetwork.performRequest: Unexpected response code 500 for http://domain+api
产品未添加到购物车,通过 GET 请求得到的响应是 "Cart is empty!"。我究竟做错了什么?我很确定 API 有效,但我不明白为什么我的 POST 请求没有通过并不断收到错误 500。有人能给我一些建议吗?
(如果有人想知道文档:https://seb86.github.io/WooCommerce-Cart-REST-API-Docs/?shell#add-to-cart)
我使用下面的代码解决了这个问题:
StringRequest addrequest = new StringRequest(Request.Method.POST, "http://domainname/test/wp-json/wc/v2/cart/add?product_id=28&quantity=14" ,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(OrderActivity.this, response, Toast.LENGTH_LONG).show();
Log.e("Response", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(OrderActivity.this, error.toString(), Toast.LENGTH_LONG).show();
Log.e("Error", error.toString());
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
boolean dbempty = helper.checklogin();
if (!dbempty) {
params.put("Authorization", "Bearer " + helper.getToken());
}
params.put("Content-Type", "application/json");
return params;
}
};
Controller.getPermission().addToRequestQueue(addrequest);
我收到了以下字符串请求响应,并且该项目确实已添加到我的本地主机网站上:
E/Response: <br />
<b>Warning</b>: is_numeric() expects exactly 1 parameter, 3 given in <b>C:\xampp\htdocs\test\wp-includes\rest-api\class-wp-rest-request.php</b> on line <b>858</b><br />
<br />
<b>Warning</b>: is_numeric() expects exactly 1 parameter, 3 given in <b>C:\xampp\htdocs\test\wp-includes\rest-api\class-wp-rest-request.php</b> on line <b>858</b><br />
{"key":"33e75ff09dd601bbe69f351039152189","product_id":28,"variation_id":0,"variation":[],"quantity":14,"line_tax_data":{"subtotal":[],"total":[]},"line_subtotal":979.86,"line_subtotal_tax":0,"line_total":979.86,"line_tax":0,"data":{}}
我曾尝试过其他 POST 方法字符串请求,我收到了完全相同的警告消息并且 POST 请求没有通过,但是当我这样做时它起作用了尽管我仍然收到错误信息。但希望这可以帮助其他人使用相同的 API 解决同样的问题。
注意:我添加的新 header 由 Authorization key 和 Bearer Token 值组成,目的是为每个用户提供他们自己的唯一 CART,这样他们就不会共享同一个购物车。这不是解决问题所需要的。
我目前正在为 Woocommerce 使用 RESTful API 将商品添加到购物车。根据 API 的文档,它应该接受 "product_id" 和 "quantity" 作为参数,我在其中使用了以下代码:
JSONObject addcart = new JSONObject();
try {
addcart.put("product_id", 28);
addcart.put("quantity", 1);
Log.e("params", addcart.toString());
} catch (JSONException e) {
e.printStackTrace();
}
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, domain+api,addcart,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Toast.makeText(OrderActivity.this, response.toString(), Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(OrderActivity.this, error.toString(), Toast.LENGTH_LONG).show();
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Content-Type", "application/json");
return params;
}
};
Controller.getPermission().addToRequestQueue(request);
}
但是我在执行 POST 请求时收到此错误消息:
E/params: {"product_id":28,"quantity":1}
E/Volley: [365] BasicNetwork.performRequest: Unexpected response code 500 for http://domain+api
产品未添加到购物车,通过 GET 请求得到的响应是 "Cart is empty!"。我究竟做错了什么?我很确定 API 有效,但我不明白为什么我的 POST 请求没有通过并不断收到错误 500。有人能给我一些建议吗?
(如果有人想知道文档:https://seb86.github.io/WooCommerce-Cart-REST-API-Docs/?shell#add-to-cart)
我使用下面的代码解决了这个问题:
StringRequest addrequest = new StringRequest(Request.Method.POST, "http://domainname/test/wp-json/wc/v2/cart/add?product_id=28&quantity=14" ,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(OrderActivity.this, response, Toast.LENGTH_LONG).show();
Log.e("Response", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(OrderActivity.this, error.toString(), Toast.LENGTH_LONG).show();
Log.e("Error", error.toString());
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
boolean dbempty = helper.checklogin();
if (!dbempty) {
params.put("Authorization", "Bearer " + helper.getToken());
}
params.put("Content-Type", "application/json");
return params;
}
};
Controller.getPermission().addToRequestQueue(addrequest);
我收到了以下字符串请求响应,并且该项目确实已添加到我的本地主机网站上:
E/Response: <br />
<b>Warning</b>: is_numeric() expects exactly 1 parameter, 3 given in <b>C:\xampp\htdocs\test\wp-includes\rest-api\class-wp-rest-request.php</b> on line <b>858</b><br />
<br />
<b>Warning</b>: is_numeric() expects exactly 1 parameter, 3 given in <b>C:\xampp\htdocs\test\wp-includes\rest-api\class-wp-rest-request.php</b> on line <b>858</b><br />
{"key":"33e75ff09dd601bbe69f351039152189","product_id":28,"variation_id":0,"variation":[],"quantity":14,"line_tax_data":{"subtotal":[],"total":[]},"line_subtotal":979.86,"line_subtotal_tax":0,"line_total":979.86,"line_tax":0,"data":{}}
我曾尝试过其他 POST 方法字符串请求,我收到了完全相同的警告消息并且 POST 请求没有通过,但是当我这样做时它起作用了尽管我仍然收到错误信息。但希望这可以帮助其他人使用相同的 API 解决同样的问题。
注意:我添加的新 header 由 Authorization key 和 Bearer Token 值组成,目的是为每个用户提供他们自己的唯一 CART,这样他们就不会共享同一个购物车。这不是解决问题所需要的。