电商平台对接方案整理之一 淘宝

本文讲述了作者作为程序员开发电商平台项目的过程,包括淘宝的对接、隐私政策下的订单获取、使用WebSocket实现订单实时同步,以及遇到的问题如SDK版本更新和API地址调整。
摘要由CSDN通过智能技术生成

做一个程序员,项目做到什么程度算完结,其实和甲方是有不同的衡量标准的,直到昨天才算真正的完成了。
项目要从22年说起,一个人和甲方边做边用,到22年年底把基本功能做完,系统功能不多说,主要整理一下各个电商平台的对接方案,免得以后自己要用再忘了。
一、淘宝
不得不说阿里系的文档和工具确实很人性化,按照文档对接就行了。
加一点说明,现在各个平台的的开发者都需要软著才能申请,所以在店铺同主体下要有软著才行(不同主体也行,但是店铺授权给开发者比较麻烦),不用考虑软著上的系统名称,平台应该不会考虑一致性。
22年的时候(各大平台规则可能会变),要读取订单信息需要满足御城河的分数要求,需要提供专业的渗透测试报告(这个要花钱认证)。读取订单后发现所有的订单都是打※的(国家对隐私比较注重,所有平台的订单收件人都是加密的),需要解密,需要购买聚石塔的服务器,淘宝的解密接口只能用聚石塔内的服务器请求。再说明一下,现在各个平台返回的收件人手机号都是虚拟号。 到这订单拉取就完成了。
但是,这样读取订单是有延迟的,系统不可能太频繁的读取接口。各个平台提供了websocket的接口,平台在订单有各种变化的时候会推送消息,淘宝的消息支持http和webscoket,http就需要一个长连接,基本思路就是while循环读取。淘宝的websocket提供了很多版本的sdk,我能理解的是java和nodejs,最后选择了nodejs,但是nodejs的sdk版本有点老了,服务器安装了新版的node会报错,解决方案是:
源文件改过,具体行数不确定了
修改 tmcCodec.js

TmcCodec.prototype.writeMessage = function(message) {
    var buffer = new Buffer(256);
    buffer.writeUInt8(2,0);
    buffer.writeUInt8(message.messageType,1);
    var index = 2;

改为

TmcCodec.prototype.writeMessage = function(message) {
    var buffer = new Buffer.allocUnsafe(256); //改了这一行
    buffer.writeUInt8(2,0);
    buffer.writeUInt8(message.messageType,1);
    var index = 2;

第二个问题

if(message.content){
        for(var key in message.content){
            buffer.writeUInt16LE(Common.enum.HeaderType.Custom,index);
            var length = Buffer.byteLength(key);
            buffer.writeUInt32LE(length,index+2);
            buffer.write(key,index+6,'UTF-8');
            index = index + length + 6;

            length = Buffer.byteLength(message.content[key]);
            if(length == 0){
                buffer.writeUInt8(Common.enum.ValueFormat.Void,index);

改为

if(message.content){
        for(var key in message.content){
            buffer.writeUInt16LE(Common.enum.HeaderType.Custom,index);
            var length = Buffer.byteLength(key);
            buffer.writeUInt32LE(length,index+2);
            buffer.write(key,index+6,'UTF-8');
            index = index + length + 6;
			
            length = Buffer.byteLength(String(message.content[key])); //修改了这一行
            if(length == 0){
                buffer.writeUInt8(Common.enum.ValueFormat.Void,index);

第三个问题
sdk带的ws地址是错的,要用这个 ws://mc.api.taobao.com/

tmcClient.connect('ws://mc.api.daily.taobao.net/',
    function (message,status) {
        console.log('message',message);
    });

然后我在项目里加了个http模块,有订单变化时更新到订单系统,就能做到实时同步订单变化(实时有点夸张,有10秒左右的延迟)。

tmcClient.connect('ws://mc.api.taobao.com/',
    function (message,status) {
        console.log('message',message);
        console.log('status',status); 
		if(message.content){
			//post是用http模块写一个ajax函数
			post('/notify/tm/msg',JSON.stringify(message),(data)=>{
				console.log('callback',data)
			})
		}
		
});

拼多多、抖音:
https://blog.csdn.net/zepcjsj0801/article/details/135838522

京东:
https://blog.csdn.net/zepcjsj0801/article/details/135838116

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值