当前位置: API文档

trade_push.php(创建原始订单)

¥标准

1.接口说明

   1.1 接口描述:①推送销售订单给ERP ;②更新已推送成功的销售订单。

   1.2 适用版本:客户端 V2.4.2.6及以上版本
   1.3 订单更新已推送成功的销售订单的订单状态、退款状态、订单信息变更到ERP情况比较复杂,订单变更处理办法详解, 单击这里【必看】
   1.4 调用建议:建议每间隔(5~10)分钟,将商城积累的订单集中推送,每次请求包含订单条数建议不超过50条(1条订单由“trade_list+order_list”构成),如果累积量超过了50条,分多次请求。

2.调用场景

   2.1 自研商城、分销系统、全渠道等系统对接

3.请求参数说明

   3.1 请求地址

环境HTTP地址
测试环境http://sandbox.wangdian.cn/openapi2/trade_push.php
正式环境http://api.wangdian.cn/openapi2/trade_push.php

   3.2 公共请求参数

名称字段类型长度
必须描述
卖家账号sidString
购买ERP时由旺店通分配给ERP购买方,请从ERP购买方获取。
接口账号appkeyString
本开放平台“自助对接”功能模块内自助申请,申请流程单击这里
时间戳timestampint
北京时间1970-01-01 08:00:00起至现在的总秒数,10位int值,旺店通企业版API服务端允许请求最大时间误差为5min,date.timezone = Asia/Shanghai。
签名signString
API输入参数签名结果,签名算法介绍单击这里

   3.3 业务请求参数

名称字段类型长度
必须描述
店铺编号shop_novarchar20代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置,查看路径ERP→设置→基本设置→店铺→店铺列表),用于创建指定店铺单据信息,测试环境店铺编号查看测试环境分配邮件。ERP内shop_no对应的“店铺平台”必须为“自有”。正式环境店铺创建成功后ERP会自动授权,如果自动授权失败,提供“卖家账号+店铺编号”给技术进行授权,联系技术单击这里
   
模式switchtinyint10:非严格模式,1:严格模式,默认1。严格模式详情介绍单击这里
订单列表节点trade_listdata[]
请求参数的1级数据节点,包含销售订单所有属性信息的数据节点,节点下数据字段详见下述“trade_list”

trade_list

名称字段类型长度
必须描述
原始单号tidvarchar40指商城、官网等平台的订单编号,ERP称之为原始单号,同一个sid下通过本接口新增订单的tid保证唯一。
平台状态trade_statustinyint4平台订单状态较多且涉及变更,详情介绍单击这里
支付状态pay_statustinyint4平台订单付款状态:0:未付款,1:部分付款,2:已付款
发货条件delivery_termtinyint41:款到发货,2:货到付款(包含部分货到付款),3:分期付款,4:挂账
下单时间trade_timedate
平台订单创建时间,格式: YYYY-MM-DD HH:MM:SS
支付时间pay_timedate
平台订单付款时间,格式: YYYY-MM-DD HH:MM:SS,未付款订单为:0000-00-00 00:00:00
分销类别fenxiao_typetinyint
0非分销订单 1转供销 2代销 3经销
采购单IDpurchase_idvarchar40转供销情况下,采购单ID
分销商idfenxiao_nickvarchar40分销订单的分销商id,或转供销时供应商id
客户网名buyer_nickvarchar100平台买家昵称,注意:一次推送网名相同的订单不能超过30
买家emailbuyer_emailvarchar60买家email
支付单号pay_idvarchar40支付单号
支付账号pay_accountvarchar128支付账号
收件人receiver_namevarchar40收件人姓名
省份receiver_provincevarchar40收件人省份,如果不传省市区,则会尝试从详细地址解析省市区,必须是空格分隔的才能解析成功,需要注意直辖市的地址格式,举例“北京 北京市 海淀区 花园路xxxx”
城市receiver_cityvarchar40收件人城市
区县receiver_districtvarchar40收件人区县
地址详情receiver_addressvarchar256收件人地址详情
手机receiver_mobilevarchar40手机号码
电话receiver_telnovarchar40电话号码
邮编receiver_zipvarchar20收件人邮编
物流方式logistics_typetinyint4

不传本参数,输入值默认-1,表示由ERP系统策略选择。平台指定订单发货物流可选输入值单击这里

