万师傅开放平台文档中心
  1. 三、开发前必读
万师傅开放平台文档中心
  • 一、平台介绍
    • 平台介绍
  • 二、接入流程指引
    • 对接场景介绍
    • 物流类平台接入
    • ERP类平台接入
    • 电商类平台接入
    • 万师傅业务流程
    • 接口报错快速排查指南
  • 三、开发前必读
    • 万师傅名词说明
    • 版本更新说明
    • 1、申请授权秘钥
    • 2、API 接口参数规范
    • 3、API 签名
    • 4、目前支持的服务类目和类型
    • 5、接口 code 码
  • 四、开发接口列表
    • 最小化对接
      • 下单
        • 下单接口文档
        • 下单接口
      • 服务节点回传
        • 服务节点通知
    • 更多能力接口
      • 订单催服务
      • 商品库查询接口
      • 订单支付接口
      • 订单费用调整相关接口
        • 总包订单费用调整原因查询接口
        • 子订单审核接口
        • 增加子费用
          • 订单新增费用接口
          • 增加子费用示例
      • 完工验收相关接口
        • 订单完工验收接口
      • 退款相关接口
        • 订单退费接口
        • 退款仲裁
          • 仲裁类别查询接口
          • 仲裁撤销接口
          • 仲裁提交证据接口
          • 仲裁申请接口
      • 关单相关接口
        • 关单审核接口
        • 订单关闭接口
        • 第三方工单申请接口
      • 投诉相关接口
        • 获取支持赔付的银行卡列表接口
        • 发起投诉接口
        • 撤销投诉接口
        • 获取投诉类别接口
        • 提交举证接口
        • 补充举证
        • 赔付收款渠道
        • 获取投诉详情
      • 物流相关接口
        • 物流到货信息更新接口
      • 订单信息查询相关接口
        • 费用明细查询接口
        • 查询师傅完工图接口
        • 订单子费用明细查询接口
        • 订单费用明细查询
      • 更多服务节点回传
        • 定时单服务节点通知
        • 总包调整费用节点通知(非最小化对接内容)
        • 仲裁节点通知
        • 费用调整原因列表数据更新节点通知
        • 保外维修单节点通知
        • 催单回复通知
        • 总包发起关单申请通知
        • 旧件寄回通知
        • 二次上门节点通知
        • 总包审核关单申请回传
        • 售后单处理通知
        • 一口价订单服务节点通知
      • 售后单相关接口
        • 创建售后单接口
        • 拉取售后单接口
    • 测试环境查下订单服务节点
      • 查询订单服务节点
    • 测试环境推单给指定师傅接口
      • 测试环境-推送订单给指定师傅
    • 用户信息相关接口
      • 更改子用户角色接口
  1. 三、开发前必读

3、API 签名

API 签名规则#

签名规则: 将业务参数json串通过 base64 加密后 + companySecret 得到新的字符串, 最后将字符串进行md5(32位)加密,并将所有字符转换为大写.
companySecret 是企业秘钥,需找万师傅对接负责人获取

示例#

业务参数示例 【请求的业务参数都是 json 字符串】:
{"orderNo": "P5151145027"}
将业务参数进行 base64 加密
加密后的结果
eyJvcmRlck5vIjogIlA1MTUxMTQ1MDI3In0=
最终 busData 字段的值为: eyJvcmRlck5vIjogIlA1MTUxMTQ1MDI3In0=

生成签名#

示例:
String companySecret = "";
// 业务参数
JSONObject jsonObject = new JSONObject();
jsonObject.put("orderNo", "P00000001");
// 生成签名
String sign = SignUtils.buildSign(jsonObject.toJSONString(), companySecret);
System.out.println(sign);
Java 签名生成工具类
package com.wanshifu;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.DigestUtils;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

/**
 * @Description: 接口签名
 */
public class SignUtils {

    private static final char[] HEX_CHARS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

    /**
     * 生成签名
     * @param busJsonData
     * @param companySecret
     * @return
     */
    public static String buildSign(String busJsonData, String companySecret) {
        String busData = Base64.getEncoder().encodeToString(busJsonData.getBytes(StandardCharsets.UTF_8));
        String sign = busData + companySecret;
                return DigestUtils.md5DigestAsHex(sign.getBytes(StandardCharsets.UTF_8)).toUpperCase();

    }

    /**
     * 数据 md5 加密
     * @param data 需要加密的数据
     * @return
     */
    private static String md5(String data) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            byte[] digest = md5.digest(data.getBytes(StandardCharsets.UTF_8));
            return new String(encodeHex(digest));
        } catch (NoSuchAlgorithmException ex) {
            throw new IllegalStateException("Could not find MessageDigest with algorithm MD5", ex);
        }
    }


    private static char[] encodeHex(byte[] bytes) {
        char chars[] = new char[32];
        for (int i = 0; i < chars.length; i = i + 2) {
            byte b = bytes[i / 2];
            chars[i] = HEX_CHARS[(b >>> 0x4) & 0xf];
            chars[i + 1] = HEX_CHARS[b & 0xf];
        }
        return chars;
    }
}
修改于 2024-01-24 08:55:33
上一页
2、API 接口参数规范
下一页
4、目前支持的服务类目和类型
Built with