java对接语音通知API接口代码示例

import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import java.util.*;

public class test
{
    public static void main(String args[])
    {
        String url = "https://api.ihuyi.com/vm/Submit.json";

        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");

        HashMap<String, String> bodyArr = new HashMap<>();
        bodyArr.put("account", "xxxxxxxx"); //APIID(用户中心【云语音】-【语音通知】-【产品总览】查看)
        bodyArr.put("password", "xxxxxxxxx"); //1、APIKEY(用户中心【云语音】-【语音通知】-【产品总览】查看)2、动态密码(生成动态密码方式请看该文档末尾的说明)
        bodyArr.put("mobile", "136xxxxxxxx"); //支持中国内地手机号码及固话号码。手机号:11位,示例:139****0000。固话号码:{区号}{号码},示例:02151****29。接收手机号码,只能提交一个号码
        bodyArr.put("content", "您的订单号是:9633。已由顺风快递发出,请注意查收。"); //根据发送方式不同:1、完整内容方式提交完整的短信内容,如:您的订单号是:9633。已由顺风快递发出,请注意查收。2、模板变量方式模板中的变量内容,多个变量以英文竖线(|)隔开①单变量示例模板内容:您的订单已发出,订单号:【变量】,请注意查收。参数写法:content=1234最终短信为:您的订单已发出,订单号:1234,请注意查收。②多变量示例模板内容:订单号:【变量1】,联系人:【变量2】,手机号:【变量3】,金额:【变量4】。参数写法:content=20180515006|张三|136xxxxxxxx|100元最终短信为:订单号:20180515006,联系人:张三,手机号:136xxxxxxxx,金额:100元。
        bodyArr.put("templateid", 1361); //语音模板ID(使用模板变量方式发送时必填)调试阶段可使用系统默认模板ID:1361(模板内容为:您的订单号是:【变量】。已由【变量】发出,请注意查收。)
        bodyArr.put("time", "1623643787"); //Unix时间戳(10位整型数字,当使用动态密码方式时为必填)

        String queryString = convertToQueryString(bodyArr);

        try {
            Map<String, Object> response = sendRequest(url, headers, queryString, "POST");

            // 打印响应
            System.out.printf("状态码: %s%n", response.get("status"));
            System.out.printf("响应内容: %s%n", response.get("body"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Map<String, Object> sendRequest(String url, Map<String, String> headers, String queryString, String method) throws Exception {
        HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
            .uri(URI.create(url))
            .method(method, queryString.isEmpty() ? 
                HttpRequest.BodyPublishers.noBody() : 
                HttpRequest.BodyPublishers.ofString(queryString, StandardCharsets.UTF_8));
        headers.forEach(requestBuilder::header);
        HttpClient httpClient = HttpClient.newBuilder().build();
        HttpResponse response = httpClient.send(
            requestBuilder.build(),
            HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)
        );
        Map<String, Object> result = new HashMap<>();
        result.put("status", response.statusCode());
        result.put("body", response.body());
        return result;
    }

    public static String convertToQueryString(HashMap<String, String> map) {
        StringBuilder queryString = new StringBuilder();
        for (Map.Entry<String, String> entry : map.entrySet()) {
            String encodedKey = URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8);
            String encodedValue = URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8);
            if (queryString.length() > 0) {
                queryString.append("&");
            }
            queryString.append(encodedKey).append("=").append(encodedValue);
        }
        return queryString.toString();
    }

}