全国外卖霸王餐开放API接口文档
一、接入说明
订单流转图

接入流程(对接前请先联系商务18072725357拉技术群)
1、接入域名
●测试环境:http://bwcapidev.msxshow.cn
●生产环境:找对接技术员提供
接入参数说明
●clientId:由接口提供方分配,接入时请联系相关人员提供
●clientSecret:由接口提供方分配,接入时请联系相关人员提供
●notifyUrl:由接口对接方提供(推送订单状态变更信息)
●deductUrl:由接口对接方提供(推送订单扣款信息)
●cpsQueryUrl:由接口对接方提供(供接口提供方查询cps订单信息)
2、API签名方法
//签名方法(params中value禁止传null)
public static String signForMap(Map<String, String> params, String clientSecret) {
if(params == null) {
return null;
}
List<String> paramKeyList = new ArrayList<String>();
for(Entry<String, String> entry : params.entrySet()) {
if(entry.getKey().equals("sign")) {
continue;
}
paramKeyList.add(entry.getKey());
}
Collections.sort(paramKeyList);
String signStr = "";
for(String key : paramKeyList) {
String value = (String)params.get(key);
signStr += key + value;
}
signStr = clientSecret + signStr + clientSecret;
String sign = MD5Util.md5(signStr);
return sign;
}
public class MD5Util {
public final static String md5(String s) {
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
try {
byte[] btInput = s.getBytes("UTF-8");
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
mdInst.update(btInput);
// 获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for(int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
}
catch(Exception e) {
e.printStackTrace();
return null;
}
}
}
3、mobile参数加密示例
public String encrypt(String data, String clientId) throws Exception {
//截取前16位作为key和v
String key = clientId.substring(0, 16);
String ivKey = clientId.substring(0, 16);
//创建密钥和IV参数
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(ivKey.getBytes("UTF-8"));
//创建cipher实例,指定AES/CBC/PKC55Padding模式
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
//加密数据
byte[] encryptedBytes = cipher.doFinal(data.getBytes("UTF-8"));
//使用Base64编码
String encryptMobile = Base64.getEncoder().encodeToString(encryptedBytes);
return encryptMobile;
}
4、回调通知签名示例
public static void main(String[] args) throws Exception {
String clientId = "12345678901234567890";
String clientSecret = "abcdefgabcdefgabcdefgabcdefg";
Long timestamp = System.currentTimeMillis();
JSONObject obj = new JSONObject();
obj.put("orderNum", "bwc2025082310303012345678");
obj.put("orderStatus", 1);
Map<String, String> params = new HashMap<String, String>();
params.put("clientId", clientId);
params.put("timestamp", timestamp + "");
params.put("data", obj.toString());
String sign = SignUtil.signForMap(params, clientSecret);
System.out.println(sign);
}
5、回调通知
POST请求,Content-Type:application/json
●回调请求参数
参数名 | 类型 | 必传 | 描述 |
clientId | String | 是 | 由接口提供方分配 |
timestamp | Long | 是 | 时间戳(毫秒) |
sign | String | 是 | 签名(由请求参数除去sign以外所有字段加密生成) |
data | String | 是 | 业务数据 |
●回调参数示例
{
"clientId": "12345678901234567890",
"data": {
"orderNum": "bwc2025082310303012345678",
"orderStatus": 1
},
"sign": "5473CCD94B086DBA390B3A73673CFD14",
"timestamp": 1755918723439
}
●应答示例
code = 200 代表业务方处理成功,平台将不在进行通知,其余code码将按一定间隔重试推送
{
"code":200,
"msg":"success"
}
●回调通知重试间隔
平台会发送POST请求,业务方在收到通知处理成功后请按照要求正确返回。如果反馈失败,将按照1min间隔重试通知
二、常见问题说明
订单超时时间
1、订单超时取消分为超时取消和过期取消。用户报名后三小时内未上传外卖单号会自动超时取消。
2、用户提交后次日12:00前未上传订单信息(订单完成截图和订单评价截图),订单会过期取消。接入方请注意处理己方订单状态。
订单扣款问题
1、订单完成前扣款,即订单提交审核后,不满足活动要求发生的扣款(例如实付不满,反馈折叠等),扣款金额会在订单扣款通知中通知,也可通过订单详情接口查询。
2、订单完成后扣款,即订单已经完成,扣款金额会在订单扣款通知中通知,用户可能已经拿到返现金额。订单一般是多平台参加返利活动或别的欺骗原因,商家不予结算,需要向用户追回返现金额。
活动是否需要评价
对于商家报名明确不需要评价的活动,在活动列表接口中给出无需评价标识。对于活动名额中部分需要评价的情况,在活动详情接口中根据当前活动反馈数量、报名用户以往分配到的反馈名额等数据来确定本次活动是否需要反馈。
三、活动接口
活动相关接口需要签名,要传下列公共Query参数:
参数名 | 类型 | 必传 | 描述 |
clientId | String | 是 | 由接口提供方分配 |
timestamp | Long | 是 | 时间戳(毫秒) |
sign | String | 是 | 签名(由请求参数除去sign以外所有字段加密生成,签名方法见接入流程) |
活动列表
GET /open/bwc/TaskAction/getList
Query参数
参数名 | 类型 | 必传 | 描述 |
mobile | String | 是 | AES加密的手机号或唯一标识(加密前最多32位),该参数需要urlEncode处理一下再传递 |
longitude | Double | 是 | 经度 |
latitude | Double | 是 | 维度 |
keywords | String | 否 | 活动搜索关键字 |
pageNum | Integer | 否 | 页码,不传默认1 |
pageSize | Integer | 否 | 每页数据,不传默认20 |
返回数据
●店铺
参数名 | 类型 | 必传 | 描述 |
storeId | Integer | 是 | 店铺ID |
platformCode | String | 是 | 平台code 美团:mt,饿了么:ele,京东:jd |
cover | String | 是 | 店铺图片 |
distance | Double | 是 | 店铺距离(千米) |
name | String | 是 | 店铺名 |
longitude | Double | 是 | 店铺经度 |
latitude | Double | 是 | 店铺维度 |
taskList | List | 是 | 活动列表 |
●活动
参数名 | 类型 | 必传 | 描述 |
id | Integer | 是 | 活动ID |
storeId | Integer | 是 | 店铺ID |
mealPrice | Double | 是 | 餐标 |
settlementAmount | Double | 是 | 结算金额 |
startTime | String | 是 | 开始时间 |
endTime | String | 是 | 结束时间 |
remainingQuota | Integer | 是 | 剩余名额 |
activeStatus | Integer | 是 | 活动状态 -1:今日已抢光 0:未开始 1:进行中 |
isPraise | Integer | 否 | 是否需要反馈 0:否 1:是 |
活动详情
GET /open/bwc/TaskAction/getDetail
Query参数
参数名 | 类型 | 必传 | 描述 |
mobile | String | 是 | AES加密的手机号或唯一标识(加密前最多32位),该参数需要urlEncode处理一下再传递 |
longitude | Double | 是 | 经度 |
latitude | Double | 是 | 维度 |
id | Integer | 是 | 活动ID |
返回数据
参数名 | 类型 | 必传 | 描述 |
id | Integer | 是 | 活动ID |
storeId | Integer | 是 | 店铺id |
name | String | 是 | 店铺名称 |
cover | String | 是 | 店铺封面 |
mealPrice | Double | 是 | 餐标 |
startTime | String | 是 | 活动开始时间 |
endTime | String | 是 | 活动结束时间 |
remind | String | 否 | 活动备注提示 |
remainingQuota | Integer | 是 | 剩余名额 |
address | String | 是 | 店铺地址 |
longitude | String | 是 | 经度 |
latitude | String | 是 | 纬度 |
distance | String | 是 | 店铺距离 |
settlementAmount | Double | 是 | 结算金额 |
appletJumpInfo | Object | 是 | 进店信息 |
praiseType | Integer | 是 | 反馈类型 0:用餐反馈,1:图文反馈,2:无需反馈 |
praiseName | String | 是 | 反馈类型名称 |
repurchaseInterval | Integer | 否 | 复购间隔,单位天。大于0表示有复购间隔限制 |
AppletJumpInfo
参数名 | 类型 | 必传 | 描述 |
appId | String | 否 | 小程序appId |
appSourceId | String | 否 | 小程序原始id |
path | String | 否 | 小程序路径 |
shortLink | String | 否 | 小程序短链 |
活动报名
GET /open/bwc/TaskAction/apply
Query参数
参数名 | 类型 | 必传 | 描述 |
mobile | String | 是 | AES加密的手机号或唯一标识(加密前最多32位),该参数需要urlEncode处理一下再传递 |
id | Integer | 是 | 活动ID |
longitude | Double | 是 | 经度 |
latitude | Double | 是 | 维度 |
返回数据
参数名 | 类型 | 必传 | 描述 |
orderNo | String | 是 | 订单号 |
四、订单接口
订单相关接口需要签名,要传下列公共Query参数:
参数名 | 类型 | 必传 | 描述 |
clientId | String | 是 | 由接口提供方分配 |
timestamp | Long | 是 | 时间戳(毫秒) |
sign | String | 是 | 签名(由请求参数除去sign以外所有字段加密生成,签名方法见接入流程) |
订单详情
GET /open/bwc/OrderAction/orderDetail
Query参数
参数名 | 类型 | 必传 | 描述 |
orderNo | String | 是 | 订单号 |
返回数据
参数名 | 类型 | 必传 | 描述 |
orderNo | String | 是 | 平台订单号 |
takeoutOrderNo | String | 否 | 外卖订单号 |
orderStatus | Integer | 是 | 订单状态 -3已驳回 -1已取消 0已报名 1已提交 2待审核 3已完成 |
mealPrice | Double | 是 | 餐标 必需 单位元,两位小数 |
preCompletionDeductionAmount | Double | 否 | 完成前扣款金额 单位元,两位小数。订单完成前扣款(实付不满扣款或反馈这折叠扣款) |
postCompletionDeductionAmount | Double | 否 | 完成后扣款金额 单位元,两位小数。订单完成后发现是骗子或者别的情况。会进行扣款,需要对用户进行追回 |
expireTime | String | 否 | 失效时间 格式yyyy-mm-dd HH:mm:ss |
reason | String | 否 | 驳回原因 ,取消原因 ,扣款原因 |
appletJumpInfo | Object | 是 | 一键进店信息 |
postCompletionDeductionList | List<Object> | 否 | 完成后扣款记录 可能存在多次部分扣款,多次部分扣只取最近一次扣款金额,不是累加的。有效数据只有1条。 |
settlementAmount | Double | 是 | 结算金额 |
praiseType | Integer | 是 | 反馈类型 0:用餐反馈,1:图文反馈,2:无需反馈 |
praiseName | String | 是 | 反馈类型名称 |
isSettled | Integer | 是 | 订单结算状态 必需 0:未结算 1:已结算 |
needAfterSaleImg | Integer | 否 | 驳回后 是否需要提交售后截图 0不需要售后图 1需要售后图 |
needVideo | Integer | 否 | 驳回后 是否需要提交录屏 0不需要,1需要 |
postCompletionDeduction
参数名 | 类型 | 必传 | 描述 |
deductionId | Integer | 是 | 扣款记录id |
orderNo | String | 是 | 平台订单号 |
deductionMoney | Double | 是 | 扣款金额(总) |
deductionReason | Double | 是 | 扣款原因 |
realDeductionMoney | Double | 是 | 扣款金额(本次) |
createTime | String | 是 | 扣款发生时间 |
提交外卖单号
GET /open/bwc/OrderAction/submitTakeoutNo
Query参数
参数名 | 类型 | 必传 | 描述 |
orderNo | String | 是 | 平台订单号 |
takeoutOrderNo | String | 是 | 外卖订单号 |
{
"msg": "success",
"code": 200
}订单提交
POST /open/bwc/OrderAction/submit
已报名、已驳回状态提交订单信息审核。
body参数
参数名 | 类型 | 必传 | 描述 |
orderNo | String | 是 | 平台订单号 |
feedbackImg | String | 否 | 评价截图 |
orderImg | String | 是 | 订单截图 |
返回数据
{
"msg": "success",
"code": 200
}
取消订单
GET /open/bwc/OrderAction/cancel
Query参数
参数名 | 类型 | 必传 | 描述 |
orderNo | String | 是 | 平台订单号 |
返回数据
{
"msg": "success",
"code": 200
}
预审核
GET /open/bwc/OrderAction/preAudit
如果接入方审核觉得该单可信,可调用该接口。我方审核订单时会参考该信息。
Query参数
参数名 | 类型 | 必传 | 描述 |
orderNo | String | 是 | 平台订单号 |
返回数据
{
"msg": "success",
"code": 200
}
五、回调通知
订单状态变更通知
data参数
参数名 | 类型 | 必传 | 描述 |
orderNo | String | 是 | 平台订单号 |
takeoutOrderNo | String | 是 | 外卖订单号 |
orderStatus | Integer | 是 | 订单状态 -3已驳回 -1已取消 0已报名 1已提交 2待审核 3已完成 |
updateTime | String | 是 | 更新时间 格式yyyy-MM-dd HH:mm:ss |
{
"clientId": "drfqwetyh435j78yrtet",
"data": {
"orderNo": "BWC20250926090257l46ph1kp",
"takeoutOrderNo": null,
"orderStatus": 1,
"updateTime": "2025-09-26 09:43:37"
},
"sign": "78E3C0000CDFFA7F0DC55497C1E618E5",
"timestamp": 1758851613770
}订单扣款通知
body参数
参数名 | 类型 | 必传 | 描述 |
deductionId | Integer | 是 | 扣款标识 |
orderNo | String | 是 | 平台订单号 |
deductionMoney | Double | 是 | 扣款金额 |
deductionReason | String | 是 | 扣款原因 |
createTime | String | 是 | 发生时间 |
{
"clientId": "c4e71e7e7e1ea39f",
"data": {
"deductionReason": "实付不足",
"orderNo": "2701848553767702386",
"createTime": "2025-11-05 09:43:37",
"deductionMoney": "1.8",
"deductionId": "1222"
},
"sign": "BFA79C1B809E7A4644E6D63CB1A334A6",
"timestamp": "1762320984346"
}六、cps相关
获取cps订单信息
get请求Query参数
参数名 | 类型 | 必传 | 描述 |
takeoutOrderNo | String | 是 | 外卖订单号 |
source | String | 是 | 外卖平台类型:mt,ele,jd |
返回数据
参数名 | 类型 | 必传 | 描述 |
takeoutOrderNo | String | 是 | 外卖订单号 |
orderStatus | Integer | 是 | 订单状态 -1:订单失效 1: 订单付款 2:订单结算 |
payAmount | Double | 是 | 实付金额 |
payTime | String | 是 | 付款时间 |
{
"payAmount": 10,
"takeoutOrderNo": "2701848553767702386",
"payTime": "2025-11-05 12:12:12",
"orderStatus": 1
}其他注意事项:
1、订单截图规范

2、评价截图规范(店铺名、日期时间、反馈内容)


