/**
     * 饿了么授权回调在此处响应,主要是获取授权码code
     */
    @GetMapping("/elm")
    public Object doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
       
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("<br>OK");
        String method=request.getParameter("method");
        //响应授权回调
        String code="";
        String state="";
        if("auth_back".equals(method)){
            code=request.getParameter("code");
            state=request.getParameter("state");
            
            
            System.out.println(code);
            System.out.println(state);
            
            BusinessInfo info= businessInfoService.getBusinessInfoBySigns(state);
            
        //    Token to = getToken(true, ElemeConstants.SANDBOX_APP_KEY, ElemeConstants.SANDBOX_APP_SECRET, ElemeConstants.SANDBOX_REDIRECT_URL, code);
            
            Token to = getToken(true, info.getElmAppKey(), info.getElmAppSecret(), ElemeConstants.SANDBOX_REDIRECT_URL, code);
            
                info.setElmAccessToken(to.getAccessToken());
                info.setElmExpiresIn(String.valueOf(to.getExpires())); 
                info.setElmTokenType(to.getTokenType());
                info.setElmRefreshToken(to.getRefreshToken());
                
                Date date=new Date();
                Calendar todayFirstDate=Calendar.getInstance();
              //  todayFirstDate.add(Calendar.DATE, 30);  //正式环境
                todayFirstDate.add(Calendar.DATE, 1);//沙滩环境
                Date firstDate = todayFirstDate.getTime();
               
                
                Calendar FailureTime=Calendar.getInstance();
              //  FailureTime.add(Calendar.DATE, 35);//正式环境
                FailureTime.add(Calendar.DATE, 15);//沙滩环境
                Date RefreshTokenFailureTime = FailureTime.getTime();
                
                
                info.setElmAccessTokenStartTime(date); //开始时间
                
                info.setElmAccessTokenFailureTime(firstDate);//失效时间
                
                info.setElmRefreshTokenStartTime(date);
                info.setElmRefreshTokenFailureTime(RefreshTokenFailureTime);
                
                
                
               
            int i=  businessInfoService.updateByPrimaryKeySelective(info); 
       
           
           
            
            System.out.println(to);
            if(i>0 && !"".equals(code)){
                
                 response.getWriter().write("<br>饿了么授权成功,可以正常接单啦!");
                
                
            }else{
                
                 response.getWriter().write("<br>饿了么授权失败!");
                 
                 
                
            }
            
            
        }
        
        response.getWriter().flush();
        response.getWriter().close();
        
        
        
        return method;
        
 
    }

