pricing plan webhook, JSON.parse(body) errors on collection insertion

All I want is to capture the siteMember { contact.Email[0]} and plan name { paidplan.title } in case of “Plan Assigned” and “Plan Cancelled”

My webhook url:
https://lioonnize.wixsite.com/cfa-jun/_functions-dev/orderedPlan
https://lioonnize.wixsite.com/cfa-jun/_functions-dev/cancelPlan


export function post_orderedPlan ( request ) {
let options = {
“headers” : {
“Content-Type” : “application/json”
}
};

// get the request body
return request . body . text ()
. then (( body ) => {
/* let planInfo =
{
“title”: “ZERO value plan cancelled”,
“data”: JSON.parse(body),
“planName”: JSON.parse(body.data.paidplan.title)
}*/

        console . log ( JSON . parse ( body )); 

return wixData . insert ( “pricePlan” , JSON . parse ( body ));

})
. then (( results ) => {
options . body = {
“inserted” : results
};
return created ( options );
})
// something went wrong
. catch (( error ) => {
options . body = {
“error” : error
};
return serverError ( options );
});
}


Collection defined:

Site Monitor: Throwing error:

ps: I have put my vote to capture onplanCancelled event

https://www.wix.com/velo/requested-feature/onplancancelled-event-required-for-wix-paid-plans

folks,
any pointers…how to capture …
siteMember { contact.Email[0]} and plan name { paidplan.title }

Hurray!! Finally I cracked it…capturing JSON [Object,Object]
will share my piece of code…so it can help others…

For easy debugging I tested for onPlanOrdered.
Same piece of code will work for onplanCancelled.

JSON Object we get from onPlanOrdered
{
“data”: {
“paidplan.priceamount”: “0”,
“paidplan.validuntil”: “Until canceled”,
“contact.Address[0].Country”: “IN”,
“paidplan.paymentmethod”: “Online”,
“paidplan.orderid”: “4bc6031a-0240-4800-abd7-72bc658eb16a”,
“paidplan.description”: “Free monthly”,
“site.name”: “CFA 09Jun’21”,
“site.email”: “contact@carefromanywhere.com”,
“contact.Email[0]”: “disha22.shah@gmail.com”,
“paidplan.id”: “2957cda7-3aa2-41bc-93e7-b46138c9caf9”,
“paidplan.title”: “Client Membership”,
“paidplan.validfor”: “0 months”,
“paidplan.startdate”: “6/21/21”,
“start.date”: “6/21/21”,
“paidplan.price”: “$0.00”,
“contact.Id”: “926cf47f-916e-4502-8b17-ae62993cc430”,
“paidplan.subscriptionid”: “71d2a4fa-1483-4f13-a791-1513bd29f9e8”,
“metaSiteId”: “38e38696-3b7e-4cf8-86d8-74882a00a857”
}
}


export function post_orderedPlan(request) {
let sitemMember;
let planName;

let options = {
    "headers": {
        "Content-Type": "application/json"
    }
};

// get the request body
return request.body.text()
    .then((body) => {

        const pricePlanObject = JSON.parse(body);
        let dataValue = pricePlanObject.data;

        for (const [name, value] of Object.entries(dataValue)) {
            if (name === "contact.Email[0]") {
                console.log(name);
                console.log(value);
                sitemMember = value;
            }

            if (name === "paidplan.title") {
                console.log(name);
                console.log(value);
                planName = value;
            }

        }

        let planInfo = {
            "title": "ZERO value plan purchased",
            "planData": pricePlanObject,
            "planName": planName,
            "memberEmail": sitemMember
        }

        //return wixData.insert("pricePlan", JSON.parse(body)); //commented on 21 june
        return wixData.insert("pricePlan", planInfo);

    })
    .then((results) => {
        options.body = {
            "inserted": results
        };
        return created(options);
    })
    // something went wrong
    .catch((error) => {
        options.body = {
            "error": error
        };
        return serverError(options);
    });

}