Sample code for 30+ languages & platforms
PureBasic

Shopware 6 - Get Reviews of a Product

See more Shopware 6 Examples

Get the reviews of a single product (specified by product id).

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example assumes the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Sends the following POST

    ; POST /store-api/v1/product/07afcfeb9725469cacb0010000731838/reviews
    ; {   
    ;     "page": 1,
    ;     "limit": 3,
    ;     "aggregations": [
    ;         { "type": "avg", "field": "points", "name": "rating-average"}
    ;     ],
    ;     "includes": {
    ;         "product_review": ["id", "content", "title", "createdAt", "points"]
    ;     }
    ; }

    ; Use this online tool to generate code from sample JSON:
    ; Generate Code to Create JSON

    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckUpdateInt(json,"page",1)
    CkJsonObject::ckUpdateInt(json,"limit",3)
    CkJsonObject::ckUpdateString(json,"aggregations[0].type","avg")
    CkJsonObject::ckUpdateString(json,"aggregations[0].field","points")
    CkJsonObject::ckUpdateString(json,"aggregations[0].name","rating-average")
    CkJsonObject::ckUpdateString(json,"includes.product_review[0]","id")
    CkJsonObject::ckUpdateString(json,"includes.product_review[1]","content")
    CkJsonObject::ckUpdateString(json,"includes.product_review[2]","title")
    CkJsonObject::ckUpdateString(json,"includes.product_review[3]","createdAt")
    CkJsonObject::ckUpdateString(json,"includes.product_review[4]","points")

    ; This request simply authenticates with the sw-access-key you can interactively copy from your 
    ; sales channel in the Shopware 6 administration web portal.
    ; We do NOT use OAuth2 for Store API requests.
    CkHttp::ckSetRequestHeader(http,"sw-access-key","<sales-channel-api-access-key>")

    CkHttp::ckSetUrlVar(http,"id","07afcfeb9725469cacb0010000731838")

    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckHttpJson(http,"POST","https://my-shopware-6-shop.de/store-api/v3/product/{$id}/reviews",json,"application/json",resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(json)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    sbResponseBody.i = CkStringBuilder::ckCreate()
    If sbResponseBody.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHttpResponse::ckGetBodySb(resp,sbResponseBody)
    jResp.i = CkJsonObject::ckCreate()
    If jResp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoadSb(jResp,sbResponseBody)
    CkJsonObject::setCkEmitCompact(jResp, 0)

    Debug "Response Body:"
    Debug CkJsonObject::ckEmit(jResp)

    ; If we get a 401 response, it may be that our access token expired and we need to fetch a new one.
    respStatusCode.i = CkHttpResponse::ckStatusCode(resp)
    Debug "Response Status Code = " + Str(respStatusCode)
    If respStatusCode >= 400
        Debug "Response Header:"
        Debug CkHttpResponse::ckHeader(resp)
        Debug "Failed."
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(json)
        CkHttpResponse::ckDispose(resp)
        CkStringBuilder::ckDispose(sbResponseBody)
        CkJsonObject::ckDispose(jResp)
        ProcedureReturn
    EndIf

    ; Sample JSON response:
    ; (Sample code for parsing the JSON response is shown below)

    ; {
    ;     "total": 3,
    ;     "aggregations": {
    ;         "rating-average": {
    ;             "avg": 5,
    ;             "apiAlias": "rating-average_aggregation"
    ;         }
    ;     },
    ;     "elements": [
    ;         {
    ;             "points": 5,
    ;             "content": "Lorem ipsum dolor ... sit amet.",
    ;             "title": "Really cool product",
    ;             "createdAt": "2020-08-27T09:49:48.776+00:00",
    ;             "id": "0fa91ce3e96a4bc2be4bd9ce752c3425",
    ;             "apiAlias": "product_review"
    ;         },
    ;         {
    ;             "points": 5,
    ;             "content": "Lorem ipsum dolor ... sit amet.",
    ;             "title": "Really cool product",
    ;             "createdAt": "2020-08-27T09:49:48.776+00:00",
    ;             "id": "211c5785d293434c9ef3c624c675f545",
    ;             "apiAlias": "product_review"
    ;         },
    ;         {
    ;             "points": 5,
    ;             "content": "Lorem ipsum dolor ... sit amet.",
    ;             "title": "Really cool product",
    ;             "createdAt": "2020-08-27T09:49:48.776+00:00",
    ;             "id": "2fbb5fe2e29a4d70aa5854ce7ce3e20b",
    ;             "apiAlias": "product_review"
    ;         }
    ;     ],
    ;     "apiAlias": "dal_entity_search_result"
    ; }

    ; Sample code for parsing the JSON response...
    ; Use the following online tool to generate parsing code from sample JSON:
    ; Generate Parsing Code from JSON

    points.i
    content.s
    title.s
    createdAt.s
    id.s

    total.i = CkJsonObject::ckIntOf(jResp,"total")
    aggregationsRating_averageAvg.i = CkJsonObject::ckIntOf(jResp,"aggregations.rating-average.avg")
    aggregationsRating_averageApiAlias.s = CkJsonObject::ckStringOf(jResp,"aggregations.rating-average.apiAlias")
    apiAlias.s = CkJsonObject::ckStringOf(jResp,"apiAlias")
    i.i = 0
    count_i.i = CkJsonObject::ckSizeOfArray(jResp,"elements")
    While i < count_i
        CkJsonObject::setCkI(jResp, i)
        points = CkJsonObject::ckIntOf(jResp,"elements[i].points")
        content = CkJsonObject::ckStringOf(jResp,"elements[i].content")
        title = CkJsonObject::ckStringOf(jResp,"elements[i].title")
        createdAt = CkJsonObject::ckStringOf(jResp,"elements[i].createdAt")
        id = CkJsonObject::ckStringOf(jResp,"elements[i].id")
        apiAlias = CkJsonObject::ckStringOf(jResp,"elements[i].apiAlias")
        i = i + 1
    Wend


    CkHttp::ckDispose(http)
    CkJsonObject::ckDispose(json)
    CkHttpResponse::ckDispose(resp)
    CkStringBuilder::ckDispose(sbResponseBody)
    CkJsonObject::ckDispose(jResp)


    ProcedureReturn
EndProcedure