public static Token getToken(boolean isSandbox, String appKey, String appSecret, String callbackUrl, String code) {
        Config config = new Config(isSandbox, appKey, appSecret);
        
        OAuthClient client = new OAuthClient(config);
        
        return client.getTokenByCode(code, callbackUrl);
    }
    
    
    @RequestMapping("/getAuthUrl")
    @ResponseBody
    public Map<String,String> getAuthUrl(Long businessId){
        Map<String,String> map=new HashMap<String,String>();
        BusinessInfo info= businessInfoService.selectByPrimaryKey(businessId);
        String url=null;
         if(info.getElmAppKey()!=null&&info.getElmAppSecret()!=null){
             
            /* Config config=ElemeUtil.getConfig(true);
                url=ElemeUtil.getAuthUrl(config);*/
             
             Config config=getConfig(true,info);
             url =getAuthUrl(config,info);
             
             
                System.out.println(url);
                map.put("url", url);
                map.put("result", "success");
                
         }else{
            
              map.put("result", "failure");
             map.put("msg", "饿了么必传参数不存在!");
             
         }
        
       
        return map;
    }
    
    
    /**
     * 获取配置类
     * @param isSandbox 是否沙箱
     * @return
     */
    public  Config getConfig(boolean isSandbox,BusinessInfo info){
        Config config=null;
        if(isSandbox==true){
         //   config=new Config(isSandbox,ElemeConstants.SANDBOX_APP_KEY,ElemeConstants.SANDBOX_APP_SECRET);
            config=new Config(isSandbox,info.getElmAppKey(),info.getElmAppSecret());
        }else{
            // TODO 填充正式环境数据
        }
        return config;
    }
    
    /**
     * 获取店铺授权URL地址
     * @desc 每次调用会产生一个新的授权码 需要记录code作为后续凭证
     */
    public  String getAuthUrl(Config config,BusinessInfo info){
        OAuthClient client = new OAuthClient(config);
     //   String authUrl = client.getAuthUrl(ElemeConstants.SANDBOX_REDIRECT_URL, "all", "1234");
        String authUrl = client.getAuthUrl(ElemeConstants.SANDBOX_REDIRECT_URL, "all", info.getSigns());
        return authUrl;

}
    
    
    
    /**
     * 授权码(企业)模式获取Token
     */
    private static Map<String, String> serverTokenTest(String  autoCode) {
        Map<String, String> map=null;
        Token token = client.getTokenByCode(autoCode,ElemeConstants.SANDBOX_REDIRECT_URL);
        if (token.isSuccess()) {
            map= setTokenInfo(token);
            System.out.println(map);
        } else {
            System.out.println("error_code: " + token.getError());
            System.out.println("error_desc: " + token.getError_description());
        }
        return map;
    }
    
    private static Map<String, String> setTokenInfo(Token token) {
        if (null != token && token.isSuccess()) {
            tokenMap.put("access_token", token.getAccessToken());
            tokenMap.put("token_type", token.getTokenType());
            tokenMap.put("expires_in", String.valueOf(token.getExpires()));
            tokenMap.put("refresh_token", token.getRefreshToken());
          
        }
        return tokenMap;
    }
    
    
    public static void getShopInfo(boolean isSandbox, String appKey, String appSecret, Token token, int shopId) {
        try {
            Config config = new Config(isSandbox, appKey, appSecret);
            ShopService shopService = new ShopService(config, token);
            OShop shop = shopService.getShop(shopId);
            System.out.println("店名:"+shop.getName()+", 地址:"+shop.getAddressText());
          
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

对接饿了么 获取授权相关推荐

  1. 一款可同时对接饿了么、美团、饿百零售的小票打印机

    在实际运营中,很多餐饮商家都会到这样的难题,小编经常会听到商家吐槽:刚刚买的高性能打印机居然只可以打印饿了么订单,不能打印美团外卖和饿百零售怎么办? 商家:我仅仅只是想要一台可以同时对接各大微信点餐系 ...

  2. 对接饿了么开放平台(Java)

    背景 最近在做一个项目,我负责对接饿了么开放平台,这也是第一次尝试接入开放平台,走了许多弯路,最后还是成功接入了. 这里借鉴了几篇博客,感谢大佬的指路. 关于注册和申请 https://blog.cs ...

  3. uni-app 对接微信小程序获取用户个人信息和获取用户手机号码

    第一次对接小程序授权的时候以为能一进入这个项目就要调用获取授权信息,后面写好逻辑之后提交审核,一直审核不通过,后面查了原因之后才发现不能一进入页面就调用授权,而且项目需要个人信息和手机号码两个都要获取 ...

  4. python 对接饿了么零售开放平台

    花了两天时间对接饿了么平台的接口,在这我要说说一些坑 1.平台的文档写得有时候看得不是很明天.特别时调试接口的时候 坑一:提交格式为:格式为:content-type=application/x-ww ...

  5. python-管家婆-接口获取授权认证码、利用授权认证码获取token信息、刷新token、部分接口调用

    最近在对接管家婆,文档上只有 java php .net 的例子,写了一个python的例子,里面部分数据按需填写. 加解密代码借鉴于知乎 python里面json对象转字符串,分号和逗号默认会有空格 ...

  6. 微信获取授权用户手机号

    微信获取授权用户手机号 用户登录获取用户的sessionKey 这一步主要是用JSCODE通过微信接口获得 解密 public String decodePhone(String encryptedD ...

  7. 开启邮箱的SMTP服务获取授权码(QQ邮箱、163邮箱)

    一.问题描述 需要使用QQ邮箱的SMTP服务授权码. 二.问题分析 登陆网页版QQ邮箱进行开启. 三.操作步骤 3.1.登陆自己的QQ邮箱 QQ邮箱官网登陆地址QQ邮箱,为亿万用户提供高效稳定便捷的电 ...

  8. QQ邮箱和163邮箱获取授权码

    QQ邮箱 登录网页版qq邮箱: 点击设置 点击账户: 找到SMTP设置: 开启后就能获取到授权码,注意保存 163网易邮箱 登录163邮箱后,同样找到设置: 然后开启服务 同样能获取授权码

  9. ELM饿了么获取COOKIE教程附吃货豆脚本

    ELM饿了么获取COOKIE教程 教程开始: 网页打开:https://h5.ele.me 登陆你的账号然后按F12 找这个地址:h5.ele.me/restapi/eus/v1/current_us ...

  10. 移动邮箱(@139.com):启用IMAP/SMTP服务+获取授权码

    移动邮箱(@139.com)依托于国内三大运营商之一的中国移动(CMCC),可使用手机号直接登录. 与阿里云邮箱(@alimail.com)/电信邮箱等相比,移动邮箱无法直接使用登录密码在第三方邮箱( ...

最新文章

  1. Shell 开发在运维中的经验总结
  2. 大数据处理框架之Strom:Storm集群环境搭建
  3. 天翼云从业认证(4.8)高性能计算解决方案
  4. oracle 中的几天后,几年后
  5. java反射机制详解_JAVA反射机制详解_JSP/Java编程_互联网开发技术网_传播最新的编程技术_php361.com...
  6. 飞鸽传书也具有五华石乡特色
  7. 软考系统架构师笔记-综合知识重点(一)
  8. 排序算法——十大排序算法的图示与实现
  9. 用内存映射在多个应用程序之间共享数据
  10. 机器学习技法总结(六)Decision Tree Hypothesis
  11. VS2010 代码自动对齐 快捷键
  12. flutter的路由工具类
  13. JS混入(mix-in)小案例
  14. vue 选项卡切换
  15. 大学三年软件工程专业学习感受
  16. mac os X中关于dayone缓存的实际文件位置
  17. python输出课程表
  18. 业务开发平台与SOA的统一论
  19. 【面试题】京东大数据面试真题汇总,收藏必备
  20. 自动计数报警器c语言程序,计数报警器电路设计方案汇总(多款模拟电路设计原理图详解)...

热门文章

  1. 开源资产管理软件OCS Inventory 实践
  2. android上的sip软电话
  3. 计算四则表达式(中缀式转后缀式,然后计算结果)
  4. 一个项目经理成长的心路历程,是谁在孤独的夜里抹眼泪
  5. 微信小程序-微信支付
  6. Axure软件页面介绍
  7. TCP紧急模式理解心得
  8. Bootstrap学习 - JavaScript插件
  9. python免安装版使用
  10. lgv20刷twrp_TWRP 新增对 Realme C2, LG V20等设备的支持