开发指南 使用文档 管理中心 账户余额
申请成为开发者并获取app_key和app_secret
  • 如果没有开发者账号,请成为开发者
  • 如果已有开发者账号,请先登录,并进入到管理中心
API调用规范
  • 所有接口都采用HTTP协议
  • 所有接口都采用POST方式(包括查询接口)
  • 请求和响应的数据都为JSON格式。注:请设置Header的Content-Type为application/json
  • 采用UTF-8字符编码
  • 所有的接口必须app_secret进行接口签名,规则见接口签名规则

API请求参数说明

注:所有的API接口都包含如下参数(不同的接口只是参数body值不一样):

{{ developmentNotes_exampleCode }}
注:当没有业务参数的时候, body需要赋值为空字符串,即body:""。

API响应结果说明

{{ developmentNotes_responseSuccessCode }}
{{ developmentNotes_responseFailCode }}
注:返回结果以code的值为准。 接口返回码
环境说明:
  • 线上域名:{{ prodDomain }}
签名算法
  • 签名生成的通用步骤如下:
  • 第一步:对参数排序;将参与签名的参数按照键值(key)进行字典排序
  • 第二步:拼接请求字符串;将排序过后的参数,进行key和value字符串拼接
  • 第三步:拼接签名原文字符串;将拼接后的字符串首尾加上app_secret秘钥,合成签名字符串
  • 第四步:生成签名串;对签名字符串进行MD5加密,生成32位的字符串
  • 第五步:将签名生成的32位字符串转换为大写
签名示例
  • 以Java举例,假设签名的请求参数如下,其中涉及签名的app_secret假设为"abcdefg123":
{{ signature_exampleCode }}
签名生成过程:
  • 第一步:对参数排序
  • 首先对所有请求参数按参数名的字典序( ASCII 码)升序排序。注意:
    1)只按参数名进行排序,参数值保持对应即可,不参与比大小;
    2)按 ASCII 码比大小,如 originId要排在 order_id 后面,不是按字母表,也不是按数值。 用户可以借助编程语言中的相关排序函数来实现这一功能,如 JAVA 中的 TreeMap 函数。

    {{ signature_javaExampleCode1 }}

  • 第二步:拼接请求字符串
  • 此步骤生成请求字符串。 将把上一步排序好的请求参数格式化成“参数名称参数值”的形式,如对 app_key 参数,其参数名称为 "app_key" ,
    参数值为 "123456" , 因此格式化后就为 app_key123456 。

    app_key123456body{"order_id":"20170301000001","originId":"7334"}formatjsonsource_id73753timestamp1488363493v1.0

  • 第三步:拼接签名原文字符串
  • 此步骤生成签名原文字符串。
    签名原文字符串由请求字符串和app_secret组成
    签名原文串的拼接规则为:app_secret+请求字符串+app_secret

    abcdefg123app_key123456body{"order_id":"20170301000001","originId":"7334"}formatjsonsource_id73753timestamp1488363493v1.0abcdefg123

  • 第四步:生成签名串
  • 此步骤生成签名串。
    首先使用MD5对前面原文字符串进行签名
    对生成签名字符串进行MD5加密。结果为:19b88a0dc87ed19d15e3ca01739f3436


  • 第五步:将签名生成的32位字符串转换为大写
  • 将md5加密后的字符串转换为大写,结果为:19B88A0DC87ED19D15E3CA01739F3436

  • 注:生成最终的签名的字符串:19B88A0DC87ED19D15E3CA01739F3436作为请求参数的signature的值传入即可
{{ signature_javaExampleCode }}
public static void main(String[] args) {
      String test = "{\n" +
              "  \"body\": {\"orderNo\":\"0123050713524853465\",\"cancelReason\":\"不需要了\"},\n" +
              "  \"format\": \"json\",\n" +
              "  \"timestamp\": \"1488363493\",\n" +
              "  \"app_key\": \"1\",\n" +
              "  \"v\": \"v.10\",\n" +
              "  \"source_id\": \"1\"\n" +
              "}";

      JSONObject param = JSONObject.parseObject(test);
      String signature = getSignature(param, "1");
      System.out.println(signature);
  }

  public static String getSignature(JSONObject param, String app_secret) {
      /*1.字典序排序,并拼接字符串*/
      StringBuilder builder = new StringBuilder();
      TreeSet set = new TreeSet<>(param.keySet());
      set.forEach(key -> {
          builder.append(key);
          if (key.equals("body")) {
              String body = JSON.toJSONString(param.getJSONObject(key), SerializerFeature.MapSortField);
              builder.append(body);
          } else {
              builder.append(param.getString(key));
          }
      });

      String requestString = builder.toString();
      System.out.println("requestString==>" + requestString);
      /*2.拼接原文串*/
      String soruceString = app_secret + requestString + app_secret;
      System.out.println("soruceString==>" + soruceString);
      /*3.对原文串进行MD5加密并转成大写*/
      return RSAUtlis.MD5Encrypt(soruceString).toUpperCase();
  }

                        
