Vendor receipt interface code sample

更新时间:
复制 MD 格式

For MPS receipt configuration, see Configure Receipt Address.

Common methods

All vendor callback handlers in this document share the following utility methods:

  • extractRequestBody: reads the raw request body as a string

  • extractParameterFromRequest: parses form-encoded parameters into a map

  • outData: writes a JSON response

  • createResult: builds a standardized result object

    private String extractRequestBody(HttpServletRequest request,String channel) {
        StringBuilder builder = new StringBuilder();
        BufferedReader reader = null;
        try {
            reader = request.getReader();
            char[] charBuffer = new char[128];
            int bytesRead;
            while ((bytesRead = reader.read(charBuffer)) != -1) {
                builder.append(charBuffer, 0, bytesRead);
            }
        } catch (IOException e) {
            LoggerUtil.error(LOGGER, e, "["+channel+"]extractParameterFromRequest error!");
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    LoggerUtil.error(LOGGER, e, "["+channel+"]extractParameterFromRequest close reader error!");
                }
            }
        }
        return builder.toString();
    }
    
    public static Map<String, String> extractParameterFromRequest(HttpServletRequest request) {
        Map<String, String> paramsMap = new HashMap<String, String>();
        Map<String, String[]> parameterMap = request.getParameterMap();
        Iterator var3 = parameterMap.entrySet().iterator();
    
        while(var3.hasNext()) {
            Map.Entry<String, String[]> paramEntry = (Map.Entry)var3.next();
            String[] value = (String[])paramEntry.getValue();
            if (value.length > 0) {
                paramsMap.put(paramEntry.getKey(), value[0]);
            }
        }
        return paramsMap;
    }
    
    public static void outData(HttpServletResponse httpServletResponse, String resJsonString) {
        PrintWriter writer = null;
        try {
            httpServletResponse.setContentType("application/json");
            httpServletResponse.setCharacterEncoding("utf-8");
            writer = httpServletResponse.getWriter();
            writer.print(resJsonString);
            writer.flush();
        } catch (Exception e) {
            LoggerUtil.error(LOGGER, e, "outData error");
        } finally {
            if (writer != null) {
                writer.close();
            }
        }
    }
    
    private Result createResult(PushResultEnum resultEnum) {
        Result bindResult = new Result();
        bindResult.setReturnCode(resultEnum.getCode());
        bindResult.setReturnReason(resultEnum.getReason());
        return bindResult;
    }

HUAWEI

Reference: HUAWEI Documentation Center

The callback reads the request body and returns a JSON object with code and message fields to acknowledge receipt.

@ResponseBody
@RequestMapping(value = "/hms", produces = "application/json")
public JSONObject hmsCallback(HttpServletRequest httpServletRequest) {
    String requestBody = extractRequestBody(httpServletRequest,"hms");
    LoggerUtil.info(LOGGER,"hmsCallback content: {}", requestBody);
    ......
    JSONObject data = new JSONObject();
    data.put("code", "0");
    data.put("message", "success");
    return data;
}

Input parameter sample

{
	"statuses": [{
		"clientId": "103961659",
		"biTag": "0#5#1.1#console_1730792931023&b89351344a8e1f3b",
		"requestId": "173079293285270303027401",
		"appid": "103961659",
		"status": 0,
		"timestamp": 1730792933696,
		"token": "IQAAAACy0f7tAABvr6XzidO61rECNx-l-eog1VNUSyZcIo-lPc9ehqnEfIyuIsxxx"
	}]
}

HONOR

Reference: HONOR Documentation Center

The callback reads the request body and returns a JSON object with code and message fields to acknowledge receipt.

@ResponseBody
@RequestMapping(value = "/honor", produces = "application/json")
public JSONObject honorCallback(HttpServletRequest httpServletRequest) {
    String requestBody = extractRequestBody(httpServletRequest,"honor");
    LoggerUtil.info(LOGGER,"honorCallback content: {}", requestBody);
    ......
    JSONObject data = new JSONObject();
    data.put("code", "0");
    data.put("message", "success");
    return data;
}

Input parameter sample

