【问题标题】:Android-Cant create order using woocommerce apiAndroid-无法使用 woocommerce api 创建订单
【发布时间】:2017-04-11 14:12:32
【问题描述】:

无法使用 WooCommerce API 创建订单

android 代码(okhttp)是

RequestBody formBody = new MultipartBody.Builder()
        .setType(MultipartBody.FORM)
        .addFormDataPart(oauthConsumerKeyString, oauthConsumerKeyStringValue)
        .addFormDataPart(oauthNonceKeyString, oauthNonceKeyValue)
        .addFormDataPart(oauthSignatureMethodKey, oauthSignatureMethodKeyValue)
        .addFormDataPart(oauthTimestampKeyString, oauthTimeStampKeyStringValue)
        .addFormDataPart("oauth_signature", signature)
        .addFormDataPart("orders", postDataString)
        .build();
Request request = new Request.Builder()
        .url(urlOrders)
        .post(formBody)
        .build();

注意部分

addFormDataPart("orders", postDataString).

如果删除此部分,则创建的订单不包含地址、用户信息、价格、产品 ID 等详细信息。所以所有参数都可以正常工作。

现在上面部分不省略时,订单不会创建,错误显示为:

Invalid signature - provided signature does not match.

变量postDataString包含以下JSON数据

{
    "payment_method": "bacs",
    "payment_method_title": "Direct Bank Transfer",
    "set_paid": true,
    "billing": {
        "first_name": "John",
        "last_name": "Doe",
        "address_1": "969 Market",
        "address_2": "",
        "city": "San Francisco",
        "state": "CA",
        "postcode": "94103",
        "country": "US",
        "email": "john.doe@example.com",
        "phone": "(555) 555-5555"
    },
    "shipping": {
        "first_name": "John",
        "last_name": "Doe",
        "address_1": "969 Market",
        "address_2": "",
        "city": "San Francisco",
        "state": "CA",
        "postcode": "94103",
        "country": "US"
    },
    "line_items": [
        {
            "product_id": "341",
            "quantity": "1"
        },
        {
            "product_id": "339",
            "quantity": "1"
        }
    ],
    "shipping_lines": {
        "method_id": "flat_rate",
        "method_title": "Flat Rate",
        "total": 10
    }
}

这段代码有什么问题。 谢谢你的时间。 如有任何疑问,请发表评论。

【问题讨论】:

    标签: java android json woocommerce woocommerce-rest-api


    【解决方案1】:

    正在写这个答案。

    注意:- 到目前为止,已经在 stackoverflow 上看到了很多这样的问题,但没有提供任何答案。许多人已经获得了风滚草。:)

    让我们创建一个优惠券资源。

    下面的方法无论是创建优惠券还是订单都是一样的。以优惠券为例,因为它有一个简短的json参数。

    要发布的优惠券json是

    {"code":"asdfas"}
    

    创建优惠券资源的最小参数是“code”参数。其他参数是可选的。所以我使用最小的json来创建优惠券。

    网址应为

    http://pro.....epo.net/scoop/wp-json/wc/v2/coupons?oauth_consumer_key=ck_2f53925cb6d2c8.....f118d01ed80e&oauth_timestamp=1492154063&oauth_nonce=JqYIfq&oauth_signature_method=HMAC-SHA1&oauth_signature=FC1lJ8Vzw.....B86UGlAoWA=

    你们中的许多可以列出资源的人也可能会创建正确的签名。所以这里不记录签名的创建。可以看看那里的许多其他资源。

    现在获取 json 媒体类型

    MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    

    现在是最终代码(我正在使用 okhttp3)

    okhttp3.RequestBody body = RequestBody.create(JSON, dataCouponJsonObject.toString());
    okhttp3.Request request = new okhttp3.Request.Builder().url(the url given above)
                    .post(body)
                    .build();
    response = client.newCall(request).execute();
    

    然后瞧!资源被创建:)

    注意:2天过去了,然后得出了这个答案。 如有任何疑问,请发表评论。

    【讨论】:

      猜你喜欢
      • 2017-09-22
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      相关资源
      最近更新 更多