背景

最近在做一个项目,我负责对接饿了么开放平台,这也是第一次尝试接入开放平台,走了许多弯路,最后还是成功接入了.

这里借鉴了几篇博客,感谢大佬的指路.

关于注册和申请

https://blog.csdn.net/woshisangsang/article/details/79494316

对接店铺

https://blog.csdn.net/woshisangsang/article/details/79666260

注册:

注册申请地址:饿了么开放平台   https://open.shop.ele.me/openapi

点击右上角注册,注册过程非常简单,常规操作.

开发资质认证

点击【个人中心】-【申请认证】就可以开始申请了

我们是做为第三方Erp厂商接入的, 申请过程中需要提供  [营业执照] 截图,这个没有的话接下来的步骤就无从谈起了.

信息提交完成后就可以开始创建应用了.

创建应用

点击【管理中心】-【新建应用】就可以创建应用了

应用类型分为

平台应用: 是面向大客户的(要求服务1万家以上商户),这个估计有点难,反正我们公司暂时达不到。

企业应用: 就是面向普通公司的,我们就选这个。

线下服务: 无需代码开发,这个跟我们程序员关系不大,果断抛弃。

作为第三方接入的话一般选择企业应用

测试环境

在创建应用之后就会得到一些开发的必要信息

这里会给你一个测试店铺的id和密码,是可以通过测试店铺 URL登录的,在店铺里面可以操作测试铺的数据,后期测试菜品和订单之类的接口会用到.

回调地址后面会讲

其他的参数在后面都会用到,到时再具体讲.

接下来就时测试  demo 了,这一块饿了么做的挺好的,基本上要用的都已经封装好了,简单的不要不要的.

饿了么把发送请求什么的都已经封装好了,最开始还比较疑惑呢,我是怎么在本地直接通过代码操作了店铺上的菜品数据,后来才发现饿了吗的sdk把什么都做好了.

1、首先从【饿了么开放平台】-【文档中心】-【开发文档】-【sdk使用说明】中点击【Java SDK访问地址】,如果是其他语言的话点击对应链接即可。

2.这里的sdk可以直接通过maven导入(我的demo是通过spring框架写的)

可能有些同学没有过maven这个东西,习惯了直接导入 jar 包,这个也是可以的

下载下来导入项目就好了

新建  springboot 项目

不管你建立的JavaWeb项目还是其他的,反正能抛出接口就行了

需要建立一些配置类

说明: 我们调用饿了么API的那些接口都必须传入两个参数,这两个参数的构建就需要用到沙箱环境的那些参数了

第一个参数 : Config 对象,Config对象在sdk中时已经封装好了的,我们只需要传入 [沙箱环境] 的参数就可以得到.作用就是对应你的地店铺信息

第二个参数:token(类似授权码) 就是商家给你的授权证明

常量类:把数据保存下来,方便调用

package org.panda.eleme.api.elm.util;/*** 饿了么-常量类* @author cyg* @date 18-3-24 下午6:21**/
public class ElemeConstants {//标志是否为沙箱环境public final static boolean IS_SANDBOX=true;//沙箱环境参数//对应Key 表示沙箱环境的应用Keypublic final static String SANDBOX_APP_KEY="";//对应Secret 表示沙箱环境的应用Secretpublic final static String SANDBOX_APP_SECRET="";//对应沙箱环境回调地址URLpublic final static String SANDBOX_REDIRECT_URL="";//对应沙箱环境店铺IDpublic final static long SANDBOX_STORE_ID=0;//对应沙箱环境店铺URLpublic final static String SANDBOX_STORE_URL="";//对应沙箱环境店铺密码public final static String SANDBOX_STORE_PASS="";//正式环境参数 暂时么有}

工具类: 里面有两个方法,  1.得到配置类的方法 2.得到授权url地址(给商家用的)

package org.panda.eleme.api.elm.util;import eleme.openapi.sdk.config.Config;
import eleme.openapi.sdk.oauth.OAuthClient;/*** 饿了么-工具类* @author cyg* @date 18-3-24 下午6:25**/
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;}}

如果是javaweb的话可以新建一个主函数调用上面的方法,自己写一下主函数封装

eleme.openapi.sdk.config.Config config1 = ElmUtil.getConfig(true);
String url= ElmUtil.getAuthUrl(config1);
System.out.println(url);