{
	"statuses": [{
		"appid": "104420205",
		"biTag": "0#9#1.1#console_1730794397675&61db03efcf7fc862",
		"requestId": "104420205-4fe376129032981e38b60cf15ea77154",
		"status": 40000002,
		"timestamp": 1730794400089,
		"token": "BAEAAAAAB.jlTbS5YDOdhYQKfqri56O6iN7CbY5xxx"
	}]
}

HarmonyOS

Reference: HarmonyOS Documentation Center

The callback reads the request body and returns a JSON object with code and message fields to acknowledge receipt.

@ResponseBody
@RequestMapping(value = "/harmonyos", produces = "application/json")
public JSONObject harmonyosCallback(HttpServletRequest httpServletRequest) {
    String requestBody = extractRequestBody(httpServletRequest,"harmonyos");
    LoggerUtil.info(LOGGER,"harmonyosCallback content: {}", requestBody);
    ......
    JSONObject data = new JSONObject();
    data.put("code", "0");
    data.put("message", "success");
    return data;
}

Input parameter sample

{
	"statuses": [{
		"biTag": "0#11#null#console_1730776169529&6e8afeebfc8a45a0",
		"requestId": "173077617124367218031101",
		"appPackageName": "com.alipay.demo",
		"deliveryStatus": {
			"result": 5,
			"timestamp": 1730776171647
		},
		"pushType": 0,
		"token": "MAMzLgIkEUIGTtUAstOIywAAAGQAAAAAAAHmQeccAFJF5u8WsIrXbQOuxxxxxx"
	}]
}

Xiaomi

Reference: Xiaomi Surge OS Developer Platform

The callback accepts form-encoded data, extracts parameters into a map, and writes a success response using outData.

@RequestMapping(value = "/miui", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public void miuiCallback(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
    Map<String, String> parameterMap = extractParameterFromRequest(httpServletRequest);
    LoggerUtil.info(LOGGER, "miuiCallback content: {}", parameterMap);
    ......
    outData(httpServletResponse, PushResultEnum.SUCCESS.getReason());
}

Input parameter sample

{
	"data": {
		"smm67747730775367865gS": {
			"param": "0#4#1.1#console_1730775366036&671135c53a89dde2",
			"barStatus": "Enable",
			"type": 1,
			"targets": "oUU0LhUv9qgw2HEtgtWmxEqX9ldkWesBHQxxx",
			"timestamp": 1730775368258
		}
	}
}

OPPO

Reference: OPPO Open Platform - OPPO Developer Service Center

The callback reads the request body and returns a Result object built from PushResultEnum.SUCCESS.

@ResponseBody
@RequestMapping(value = "/oppo", produces = "application/json")
public Result oppoCallback(HttpServletRequest httpServletRequest) {
    String requestBody = extractRequestBody(httpServletRequest,"oppo");
    LoggerUtil.info(LOGGER,"oppoCallback content: {}", requestBody);
    ......
    return createResult(PushResultEnum.SUCCESS);
}

Input parameter sample

[{
	"appId": "30186722",
	"eventTime": "1730776852465",
	"eventType": "push_arrive",
	"messageId": "30186722-1-1-67298eb8f8686b014e6d1a83",
	"param": "0#7#1.1#console_1730776758644&282216e3998ff0d0",
	"registrationIds": "OPPO_CN_5e33c42e910xxx"
}]

vivo

Reference: vivo Open Platform

The callback reads the request body and returns a Result object built from PushResultEnum.SUCCESS.

@ResponseBody
@RequestMapping(value = "/vivo", produces = "application/json")
public Result vivoCallback(HttpServletRequest httpServletRequest) {
    String requestBody = extractRequestBody(httpServletRequest,"vivo");
    LoggerUtil.info(LOGGER,"vivoCallback content: {}", requestBody);
    ......
    return createResult(PushResultEnum.SUCCESS);
}

Input parameter sample

{
	"1303318675076815015": {
		"param": "0#8#1.1#console_1730776984809&8903e8823304c0bf",
		"targets": "v2-CRi5wSCKrfIr7yWs_BKTpim6RbPAnEMVah6xxx",
		"ackTime": 1730776986789,
		"ackType": "0"
	}
}