C# 唯品会JIT&JITX对接

前言:其实唯品会的接口使用还是非常简单,开发者可能有疑问还是他们的接口流程问题和如何与自家的ERP对接起来。这篇文章是在记录自己对接唯品会的过程的理解,也因为是第一次接触唯品会,刚开始疑问还挺多的,网上也没啥这类问题的解答,都得自己去研究实验,有需要的可参考参考。

PS:唯品会的开放平台文档N久没更新,有些地方说的已经不存在或者已经变更为其他方式,总之就是看文档会让你产生很多误区,但是你也没地方有资料看了。另外他们的沙箱,提供的数据是全是死的不变的,而且跟实际数据会差很远,我是按自己的理解纯码代码上正式测的。(今年更新了,我这是去年对接的,今年SDK为应对新型肺炎疫情 新增了一些字段,没更新的同志们要注意了)

一、准备工作-秘钥的获取

       1.创建应用:这很简单注册成为开发者,供应商认证成功过后就可以创建应用,我创建的是 自研应用 。这里要说明一下,创建应用时填写的选项也是有学问的:

     合作类型 -- JIT和直发:

            JIT模式:我是服装公司(唯品会称呼我为供应商),客户下单了,由唯品会下指要供应商发货,发到唯品会他们自己的指另的仓库,然后由唯品会的人发货给客户,所以快递费要我们自己出

            直发:客户下单了,由我(供应商)直接发货给客户。PS:这块的接口他们已经弃用了,但是开发者平台没更新。这块的业务已经改为JITX业务了,接口也是另一套。这里也要说明一下:即使是我们自己发货,但你也不要以为你就拥有了自己的这一批客户源,唯品会对用户信息保密异常严格,只有他们自己知道用户信息。我们供应商拿到的全是加密的。

            JITX业务说明:因为是由我们直接发货给客户,并且用户信息是保密的,所以承运商+快递单号+快递费 全是由唯品承担。关于退货,这也跟淘宝天猫不一样,商家也不需要处理那些繁杂的退货申请,客户退货也是直接退给唯品的仓库,然后他们处理之后再发回给商家这里。所以 是没有 退货申请 接口的。

            PS:关于退货这块,我咨询过公司的业务人员,说是唯品后台会有财务报表,这些报表就是最终生效的订单,我们的业务人员会定期筛选出来导入到我们的ERP系统,这才跟ERP的销售那块的账对上,所以换句话说不用技术人员 再去另外弄销售单。这里不能一概而论所有公司都这样做,还是得看各个公司的业务模式咋样才能决定自家要怎么处理这块。

     回调URL:这个就是正式上使用接口必要的参数:access_token,就是需要通过这个获取到。这里要说下,access_token有效期3个月,你只能单独通过https://auth.vip.com/oauth2/authorize?client_id=appKey&response_type=code&redirect_uri=回调URL

这个链接输入VOP系统的账号密码授权之后,唯品会通过你设置的回调地址,将access_token和refresh_token,expires_in,refresh_expires_time返回给你,你需要记录下来,配置到系统中的某个地方,调唯品的接口的时候就用它。那3个月过期之后呢,要么在通过refresh_token(有效期1年)调用唯品的刷新access_token的接口,要么就再一次通过授权这个方式获取token。1年之后吧,就真的需要在一次通过授权去获取access_token了,这就需要你及时更新到才行。

      2.拿取 App Key+App Secret

    

     3.配置白名单:即你调用唯品接口的程序发布的服务器IP,

      

二、码代码

     1.0 先从官方将唯品的sdk下载下来,他们封装好了所有接口的请求(包括model,request),链接

 

     JIT和JITX是可以同时跑的,我是先把JIT的对接好了之后,再去对接JITX的。先上JIT的代码吧,因为JITX的稍微要麻烦点,而且JITX的运行跟商家的运营政策不同而编写规则也不同,毕竟 这是要对接自家的ERP系统的。

     PS:这里注意,唯品的接口会时不时来个超时,所以要避免这种情况的发生导致我们错过点拉不到数据或拉不全

 

1.1 唯品的接口里有自己的一套仓库编码和快递承运商编码,我们使用人家的接口的时候 传递的参数值 也必须是 唯品规定的一套枚举值。所以若是 要和自家的ERP关联起来,就要 配置与 唯品一样的或者能2边关联上的  仓库编码和承运商编码

  获取承运商的接口  :vipapis.delivery.JitDeliveryService-1.0.0#getCarrierList

  在官网里的这个接口的下面就有仓库的枚举值列表

 

1.2 先上每个接口必须要用到的公共方法和配置参数:

//这些使用唯品接口必要的参数,我是配置在config里;分别对应 上一节说的 应用的key, 秘钥 ,商户ID ,唯品接口运行地址        
private string AppKey = System.Configuration.ConfigurationManager.AppSettings["VPH_AppKey"].ToString();
private string AppSecret = System.Configuration.ConfigurationManager.AppSettings["VPH_AppSecret"].ToString();
private string VendorId = System.Configuration.ConfigurationManager.AppSettings["VPH_VendorId"].ToString();
private string AppUrl = System.Configuration.ConfigurationManager.AppSettings["VPH_AppUrl"].ToString();
 #region 拿Token

        //令牌信息,token3个月过期,中间一年可通过refresh_token拿取新的token,一年之后就要重新授权
        private static AccessToken _token;
        public class AccessToken
        {
            public AccessToken(string code, DateTime time, string rcode, DateTime rTime)
            {
                this.Access_Token = code;
                this.Time = time;
                this.Refresh_Token_Time = rTime;
                this.Refresh_Token = rcode;
            }
            public string Access_Token { get; set; }

            public DateTime Time { get; set; }

            public string Refresh_Token { get; set; }

            public DateTime Refresh_Token_Time { get; set; }
        }

        private string GetAccessToken()
        {
            if (_token == null)
            {
                var token = System.Configuration.ConfigurationManager.AppSettings["VPH_AccessToken"].ToString();//AccessToken授权拿到的记录在config中
                var outTime = System.Configuration.ConfigurationManager.AppSettings["VPH_AccessToken_OutTime"].ToString();//AccessToken过期时间授权拿到的记录在config中
                var reToken = System.Configuration.ConfigurationManager.AppSettings["VPH_ReAccessToken"].ToString();//refresh_token授权拿到的记录在config中
                var reOutTime = System.Configuration.ConfigurationManager.AppSettings["VPH_ReAccessToken_OutTime"].ToString();//refresh_expires_time授权拿到的记录在config中
                _token = new AccessToken(token, Convert.ToDateTime(outTime), reToken, Convert.ToDateTime(reOutTime));
            }

            var time = _token.Time;
            if (time != null && time > DateTime.Now.AddDays(1))
            {
                return _token.Access_Token;
            }
            else if (_token.Refresh_Token_Time > DateTime.Now.AddDays(1))
            {
                OauthServiceClient client 
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值