然后就可以在控制台看到一个url地址

这个地址就是商家登录授权的地址,商家在点击之后就会到达,你输入沙箱环境的店铺帐号和密码进行登录

登录之后就到达了授权页面(copy)

点击同意授权后,平台就会发送一个code(授权吗),发送到哪呢,发送到的地址就是你需要在沙箱环境和上面的配置类填的回调地址

这个回调地址是什么? 简单来说可以是个servlet 或者是个接口,必须是个可以访问的地址,否则填写到沙箱环境会失败.

package org.panda.eleme.api.elm.controller;import eleme.openapi.sdk.api.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.panda.eleme.api.elm.service.ElmOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author cyg* @date 18-3-24 下午6:49**/
@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";}}

在本地tomcat可以先测试一下能否访问:

http://localhost:8081/test/elm?method=auth_back 其中端口号也可能是其他的,我这是8081

如果是可以访问的就可以部署到服务器了,或者是其他方法,反正你得让这个地址在任何网络都能访问,否则是不能接收到饿了吗的授权信息的.

部署到服务器后,就可以把localhost改为你的服务器ip地址或者域名,端口号也对应修改

http://服务器ip:服务器对应端口/test/elm?method=auth_back

修改过后就可以填到沙箱环境和代码的常量类了

然后点击上图的同意授权,这时就会跳到你的回调地址

就此就得到了code参数,这就是商家给你的授权码,这个需要记录下来.

这个code怎么用呢,我们上面说到 我们调用饿了么API的那些接口都必须传入两个参数

第二个参数 token 就是根据这个code得到的

code 是能得到第一个token的,token不是一个值,而是一个对象,具体结构如下

Token{accessToken='06f18e076b6d5d40ef03e2b368665089', tokenType='Bearer', expires=86400, refreshToken='4fd0c0748e8fc1b262c33325e2b48967'}

其中accessToken和tokenType不用管,

expires: 是有效时长 86400秒,也就是24小时,在正式环境是一个月.

refreshToken: 这个一定要记住,因为第一个token过期后,后面的token时根据这个来得到下一次的token.

怎么通过code得到第一次token呢

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

这里面的参数

authCode就是我们得到的code

第二个就是设置好的回调地址.

根据得到的token来得到下一次的token

token = client.getTokenByRefreshToken("4fd0c0748e8fc1b262c33325e2b48967");

这里面的参数就是上一次token的refreshToken

自己可以把得到token的方法封装为一个工具类,后面会常用

测试: 如果你成功到这一步了,那我相信你还是有些体会了,接下来的接入就很简单了.

假如我要测试查询菜品这个接口

ProductService productService = new ProductService(config, token);

productService.getItem(27980000010L);

这是api中提供的代码

你只需要将Config的对象实例化,将config和token传入,就可以得到productService对象,利用这个对象就可以直接使用平台提供的方法.

真的很简单.

其他的接口都差不多同样的测试方法,测试添加菜品的时候可能有坑,参数好好检查一下,我尝试了好久才弄起.

测试订单类的接口,需要注册一个饿了么的用户帐号,在自己的测试店铺下单

就可以得到订单的信息

在沙箱环境的测试店铺URL输入自己的用户(下单的)帐号密码(不是商家帐号密码)

下单的时候如果电脑端不能选择地址的话可以把地址发送到手机,手机可以解决.

建议手机下单(如果菜品价格体太低,可能被系统检查出刷单的行为,就下不了单了,测试店铺也一样).1元以上就好

就讲到这了,还得去测试剩下的接口,如果有什么疑问可以留言.

