最近公司有集成配送业务,分享一下 ^ _ ^


/*@describe 蜂鸟配置类@params@return@author 何章怀晓@date 2020/7/10  10:55@other*/
public class ElemeOpenConfig {/***i<br> 联调环境地址 https://exam-anubis.ele.me/anubis-webapi <br> 线上环境地址* https://open-anubis.ele.me/anubis-webapi*/public static final String API_URL = "https://exam-anubis.ele.me/anubis-webapi";/*** 第三方平台 app_id*/public static final String APP_ID = "***";/*** 第三方平台 secret_key*/public static final String SECRET_KEY = "***";//回调函数public static final String PUSH_ORDER_NOTIFY_URL="***";private ElemeOpenConfig() {}
}

每次访问要带上身份标识,我们先生成token

  /*@describe  生成token@params []@return java.lang.String@author 何章怀晓@date 2020/7/10  11:57@other*/public String getToken() throws IOException {String url = ElemeOpenConfig.API_URL + RequestConstant.OBTAIN_TOKEN;String salt = String.valueOf(RandomUtils.getInstance().generateValue(1000, 10000));String sig = OpenSignHelper.generateSign(ElemeOpenConfig.APP_ID, salt, ElemeOpenConfig.SECRET_KEY);// 请求tokenList<BasicNameValuePair> paramsToken = new ArrayList<>();paramsToken.add(new BasicNameValuePair("app_id", ElemeOpenConfig.APP_ID));paramsToken.add(new BasicNameValuePair("salt", salt));paramsToken.add(new BasicNameValuePair("signature", sig));String tokenRes = "";try {tokenRes = HttpClient.get(url, paramsToken);} catch (Exception e) {throw new HttpClientRuntimeException("请求token出现异常", e);}logger.info(String.format("Response is %s", tokenRes));//生成String token = JsonUtils.getInstance().readValue(tokenRes, TokenResponse.class).getData().getAccess_token();logger.info(String.format("Generate token is: %s", token));List<PmsFntoken> pmsFntokens = pmsFntokenMapper.selectByExample(new PmsFntokenExample());PmsFntoken p = new PmsFntoken();if (pmsFntokens != null && pmsFntokens.size() > 0) {//保存token到本地p.setId(1);p.setFnToken(token);pmsFntokenMapper.updateByPrimaryKey(p);} else {p.setId(1);p.setFnToken(token);pmsFntokenMapper.insert(p);}return token;}

推送订单
``

  /*@describe 推送订单@params 店铺信息  收货地址信息  购物车信息  订单信息@return@author 何章怀晓@date 2020/7/10  14:11@other*/public void createOrder(YdShop ydShop, OmsOrder order, UmsMemberReceiveAddress address,List<OmsCartItem> omsCartItems) throws Exception {ElemeCreateOrderRequest.ElemeCreateRequestData data = new ElemeCreateOrderRequest.ElemeCreateRequestData();data.setUuid(UUID.randomUUID().toString());//门店信息ElemeCreateOrderRequest.TransportInfo transportInfo = new ElemeCreateOrderRequest.TransportInfo();transportInfo.setTransport_name(ydShop.getShopName());transportInfo.setTransport_address(ydShop.getAddressDetail());transportInfo.setTransport_tel(ydShop.getPhone());data.setChain_store_code(ydShop.getId().toString());transportInfo.setTransport_longitude(ydShop.getLng());transportInfo.setTransport_latitude(ydShop.getLat());transportInfo.setPosition_source(2);//客户信息ElemeCreateOrderRequest.ReceiverInfo receiverInfo = new ElemeCreateOrderRequest.ReceiverInfo();receiverInfo.setReceiver_address(address.getDetailAddress());receiverInfo.setReceiver_name(address.getName());receiverInfo.setReceiver_primary_phone(address.getPhoneNumber());receiverInfo.setReceiver_longitude(address.getLng());receiverInfo.setReceiver_latitude(address.getLat());receiverInfo.setPosition_source(2);//商品信息ElemeCreateOrderRequest.ItemsJson[] itemsJsons = new ElemeCreateOrderRequest.ItemsJson[omsCartItems.size()];for (int i = 0; i < omsCartItems.size(); i++) {//遍历每件商品ElemeCreateOrderRequest.ItemsJson item = new ElemeCreateOrderRequest.ItemsJson();item.setItem_name(omsCartItems.get(i).getProductName());item.setItem_quantity(omsCartItems.get(i).getQuantity());//实际支付价格item.setItem_actual_price(omsCartItems.get(i).getPrice());//原价item.setItem_price(omsCartItems.get(i).getPrice());//是否代购 0否item.setIs_agent_purchase(0);//需要打包item.setIs_need_package(1);itemsJsons[i] = item;}//门店信息data.setTransport_info(transportInfo);//收货人信息data.setReceiver_info(receiverInfo);//商品信息data.setItems_json(itemsJsons);//订单编号data.setPartner_order_code(order.getOrderSn());//回调函数data.setNotify_url(ElemeOpenConfig.PUSH_ORDER_NOTIFY_URL);// 1、普通商户即时送data.setOrder_type(1);//总金额data.setOrder_total_amount(order.getTotalAmount());//实付金额data.setOrder_actual_amount(order.getPayAmount());//订单备注data.setOrder_remark(order.getNote());//发票类型Integer billType = order.getBillType();// 是否需要发票0:不需要;1:需要if (billType == 0) {data.setIs_invoiced(0);} else if (billType == 1) {data.setIs_invoiced(1);//发票抬头data.setInvoice(order.getBillHeader());}//订单支付状态 0:未支付 1:已支付data.setOrder_payment_status(0);//在线支付data.setOrder_payment_method(1);// 是否需要承运商代收货款 0:否data.setIs_agent_payment(0);//商品件数data.setGoods_count(omsCartItems.size());ElemeCreateOrderRequest request = new ElemeCreateOrderRequest();request.setData(data);logger.info(String.format("urlencode string is %s", request.getData()));int salt = RandomUtils.getInstance().generateValue(1000, 10000);request.setApp_id(ElemeOpenConfig.APP_ID);request.setSalt(salt);// 注意添加的顺序,Map<String, Object> sigStr = new LinkedHashMap<>();// 需要使用前面请求生成的tokensigStr.put("app_id", ElemeOpenConfig.APP_ID);PmsFntoken pmsFntoken = null;List<PmsFntoken> pmsFntokens = pmsFntokenMapper.selectByExample(new PmsFntokenExample());if (pmsFntokens != null && pmsFntokens.size() > 0) {pmsFntoken = pmsFntokens.get(0);}if (pmsFntoken != null) {sigStr.put("access_token", pmsFntoken.getFnToken());      } else {getToken();pmsFntoken = pmsFntokenMapper.selectByPrimaryKey(1);sigStr.put("access_token", pmsFntoken.getFnToken());}sigStr.put("data", request.getData());sigStr.put("salt", salt);// 生成签名String sig = OpenSignHelper.generateBusinessSign(sigStr);request.setSignature(sig);String requestJson = JsonUtils.getInstance().objectToJson(request);logger.info(String.format("request json is %s", requestJson));String url = ElemeOpenConfig.API_URL + RequestConstant.ORDER_CREATE;try {HttpClient.postBody(url, requestJson);} catch (Exception e) {logger.error("creating order request occurs an exception!");throw new HttpClientRuntimeException("推送订单出现异常", e);}}
``

取消订单


```bash```bash
/*@describe 取消订单@params@return@author 何章怀晓@date 2020/7/13  14:31@other*/public void cancelOrder(OmsOrder order) throws IOException {String url = ElemeOpenConfig.API_URL;CancelOrderRequest.CancelOrderRequestData data = new CancelOrderRequest.CancelOrderRequestData();data.setOrder_cancel_description("");//订单取消原因代码(1:用户取消,2:商家取消)data.setOrder_cancel_reason_code(1);//订单编号data.setPartner_order_code(order.getOrderSn());//取消时间data.setOrder_cancel_time(new Date().getTime());CancelOrderRequest cancelOrderRequest = new CancelOrderRequest();cancelOrderRequest.setData(data);int salt = RandomUtils.getInstance().generateValue(1000, 10000);Map<String, Object> sigStr = new LinkedHashMap<>();      // 注意添加的顺序, 应该如下面一样各个key值顺序一致sigStr.put("app_id", ElemeOpenConfig.APP_ID);PmsFntoken pmsFntoken = null;List<PmsFntoken> pmsFntokens = pmsFntokenMapper.selectByExample(new PmsFntokenExample());if (pmsFntokens != null && pmsFntokens.size() > 0) {pmsFntoken = pmsFntokens.get(0);}if (pmsFntoken != null) {sigStr.put("access_token", pmsFntoken.getFnToken());} else {getToken();pmsFntoken = pmsFntokenMapper.selectByPrimaryKey(1);sigStr.put("access_token", pmsFntoken.getFnToken());}sigStr.put("data", cancelOrderRequest.getData());sigStr.put("salt", salt);// 生成签名String sig = OpenSignHelper.generateBusinessSign(sigStr);cancelOrderRequest.setSignature(sig);cancelOrderRequest.setApp_id(ElemeOpenConfig.APP_ID);cancelOrderRequest.setSalt(salt);String requestJson = JsonUtils.getInstance().objectToJson(cancelOrderRequest);url = url + RequestConstant.ORDER_CANCEL;try {String res = HttpClient.postBody(url, requestJson);logger.info(String.format("^_^, reponse data: %s", res));} catch (Exception e) {throw new HttpClientRuntimeException("取消订单出现异常", e);}}

回调==》此链接为外网访问才可以

  @ApiOperation("蜂鸟订单状态回调")@RequestMapping(value = "/pushOrderUrl", method = RequestMethod.POST)@ResponseBodypublic void pushOrderUrl(@RequestBody String json) {System.out.println("-------蜂鸟订单状态回调成功--------"+json);try{JSONObject jsonObject = JSONObject.parseObject(json);fnService.fnStatus(jsonObject);}catch (Exception e){e.printStackTrace();}}

然后就可以申请线上啦~~

java集成蜂鸟配送相关推荐

  1. 【JAVA零基础入门系列】Day2 Java集成开发环境IDEA

    [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...

  2. 6.Java集成开发环境

    转载请保留原文链接: http://dashidan.com/article/java/basic/6.html 6.Java集成开发环境 工欲善其事, 必先利其器.--<论语·卫灵公篇> ...

  3. Groovy与Java集成常见的坑--转

    https://yq.aliyun.com/articles/2357 groovy特性 Groovy是一门基于JVM的动态语言,同时也是一门面向对象的语言,语法上和Java非常相似.它结合了Pyth ...

  4. Groovy与Java集成常见的坑

    groovy特性 Groovy是一门基于JVM的动态语言,同时也是一门面向对象的语言,语法上和Java非常相似.它结合了Python.Ruby和Smalltalk的许多强大的特性,Groovy 代码能 ...

  5. 大数据之mongodb -- (2)java集成 MongoDB 3.2,使用Spring-data-mongodb进行集成

    Java集成MongoDB有很多方式,可以直接用mongodb的java驱动程序来发送语句到mongodb服务器,也可以用第三方的工具包来做. (1) 选择版本 选择的就是springdata集成的m ...

  6. yoyo跑_面对“跑腿服务坑”:悠悠跑腿、蜂鸟配送、快跑者,跑腿公司该何去何从?...

    公司品牌是一种识别标志.一种精神象征.一种价值理念,是品质优异的核心体现.新兴的跑腿经济对于品牌更是十分看重,对于跑腿公司来说,其品牌重要性主要体现在这几个方面. 品牌--跑腿公司的"摇钱树 ...

  7. snmp与java集成_轻松地与Java完全集成

    snmp与java集成 这里是如何不使用SQL,HQL,PHP,ASP,HTML,CSS或Javascript而是使用Vaadin的UI层和Speedment Stream ORM完全依赖Java编写 ...

  8. java 集成开发工具_最好的Java开发人员测试和集成工具

    java 集成开发工具 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控. 参加AppDynamics APM导览! 无论您是刚刚起步还是已经从事了一段时间,使用正确的工具进行编程都可 ...

  9. java集成lucene_将Lucene搜索集成到应用程序中

    java集成lucene 本文是我们名为" Apache Lucene基础知识 "的学院课程的一部分. 在本课程中,您将了解Lucene. 您将了解为什么这样的库很重要,然后了解L ...

最新文章

  1. 腾讯程序员最爱 C++,每年写 3 万行代码,70% 的技术 Leader 仍在持续编码
  2. 李开复从不缺席的AI夏令营开营:今年周志华俞勇张潼授课,1万人报名仅600入选...
  3. Go 两种形式的“类型转换”
  4. Dubbo负载均衡算法
  5. DataReceivedEventHandler 委托 接收调用执行进程返回数据
  6. 携带token的ajax请求方法封装
  7. 三个流行MySQL分支的对比
  8. python3使用pickle读取文件提示TypeError或者UnicodeDecodeError的解决办法
  9. pdf阅读器或知云文献阅读选中pdf文字乱码
  10. GB50174《电子信息系统机房设计规范》贯标培训通知
  11. MATLAB 插值函数运用 - interp1
  12. 在PHP项目中使用Standford Moss代码查重系统
  13. DDNS请求到底请求了什么
  14. python数据分析——网络流量的一些特性
  15. 仿百度文库文档上传页面的多级联动分类选择器
  16. hp 服务器硬盘背板 供电线,100元淘了一个HP 6位硬盘笼+背板+线,准备用旧机改一个DSM。...
  17. 2DPCA人脸识别--python
  18. LRC歌词制作LRC歌词制作
  19. 利用Python做简单的数据可视化2【二手房数据】
  20. 2021年3月8日:MyBatis框架学习笔记02:利用MyBatis实现CRUD操作

热门文章

  1. 高通平台Bootloader启动流程【转】
  2. QGIS编译(跨平台编译)之十五:geos编译(Windows、Linux、MacOS环境下编译)
  3. 通过winapi获取MD5值
  4. 小米手机抓取hci log
  5. RAFT:使用深度学习的光流估计
  6. ‘unsaf-eval‘ is not an allowed source of script
  7. 用uniapp做电商项目时使用vuex实现数据的全局共享来做购物车页面
  8. 「XCS」以专用控制器视角,探讨智能机器人领域发展与应用
  9. OpenWRT飞行计划
  10. matlab 归一化处理