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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部