对接饿了么平台总结

前言:
好久没写过笔记了,感觉上次写笔记已经是上个世纪(嘿嘿~);最近工作中要对接饿了么的平台,从饿了么平台抓取数据,然后放在自己的系统上,这种对接大家都应该做过,而且看上去也没什么难度(但是我做了一个星期,太菜了!),只要按着饿了么的文档来就好了(接口方面);这篇笔记主要分享了自己踩过的一些坑,来避免大家和我一样踩相同的坑
对接饿了么接口(或者说大部分接口),我们要做的东西有三点:

  • Token:就是访问饿了么的令牌,没这个东西,我们没法访问饿了么的接口,也就是通行证一般的东西;
  • 消息推送和接收:在对接的时候这个很重要,饿了么任何关于订单状态的变更或者配送状态的变更都会通过消息的形式传到和你对接的系统那
  • 接口:不用说了,没接口怎么访问饿了么的开放平台呢?~
    下面就这三点进行细说,至于解决方案我觉的官方的文档已经非常详细了,大家如果要做这方面的对接的话完全可以看着文档来;

1.Token

饿了么获取Token非常方便,我们只要引入他相应的sdk(自行去开放平台下载);就可以获取Token。不用繁琐的发送http访问之类的下面;下面给大家提供一些代码,大家可以参考

public class ElmConstants {
    //标志是否为沙箱环境
    public final static boolean IS_SANDBOX=true;
    //沙箱环境参数
    //对应Key 表示沙箱环境的应用Key
    public final static String SANDBOX_APP_KEY="your key";
    //对应Secret 表示沙箱环境的应用Secret
    public final static String SANDBOX_APP_SECRET="your secret";
    //对应沙箱环境回调地址URL
    public final static String SANDBOX_REDIRECT_URL="your redirect url";
    //对应沙箱环境店铺ID
    public final static long SANDBOX_STORE_ID=you shopId;
    //对应沙箱环境店铺URL
    public final static String SANDBOX_STORE_URL="";
    //对应沙箱环境店铺密码
    public final static String SANDBOX_STORE_PASS="";
    //正式环境参数 暂时么有
}

这段代码的含义呢,都已经很明显了,就是一些常量,里面填充我们申请到沙箱环境的一些数据就好了,比如key secret

package org.panda.eleme.api.elm.util;
 
import eleme.openapi.sdk.config.Config;
import eleme.openapi.sdk.oauth.OAuthClient;
 
/**
 * 饿了么-工具类
 *
 * 
 **/
public class ElmUtil {
 
    /**
     * 获取配置类
     * @param isSandbox 是否沙箱
     * @return
     */
    public static Config getConfig(boolean isSandbox) {
        Config config = null;
        if (isSandbox == true) {
            config = new Config(isSandbox, ElemeConstants.SANDBOX_APP_KEY, ElemeConstants.SANDBOX_APP_SECRET);
        } else {
            // TODO 填充正式环境数据
        }
        return config;
    }
 
 
    /**
     * 获取店铺授权URL地址
     * @desc 每次调用会产生一个新的授权码 需要记录code作为后续凭证
     */
    public static String getAuthUrl(Config config){
        OAuthClient client = new OAuthClient(config);
        String authUrl = client.getAuthUrl(ElemeConstants.SANDBOX_REDIRECT_URL, "all", "1234");
        return authUrl;
    }
 
}

工具类: 里面有两个方法, 1.得到配置类的方法 2.得到授权url地址(给商家用的)
如何使用呢?这里我直接main方法使用了,如果web的话可以自己初始化;其实这里的授权还有另外一种方式,就是到饿了么开放平台里面直接点应用授权,也可以授权


    public static void main(String[] args) {
        Config config = ElmUtil.getConfig(true);
        //获取店铺授权的URL
        String url = ElmUtil.getAuthUrl(config);
        System.out.println(url);


    }

下面是回调地址,回调地址就是你授权成功后返回的页面,这里我们可以做一些广告呀~企业 应用的首页,或者直接一些数据的展示,这些都是可以的

@RestController
@RequestMapping("test")
@Slf4j
public class ElmOrderController {
 
 
    
 
    /**
     * 饿了么授权回调在此处响应,主要是获取授权码code
     */
    @GetMapping("/elm")
    public Object doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
        log.info("[请求错误]");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("<br>ElemeServlet.doGet..");
        String method=request.getParameter("method");
        //响应授权回调
 
