java集成蜂鸟配送

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


/*
 @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);
    // 请求token
    List<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<>();
    // 需要使用前面请求生成的token
    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", 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)
  @ResponseBody
  public void pushOrderUrl(@RequestBody String json) {

    System.out.println("-------蜂鸟订单状态回调成功--------"+json);
    try{
      JSONObject jsonObject = JSONObject.parseObject(json);
      fnService.fnStatus(jsonObject);
    }catch (Exception e){
      e.printStackTrace();
    }
  }

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

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值