发票类别invoice_kindtinyint40:不需要,1:普通发票,2:增值税普通发票电子,3:增值税普通发票纸质,4:增值税专用发票
发票抬头invoice_titlevarchar255发票抬头
发票内容invoice_contentvarchar255

常见内容:纳税人识别号、地址、电话、开户银行、银行账户,按照以下格式推送,系统开发票时可解析。

推送格式:纳税人识别号:xxxxxxxxxxx;地址:xxxxxxxx 13888888888;开户银行:银行名称 银行账户;

英文分号以后是地址,地址后面是空格,空格后面是电话,电话后面是英文分号,分号以后是开户行,然后空格,然后是银行账号

买家备注buyer_messagevarchar1024买家下单时填写的订单备注
客服备注seller_memovarchar1024商家客服对订单进行的备注内容
标旗seller_flagtinyint4客服标旗,取值0至5对应的标旗颜色依次为灰(无标旗)、红、黄、绿、蓝、紫,不传默认0
邮费post_amountdecimal(19,4)商家收取买家的物流或者快递费用
货到付款金额cod_amountdecimal(19,4)货到付款金额
货到付款买家费用ext_cod_feedecimal(19,4)货到付款买家费用,扣除货到付款订单金额后,卖家仍需支付的货到付款其他金额。这个钱卖家收不回来,是快递公司直接收走,但在快递单里是要打印出来,否则快递收款就错了
其它收费other_amountdecimal(19,4)其它应从买家收取的服务费,其他费用
已付paiddecimal(19,4)订单已付金额,paid计算公式:paid = Σ(price * num + adjust_amount -discount – share_discount)+ post_amount,所有金额相关字段推送处理办法,单击这里
证件类型id_card_typetinyint41:身份证
证件号码id_cardvarchar40证件号码
自动流转模式is_auto_wmstinyint1是否为自动流转模式(1:是 0:不是 不传默认0),非自动流转模式一定不要传值。自动流转模式处理办法,”自动流转模式处理办法详解”)单击这里
仓库类型wms_typetinyint4非自动流转模式一定不要传值
仓库编号warehouse_novarchar40ERP内自定义的仓库编号,查看路径ERP→设置→基本设置→仓库→仓库列表,测试环境仓库编号查看测试环境分配邮件。平台订单需指定ERP内仓库时,传哪个仓库的编号,ERP将为订单选择哪个仓库。
订单货品明细节点order_listdata[]
货品明细列表(子订单列表)节点

order_list

名称字段类型长度
必须描述
子订单编号oidvarchar40平台订单货品表主键,子订单唯一标识,同一个sid下通过本接口新增订单的oid(子订单编号)要保证唯一;如果oid重复,ERP生成系统单(递交)时会提示“订单货品数量不一致xxxxxx”
数量numdecimal(19,4)货品数量,订单推送成功以后本字段值不能更改
单价pricedecimal(19,4)标价,折扣前的价格,可以推送价格为0的商品。订单推送成功以后本字段值不能更改
状态statustinyint4平台子订单状态,子订单状态可以和主订单不一样,比如其中一个子订单退款完成,其状态是80,但主订单仍然是待发货,可选值同trade_status
退款状态refund_statustinyint40:无退款,1:取消退款,2:已申请退款,3:等待退货,4:等待收货,5:退款成功。本字段在售前退款的时候,根据不同的场景填写不同的值,eg:申请退款值为2,取消退款值为1……
平台货品IDgoods_idvarchar40平台系统货品(SPU)的唯一标识。goods_id和spec_id不能同时为空SPU和SKU概念介绍,单击这里
平台规格IDspec_idvarchar40平台系统单品(SKU)的的唯一标识,尽量不为空。SPU和SKU概念介绍,单击这里
货品编码goods_novarchar40平台货品SPU编码,对应ERP货品编号,尽量不为空
规格编码spec_novarchar40平台货品SKU唯一码,对应ERP商家编码,goods_no和spec_no不能同时为空
货品名称goods_namevarchar255平台货品名称
规格名称spec_namevarchar100平台货品规格名称
调整adjust_amountdecimal(19,4)客服调整总金额(大于0加价,小于0减价,是折扣来源的一部分,没有传0)
优惠discountdecimal(19,4)下单总折扣,客户下单时折扣(比如促销打折,不包含客服调整、分摊折扣,没有传0)
分摊优惠share_discountdecimal19,4分摊总折扣,由总订单分摊而来,一般是付款时产生,如使用优惠券,没有传0。分摊优惠传值注意:例如三个商品,优惠10,分摊优惠可以是:3/3/4,或者3.33/3.33/3.34.即最后一个商品的分摊优惠使用减法计算
备注remarkvarchar60货品明细备注推送此字段ERP客户端需升级至V2.3.9.2及以上
类目cidvarchar40平台货品所属类目