        if("auth_back".equals(method)){
            String code=request.getParameter("code");
            String state=request.getParameter("state");
            response.getWriter().write("<br>code:"+code);
            response.getWriter().write("<br>state:"+state);
 
        }
 
        response.getWriter().flush();
        response.getWriter().close();
        return "test";
 
    }
    
}

通过回调地址拿到Code以后就可以获取Token了,下面是获取Token的方法,我建议可以写在上面的ElmUtil里面,自己封装一个方法,因为后面访问接口都要用到Token

token = client.getTokenByCode
        (authCode,ElemeConstants.SANDBOX_REDIRECT_URL);

Token授权下来以后呢,就可以拿着Token到处玩了,那么Token里面包含什么呢


image.png
  • accessToken:一串字符串,用这个来通行的;
  • tokenType:见名思意
  • expires:过期时间(沙箱环境第一次授权为一天,刷新后15天,正式环境第一次30天,刷新后35天)
  • refreshToken:这个很重要,这个是拿来刷新我们的token的,这样就不用每次去授权了~
    刷新Token
token = client.getTokenByRefreshToken("4fd0c0748e8fc1b262c33325e2b48967");

关于Token的一些建议

  • Token建议放在全局变量里面,毕竟要经常用到,我在项目中存储的话是放在Redis缓存里面,拿出来用也很方便
  • 关于Token的刷新,建议做一个定时任务去刷新Token,最好是每半个月刷新一次(毕竟次数还是挺多的,哈哈哈),刷新完以后更新Redis的时间,同时把新的Token放进Redis里面,这样就OK就不用每次都要自己去授权了;!! 注意,一定要去刷,不然Token过期了,只能重新授权了

2.消息推送

  • 消息推送我踩了好几天的坑,都坑在那个全双工推送里面,重要的是平台还推荐用那个(后面会逐渐取消http的模式;官方原话),后面查了一下原来是基于WebSoket的长连接方式,看起来非常好用,但实际上效果不太好(不知道是不是我一个人的原因),消息会延迟,或者有时候饿了么那边根本检测不到我们这边已经开启了服务,这非常坑。后面改用了Http接收消息的形式,感觉进入到了新世界,消息接收快,就算没接收到也会重发,效率很高。因此,现阶段来说,还是比较推荐用Http接收消息。当然!有哪位大佬用了全双工模式一直跑起来没问题的话,希望可以交流一下~
  • 消息推送如果用http模式的话,要3S内马上响应,不然会有可能会造成漏单的情况或者消息接收过慢,因此消息来的话,我建议开一个线程去跑业务,这样能大概率减少漏单的的情况

3.关于接口方面

接口方面的话其实看文档就能解决大部分问题了,可能有坑的话就是关于配送这一块,自配送接口不是谁都能调用的,饿了么有自己的要求,因此在调用之前最好看一下文档,哪些是符合情况的,不然调了会报错;PS:

  • 沙箱环境可以测试自配送,这个非常好~
  • 沙箱环境不能测试连锁店,这个也能理解,毕竟已经分配了个店铺给你;这个以后上正式环境了有需求的话再做测试
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容

  • 我最喜爱初春时发了芽还未开出苞子的枝桠,以及深秋日子里枯黄光秃的枝叉,总觉得这二者中有着对死的凄凉和生的渴望的牵连...
    川川在此阅读 889评论 0 1
  • 浩荡山湖间。
    指冷阅读 192评论 0 0
  • 文件上传的请求体格式 --adfadggrebgbsfbt//自定义的分隔符adfadggrebgbsfbt不可以...
    照庆阅读 1,822评论 0 1
  • 本篇游记由丰迈客人人间童话供稿,感谢迈友的的分享 偶说偶不去,老婆非拉我去,身在异域不会异语那是相当抑郁的,可人傻...
    丰迈旅游阅读 466评论 0 1
  • 嗨,今天下午在街角买奶茶的那个姑娘,你还记的我吗?我就是那个在你后面排队的男生,个子不是特别高,也不是特别的出众,...
    想飞的鱼小天阅读 255评论 0 4