nodejs京东接口分析系列-实现京东自动化功能 之 购物车修改
本章节实现,清空购物车、修改购物车库存和添加购物车功能
需要用到京东的用户登陆后的信息,详情请查看 https://blog.csdn.net/weixin_38407447/article/details/116590602 章节
后续感兴趣的小伙伴可自行实现 购物车的增删查改等全部功能
首先,我们先分析一下京东的购物车接口
打开 https://item.jd.com/100009820314.html,ctrl+f12来一波~

发现加入购物车功能是如此简单,以至于不敢相信
http://cart.jd.com/gate.action?pid=100009820314&pcount=1&ptype=1
其实这个接口是一个页面,请求之后,服务器全部给你处理好了,给前端返回一个页面
-----------------------------------------------------------------------------------------------------------------------------------------------
但是 本人更喜欢 纯api请求,出于好奇心,尝试看看能不能在购物车页面找到纯api接口
https://cart.jd.com/cart_index/

直接就能找到api ,都是post请求,带上登陆cookie信息
1.获取购物车信息 接口
https://api.m.jd.com/api?functionId=pcCart_jc_getCurrentCart&appid=JDC_mall_cart&loginType=3&body=%7B%22serInfo%22:%7B%22area%22:%2219_1601_36953_0%22,%22user-key%22:%22mu15tkL3TxhUnUxx4Wb5jS4Eup7Gtg5x%22%7D,%22cartExt%22:%7B%22specialId%22:1%7D%7D
接下来参数分析
functionId:pcCart_jc_getCurrentCart
appid:JDC_mall_cart
loginType:3
body:{"serInfo":{"area":"19_1601_36953_0","user-key":"mu15tkL3TxhUnUxx4Wb5jS4Eup7Gtg5x"},"cartExt":{"specialId":1}}
经过测试 body里面的 user-key 可直接传空字符串,可根据页面数据,分析返回的接口数据字段含义,这个比较简单,不做说明
async function getUserCartInfo(user){let url = 'https://api.m.jd.com/api'let body = {"serInfo":{"area":g_data.areaId,"user-key":""},"cartExt":{"specialId":1}}const result = await request({method: 'post',url: url,headers: Object.assign(user.header, {"origin": "https://cart.jd.com","referer": "https://cart.jd.com/",cookie: user.cookieData.join('')}),params: {'functionId': 'pcCart_jc_getCurrentCart','appid': 'JDC_mall_cart','loginType': '3','body': body,},})// result.data.resultData.cartInfo == null// console.log(JSON.stringify(result.data.resultData))return this.getGoodInfo(result.data.resultData,user)}
2.修改购物车库存接口

3.加购物车商品接口

https://api.m.jd.com/api
参数分析,只解析body,其他跟上面接口一样
body: {"serInfo":{"area":"19-1601-36953-0","user-key":"mu15tkL3TxhUnUxx4Wb5jS4Eup7Gtg5x"},"operations":[{"carttype":1,"TheSkus":[{"Id":"100012763746","num":1}]}]}
user-key 可以为空字符串 这里推测, serInfo里面的参数都固定好传个京东地址编号就可以了
operations 字段数据分析,
carttype:1(固定)
TheSkus数组, 很明显就是需要加购的商品信息, id是商品id,num:表示加购数量
4. 清空购物车接口
这里发现有两个可以清空购物车的接口


两个接口都差不多 ,只不过返回参数不一样,一个get请求,一个post
这样我们就可以推测 https://api.m.jd.com/api 这个接口,直接就能实现购物车的增删查改所有功能了,传到对应参数就可以了
购物车清空接口需要传购物车所有商品信息,通过 上面的 获取购物车信息接口返回的信息 解析得到
这里解析一下
resultData.vendors : 是个数组,表示不同商店的各个商品信息

其中vendorId 和shopId 就是对应的店铺id
resultData.vendors[0].sorted : 数组,包含单个店铺已加购的商品信息
resultData.vendors[0].sorted.item : 对象,对应的每个商品信息
奉上我的解析代码
function getGoodInfo(resultData,user){let shopList = []let goodInfo = {}if(!resultData){// console.error(`登陆授权可能失败 ${user.unick}`)resultData = {}if(!user.outLogin){let ids = this.getTempMsgUserId(user.unick);ids.forEach(e=>{this.temp_msg(e,"登陆状态已过期",`京东账号:${user.unick}`,"点击跳转扫码登陆","","",true)})}user.outLogin = true}if(resultData.cartInfo){let vendors = resultData.cartInfo.vendorsvendors.forEach(e=>{let shopitem = e.sorted[0].item// let sType = shopitem.SType;let sType = 1;let num = shopitem.Num;let Id = e.shopId;let items = []e.sorted.forEach(o=>{let obj = {Id:o.item.Id,skuUuid:o.item.skuUuid,useUuid:o.item.useUuid,num:o.item.Num,Name:o.item.Name,}items.push(obj)goodInfo[o.Id] = obj})shopList.push({sType,num,Id,items:items,})})}// let sorted = vendors[0].sorted[0];// let buyShopid = sorted.item.Id;return {shopList,goodInfo}}
清空购物车代码
async function removeUserCart(user){let { shopList } = await this.getUserCartInfo(user)if(shopList.length == 0){console.log(`${user.unick} 购物车已空${shopList.length}`)return true}console.log(shopList)// let url = 'https://cart.jd.com/quickDel.action'let url = 'https://api.m.jd.com/api'let body = {"operations":[{"carttype":"4","TheSkus":[],"ThePacks":[{"Id":106417096782,"num":1,"sType":13,"TheSkus":[{"Id":"10025678773125","num":1,"skuUuid":"1194226238944649706634989568","useUuid":false}]}]}],"serInfo":{"area":"19_1601_36953_62867"}}body.serInfo.area = g_data.areaIdbody.operations[0].ThePacks = []console.log(body)shopList.forEach(e=>{let obj = {num:e.num,sType:e.sType,Id:e.Id,TheSkus:[]}e.items.forEach(item=>{obj.TheSkus.push({num:item.num,Id:item.Id,skuUuid:item.skuUuid,useUuid:item.useUuid,})})body.operations[0].ThePacks.push(obj)})// let delParam = [{id:10025522073879,s:false,vs:false},{id:10025678773125,s:false,vs:false},{id:70196142298,s:false,vs:false}]let delParam = []shopList.forEach(e=>{e.items.forEach(item=>{delParam.push({id:item.Id,s:false,vs:false,})})})console.log(delParam)const result = await request({method: 'post',url: url,headers: Object.assign(user.header, {"origin": "https://cart.jd.com","referer": "https://cart.jd.com/",cookie: user.cookieData.join('')}),params: {'functionId': 'pcCart_jc_cartRemove','appid': 'JDC_mall_cart','loginType': '3','body': body,},})// console.log(result.data)// console.log(result.data.resultData)// console.log(JSON.stringify(result.data.resultData))}
至此,本章节功能已完成,下单功能请查看下个章节
其他功能实现分析链接
1.京东扫码登陆功能实现 原理 分析
https://blog.csdn.net/weixin_38407447/article/details/116590602
2.京东商品信息监控功能实现 原理 分析
https://blog.csdn.net/weixin_38407447/article/details/116592629
3.京东购物车修改功能实现 原理 分析
https://blog.csdn.net/weixin_38407447/article/details/116593254
4.京东自动下单功能实现 原理 分析
https://blog.csdn.net/weixin_38407447/article/details/116595784
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