4.响应参数

   4.1 公共响应参数

名称字段类型长度
必须描述
错误码codeint40状态码:0表示成功,其他表示失败
错误原因messagevarchar255错误原因
返回的新增订单个数new_countint10有单据新增时不为0(新建的原始单据)
返回的更新订单个数chg_countint10有单据更新时不为0(在已有的原始单据上进行修改)

   4.2 业务响应参数


5.请求示例

PHP
<?php
    require_once('../WdtClient.php');

    $c = new WdtClient;
    $c->sid ='';
    $c->appkey ='';
    $c->appsecret ="";
    $c->gatewayUrl = 'http://sandbox.wangdian.cn/openapi2/trade_push.php';

    $trade_list[] = array
    (
        'tid'              => 'LxTestTid'.time(),
        'trade_status'     => 30,
        'delivery_term'    => 1,
        'pay_status'       => 2,
        'trade_time'       => '0000-00-00 00:00:00',
        'pay_time'         => '0000-00-00 00:00:00', // 未付款情况下为0000-00-00 00:00:00
        'buyer_nick'       => '',
        'buyer_email'      => '123456234533@mail.com',
        'receiver_mobile'  => '13233456110',
        'receiver_telno'   => '1234563567',
        'receiver_zip'     => '0000000',
        'receiver_province'=>'北京',
        'receiver_name'    =>'亚历山大',
        'receiver_city'    =>'北京市',
        'receiver_district'=>'海淀区',
        'receiver_address' =>'海淀',
        'logistics_type'   => 4, // ems
        'invoice_kind'     => 0,
        'invoice_title'    => '',
        'invoice_content'  => '发票内容+',
        'buyer_message'    => '发最好&&&的+',
        'cust_data'        => '72-500.0;84-368.0;67-258.0;65-99.0;87-158.0;',
        'remark'           => '测试专用',
        'remark_flag'      => 1,
        'post_amount'      => 10, //邮费
        'paid'             => 409, //已支付金额
        'cod_amount'       => '0',
        'ext_cod_fee'      => '0',
        'order_list'       => array(
            array
            (
                'oid'            => 'LxTestOid'.time(),
                'status'         => 30,
                'refund_status'  => 0,
                'goods_id'       => 'E166D18BAAEA420CB132E105B3B6128A',
                'spec_id'        => '',
                'goods_no'       => '',
                'spec_no'        => '9787533951092',
                'goods_name'     => '情商是什么?——关于生活智慧的44个故事',
                'spec_name'      => '',
                'num'            => 1,
                'price'          => 399,
                'adjust_amount'  => '0', //手工调整,特别注意:正的表示加价,负的表示减价
                'discount'       => 0, //子订单折扣
                'share_discount' => '0', //分摊优惠
                'cid'            => '13',
            )
        )
    );
        
    $c->putApiParam('shop_no','api_test');
    $c->putApiParam('switch',0);
    $c->putApiParam('trade_list',json_encode($trade_list, JSON_UNESCAPED_UNICODE));
    $json = $c->wdtOpenApi();
    var_dump($json);
    
?>
JAVA
package com.wangdian.api.trade;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.wangdian.api.WdtClient;

public class TradePush {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
WdtClient client = new WdtClient("", "", "", "");
        
        List<Map<String, Object>> trade_list = new ArrayList<Map<String, Object>>();
        List<Map<String, Object>> order_list = new ArrayList<Map<String, Object>>();
        
        Map<String, Object> order_1 = new HashMap<String, Object>();
        order_1.put("oid", "ghsTest121101");
        order_1.put("num", 1);
        order_1.put("price", 12);
        order_1.put("status", 30);
        order_1.put("refund_status", 0);
        order_1.put("goods_id", "18344");
        order_1.put("spec_id", "18656");
        order_1.put("goods_no", "ghs2");
        order_1.put("spec_no", "ghs201812070212123");
        order_1.put("goods_name", "123");
        order_1.put("discount", 0);        //子订单折扣
        order_1.put("adjust_amount", 0);    //手工调整,特别注意:正的表示加价,负的表示减价
        order_1.put("share_discount", 0);
        
        
        order_list.add(order_1);
        
