解决阿里云短信服务json格式错误问题
当时使用模板如下
问题描述:
后经测试报JSON参数不合法:
{“Message”:“JSON参数不合法”,“RequestId”:“214367F1-5A92-4B20-8F3D-3009E733FE86”,“Code”:“isv.INVALID_JSON_PARAM”}
{
"Message": "JSON参数不合法",
"RequestId": "D16E26A2-0FE3-4FF6-8655-BD1756A75210",
"Code": "isv.INVALID_JSON_PARAM"
}
原因分析:
问题的分析:
后来发现代码json格式转换出错了,在json对象中, 要以其键名为模板中的变量名,对象的值为模板中的值.所以这里需要提供的参数要与阿里云短信服务中的模板变量名的参数名一致且是String类型的;
具体代码如下
解决方案:
public static void sendMessage(String phoneNumbers, String param) throws ClientException {
//填写自己的AccessKey ID 和 AccessKey Secret
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>",
"<accessSecret>");
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", phoneNumbers);
request.putQueryParameter("SignName", "云服务");
//填写自己的模版CODE,我这里是"SMS_205463975"
request.putQueryParameter("TemplateCode", "SMS_205463975");
//这里需要将模板变量名参数和传入的参数以json格式填写即可
request.putQueryParameter("TemplateParam","{\"code\":\""+param+"\"}");
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}
//具体测试代码
public class TestSms {
public static void main(String[] args) throws ClientException {
SMSUtils.sendMessage("138xxxxxxxx","
7832");
}
}