个人网站的搭建(七)——java调用腾讯云API发送短信

    小孩子过年的时候,把所有的新衣服都穿上,也不管搭配不搭配。

    我学会一点小技能就想集成在我的网站上,不管合适不合适。

    在我的项目中集成一下短信功能。对比了几个服务商,我这种小打小闹的测试阶段的个人用户最适合腾讯云,因为他免费送100条。

一、申请API

    1. 注册腾讯云实名认证后,开通短信服务。

    2. 获取AppID和AppK待用。

    个人网站的搭建(七)——java调用腾讯云API发送短信_第1张图片

    3. 创建短信签名模板和短信正文模板。系统说半日内审核,我的不到五分钟就审核通过,点赞。

        审核过程中可能需要上传一些证明,我用的是公众号的截图。

 二、调用API

    1. 引入依赖包 

                
		
			com.github.qcloudsms
			qcloudsms
			1.0.2
		

    2. 发送短信工具类

public class SMSUtil {

    public void sendSMS(String phoneNumber) {
	// 短信应用SDK AppID     // 1400开头
       int appid = 14444444444;
        // 短信应用SDK AppKey
        String appkey = "aabbccddeeffgghhiijjkkllmmnn";
        // 需要发送短信的手机号码
       // phoneNumber = "13999999999";
        // 短信模板ID,需要在短信应用中申请
        int templateId = 12345684 ;
        // 签名,使用的是`签名内容`,而不是`签名ID`
        String smsSign = "短信签名";
        try {
	    //String[] params = {};//参数,验证码为5678,30秒内填写
            String[] params = {"123456","100"};//参数,验证码为123456,100秒内填写
            SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
            SmsSingleSenderResult result = ssender.sendWithParam("86", phoneNumber,
                    templateId, params, smsSign, "", "");  // 签名参数未提供或者为空时,会使用默认签名发送短信
            logger.info(result.toString());
        } catch (HTTPException e) {
            // HTTP响应码错误
            e.printStackTrace();

        } catch (JSONException e) {
            // json解析错误
            e.printStackTrace();
        } catch (IOException e) {
            // 网络IO错误
            e.printStackTrace();
        }catch (Exception e) {
            // 网络IO错误
            e.printStackTrace();
        }
    }
}


    3. 调用工具类

        在需要使用这个工具类的地方调用就可以了。

public class MybokeApplication  {


	public static void main(String[] args) {
		SMSUtil sms = new SMSUtil();
		sms.sendSMS("你的电话号码");
		
	}
}

    4. 效果如下

个人网站的搭建(七)——java调用腾讯云API发送短信_第2张图片

    三、一些坑

        工具类写好以后想测试一下,于是写了一个SMSUtilTest,然而运行@Test测试的时候,就会报错。

java.lang.NoSuchMethodError: org.json.JSONObject.put(Ljava/lang/String;Ljava/util/Collection;)Lorg/json/JSONObject;

	at com.github.qcloudsms.SmsSingleSender.sendWithParam(SmsSingleSender.java:111)
	at com.github.qcloudsms.SmsSingleSender.sendWithParam(SmsSingleSender.java:143)
	at com.byk.myboke.service.SMSUtilTest.sendSMS(SMSUtilTest.java:42)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:73)
	at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:83)
	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

    网上找了找资料,说是@Test中的JSONObject对象和SmsSingleSender.java中的JSONObject对象冲突了。估计是版本有问题吧。

    测试不过就直接调用。发现可以使用。

    

你可能感兴趣的:(SpringBoot,boke,Web开发,java)