        Map<String, Object> trade_1 = new HashMap<String, Object>();
        trade_1.put("tid", "AT201812110002");
        trade_1.put("trade_status", 20);
        trade_1.put("pay_status", "1");
        trade_1.put("delivery_term", 2);
        trade_1.put("trade_time", "2018-12-11 14:21:00");
        trade_1.put("buyer_nick", "三国杀");
        trade_1.put("receiver_province", "河南省");
        trade_1.put("receiver_city", "周口市");
        trade_1.put("receiver_district", "川汇区");
        trade_1.put("receiver_address", "123");
        trade_1.put("logistics_type", 4);
        trade_1.put("post_amount", 12);
        trade_1.put("cod_amount", 2);
        trade_1.put("ext_cod_fee", 0);
        trade_1.put("other_amount", 1);
        trade_1.put("paid", 0);
        trade_1.put("order_list", order_list);
        

        trade_list.add(trade_1);
        
        String trade_list_json = JSON.toJSONString(trade_list);
        //System.out.println(purchase_info_json);
        
        Map<String, String> params = new HashMap<String, String>();
        params.put("shop_no", "ghs2test");
        params.put("trade_list", trade_list_json);
        try {
            String response = client.execute("trade_push.php", params);
            System.out.println(response);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WdtSdk;

namespace TradePush
{
    class TradePush
    {
        static void Main(string[] args)
        {
            WdtClient client = new WdtClient();
            client.sid = "";
            client.appkey = "";
            client.appsecret = "";
            client.gatewayUrl = "http://sandbox.wangdian.cn/openapi2/trade_push.php";

            var trade_list = new[]
            {
                new
                {
                    tid = "TestTid45235678987654",
                    trade_status = "30",
                    delivery_term    = "1",
                    trade_time       = "0000-00-00 00:00:00",
                    pay_time         = "0000-00-00 00:00:00",
                    buyer_nick       = "ceshi",
                    buyer_email      = "123456234533@mail.com",
                    receiver_mobile  = "13233456110",
                    receiver_telno   = "1234563567",
                    receiver_zip     = "0000000",
                    receiver_province= "北京",
                    receiver_name    = "亚历山大",
                    receiver_city    = "北京市",
                    receiver_district= "海淀区",
                    receiver_address = "乌鲁木齐市新疆乌鲁木齐市西山路82号009信箱",
                    logistics_type   = "4",
                    invoice_kind     = "0",
                    invoice_title    = "",
                    invoice_content  = "发票内容+",
                    buyer_message    = "发最好&&&的+",
                    remark           = "测试专用",
                    remark_flag      = "1",
                    paid             = "399",
                    post_amount      = "0",
                    cod_amount       = "0",
                    ext_cod_fee      = "0",
                    order_list       = new[]
                    {
                        new{
                            oid            = "TestOid3456789876543",
                            status         = "30",
                            refund_status  = "0",
                            goods_id       = "E166D18BAAEA420CB132E105B3B6128A",
                            spec_id        = "567898765",
                            goods_no       = "",
                            spec_no        = "9787533951092",
                            goods_name     = "情商是什么?——关于生活智慧的44个故事",
                            spec_name      = "",
                            num            = "1",
                            price          = "399",
                            adjust_amount  = "0",
                            discount       = "0",
                            share_discount = "0",
                            cid            = "13",
                            remark           = "ceshiceshiceshi"
                        }
                    }
                }
            };
            String json = trade_list.ToJsonString();
            client.putParams("trade_list", json);
            client.putParams("shop_no", "api_test");
            client.putParams("switch", "0");

            string result = client.wdtOpenapi();
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}

6.响应示例

   6.1 正常响应示例 

JSON
{
    'code': 0,
    'message': "",
    'new_count': 1,
    'chg_count': 0
}

   6.2 异常响应示例

JSON
{
    "code": 99,
    "message": "buyer_nick 名字不能只用一个,不同客户必须用不同的名字"
}



常用工具