返回码说明
流程说明
  • 1.调用创建订单接口进行单据生成,再入参中指定callback地址,单据状态发生变化会通过回调通知
  • 2.测试过程中可能不会有骑手进行接单,可以通过调用订单回调页面中的模拟请求进行回调
  • 3.测试账号:app_key:1;app_secret:1;商户ID:1
  • 注:测试账号仅供测试回调接口使用
  • 接口简介
    • 创建订单接口
    接口调用URL地址:{{prodDomain}}{{ createOrderUrl }}。
    请求参数说明
    • stationOrders请求参数:
    • goodsMain请求参数:
    请求示例
    {{ createOrder_requestCode }}
    返回结果
    • 返回JSON格式,以下为参数说明:
    • bodyMessage业务参数:
    {{ createOrder_responseSuccessCode }}
    接口简介
    • 每次订单状态发生变化时,会对添加订单接口中callback的URL进行回调。
    请求参数说明
    {{ callbackParam }}
    回调签名生成过程:
    • 第一步:将参与签名的字段的值进行升序排列
    • 例如:client_id:266593511423263;order_id:a12345;update_time:1473238189 进行字典排序。结果为:1473238189, 266593511423263, 'a12345'
    • 第二步:将排序过后的参数,进行字符串拼接
    • 结果为:1473238189266593511423263a12345
    • 第三步:对第二步连接的字符串进行md5加密
    • 结果为:bd181f9186db7252e9bec70faa5a5747
    {{ apiTypeDesc }}(仅在测试环境供调试使用)
    接口简介
    • 在测试环境中,可调用此接口{{ apiTypeDesc }},检测回调。
    (1) 接口调用URL地址:{{prodDomain}}{{ apiTypeUrl }}。 (2) 注:接口仅限于测试环境调试使用,且触发回调URL成功后,接口直接返回成功;否则,重复三次触发,每次间隔3秒,最后返回成功。
    请求参数说明
    请求示例
    {{ apiTypeParam }}
    返回结果
    • 返回JSON格式,以下为参数说明:
    接口简介
    • 查询订单的相关信息以及骑手的相关信息,具体信息参见参数说明。
    接口调用请求说明,URL地址:{{prodDomain}}{{ orderDetailUrl }}。
    请求参数说明
    {{ orderDetail_requestParam }}
    返回结果
    • 返回JSON格式,以下为参数说明:
    • bodyMessage业务参数:
    {{ orderDetail_response }}
    只有当订单被接单后才会有骑手信息,并且在待取货和配送中可以查询骑手实时的坐标信息。
    接口简介
    • 在订单待接单或待取货情况下,调用此接口可取消订单。
    接口调用请求说明,URL地址:{{prodDomain}}{{ cancelOrderUrl }}。
    请求参数说明
    {{ orderCanelParam }}
    返回结果
    • 返回JSON格式,以下为参数说明:
    • bodyMessage业务参数:
    以下参数请妥善保管
    • app_key: {{ app_key }}
    • app_secret: {{ app_secret }}
    • 商户ID: {{ businessId }}

    账户余额: {{ accountBalance }}

    充值 充值记录
    当前余额:¥ {{ accountBalance }}
    充值金额: 可前往收支明细页面查看充值记录
    支付宝
    我已了解,充值的款项只可用于物来物往消费,如需提现,需要您完成实名认证,且只支持人工打款。
    充值