对接饿了么开放平台(Java)相关推荐

  1. 饿了么开放平台接入(2)——使用Java对接店铺

    点此查看全部文字教程.视频教程.源代码 本文目录 1. 概述 2. 下载SDK 3. 新建Java Web工程 4. 新建常量类,保存饿了么沙箱环境参数 5. 店铺授权URL 6. 编写Servlet ...

  2. 开放java平台允许访问_饿了么开放平台接入(2)——使用Java对接店铺

    概述 上回讲到在饿了么开放平台注册了账户,并申请资质认证,然后还创建了应用,对开放平台.资质认证.应用不了解的同学还是先去看下上一篇文章吧. 时间拍马而过,10几天过去了,上次申请的资质认证早已通过( ...

  3. 关于NetCore+饿了么开放平台+奇门+聚石塔对接的解释说明

    淘宝R2去模糊化+聚石塔+奇门 速卖通API + 奇门 + 聚石塔 完整流程 前言 无 准备 1.账号注册链接 饿了么:https://open.shop.ele.me/ 奇门:https://con ...

  4. 饿了么开放平台接入(1)——开放平台注册与使用

    点此查看全部文字教程.视频教程.源代码 本文目录 0. 序言 1. 背景 2. 注册账户 3. 资质认证 4. 创建应用 4.1 应用的概念 4.2 应用种类 4.3 应用的具体信息 5. 应用的测试 ...

  5. 京东开放平台Java SDK jd-open-sdk 的引入与使用

    京东开放平台Java SDK jd-open-sdk 的引入与使用. 从后台生成下载最新的Java SDK Jar 包"open-api-sdk-2.0-20xx-xx-xx.jar&quo ...

  6. java系统对接方案_阿里巴巴开放平台SDK(java版). 接入授权店铺数据,对接企业内部管理系统的解决方案...

    AlibabaSDK-java 阿里巴巴开放平台SDK. 接入授权店铺数据,对接企业内部管理系统的解决方案 获取授权链接 @Test public void testGetPreAuthUrl() t ...

  7. java ai库_百度AI开放平台 Java SDK

    安装Java SDK Java SDK主要目录结构 com.baidu.aip ├── auth //签名相关类 ├── http //Http通信相关类 ├── client //公用类 ├── e ...

  8. python饿了么商家开放平台模拟网页http请求实战

    本人工科小白一枚,毕业做运营,为了工作方便研究起了py,总结了一下饿了么开放平台API的python方法,希望各路大神批评指正探讨. 首先当然是注册开放平台账号了,我是直接问主管要来了开放平台,下辖1 ...

  9. Java调用百度AI开放平台API

    百度AI开放平台 百度AI开放平台是全球领先的人工智能服务平台,面向开发者及企业开放120多项全球领先的AI能力和软硬一体组件,并提供 EasyDL定制化训练平台.对话系统开发平台UNIT.自定义模板 ...

最新文章

  1. mysql timestamp比较查询
  2. 如何安装或卸载 Internet Explorer 9?
  3. C# DataGridView控件用法
  4. 加密连接工具Cryptcat
  5. leetCode C++ 二分查找 35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
  6. C# 自定义控件入门
  7. 内嵌Tomcat的Connector对象的静态代码块
  8. 修改固态硬盘的物理序列号_买固态怕踩坑?收下这些软件,轻松鉴别好坏
  9. php thinkphp修改,thinkphp5.0 | 输入变量更改变量
  10. URLConnection学习
  11. 新议题,好多年前的华为面试题
  12. 【尚锐科技课堂】安全健康位置云平台系统
  13. vue代码如何跟后端代码结合_阿里云服务器优惠购买教程,可获得800元代金券,云服务器仅需82元/年_学云网...
  14. java毕业设计户籍管理系统mybatis+源码+调试部署+系统+数据库+lw
  15. 深度学习教程(2) | 神经网络基础(吴恩达·完整版)
  16. 百度指数-批量查询器
  17. Win10 清除 PowerShell 命令行历史记录的方法
  18. 红米手机5A怎么卡刷开发版获取Root权限
  19. 指纹识别在智能手机上的应用前景分析
  20. 短信字数的验证JAVA代码

热门文章

  1. 解决“您可以尝试添加 --skip-broken 选项来解决改问题“错误
  2. 手机怎么root权限
  3. php estr,eStar斩获世冠总冠军,猫神获FMVP,渡劫虽败但表现惊人
  4. oracle round负数,oracle Round函数用法
  5. PromiseA+规范之手写Promise
  6. python感叹号怎么加_NLTK在引号内标记感叹号和问号
  7. 魔兽怎么查服务器状态,如何查看魔兽世界服务器状态(查看游戏服务器状态的技巧)...
  8. iOS - 获取系统相册照片名称,路径以及各项信息
  9. 痛惜!年仅48岁,985高校博导因病逝世
  10. iOS_第三方字体的导入和使用