云平台短信验证码通知短信java/php/.net开发实现

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cyzshenzhen/article/details/95751239

一、本文目的

  • 大部分平台都有一个接入发送短信验证码、通知短信的需求。虽然市场上大部分平台的接口都只是一个非常普通的HTTP-GET请求,但终归有需要学习和借鉴使用的朋友。
  • 本文的初衷是主要提供学习便利,方便初学者学习简单的http接口对接实现,由于各大短信通道服务商API参数基本相同,本Demo可以适当减少开发者对接短信通道接口的开发成本,提供参考。
  • 若有朋友不想从文章中复制源码,需要直接下载,源码已上传至GitHub。
  • GitHub传送门:https://github.com/yzchen0o0/demo-sms

二、发送短信接口请求

  • 请求参数模板
https://{{url}}?appKey={{app_key}}&appSecret={{app_secret}}&phones={{mobile}}&content=【{{sign}}】{{content}}
  • 示例
https://xxxyun.com/sendsms?appKey=aaaaa&appSecret=bbbb&phones=13888888888&content=【某云】您的验证码是:666666

三、参数描述

参数名 说明
url 请求地址
app_key 客户在供应商注册的唯一key码
app_secret 客户在供应商注册的唯一secret码
mobile 接收短信的用户手机号
sign 短信内容的产品名称

四、各开发语言实现

1、Java

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**
 * 短信发送工具类

 * <p>
 * 		http接口请求依赖 okhttp-3.14.2.jar, okio-1.17.2.jar
 *</p>
 */
public class SmsUtil {
	
	private static final String HOST = "https://api.zhuanxinyun.com/api/v2/sendSms.json";
	private static final String SIGN = "【签名】";
	private static final String APP_KEY = "app_key";
	private static final String APP_SECRET = "app_secret";

	/**
	 * 测试请求
	 * @param args
	 */
	public static void main(String[] args) {
		String mobile = "18566770000";
		String code = "666666";
		String body = sendSmsCode(mobile, code);
		System.out.println(body);
	}
	
	/**
	 * 发送短信验证码
	 * @param mobile		接收手机号
	 * @param code			验证码
	 */
	public static String sendSmsCode(String mobile, String code) {
		StringBuffer content = new StringBuffer().append("验证码:" ).append(code).append(",如非本人操作请忽略。");
		return sendSms(mobile, content.toString());
	}
	
	/**
	 * 发送短信信息
	 * @param mobile		接收手机号
	 * @param content		短信内容
	 */
	public static String sendSms(String mobile, String content) {
		// 拼接请求参数
		StringBuffer url = new StringBuffer().append(HOST).append("?appKey=").append(APP_KEY).append("&appSecret=")
				.append(APP_SECRET).append("&phones=").append(mobile).append("&content=").append(SIGN).append(content);
		// 封装请求参数
		Request request = new Request.Builder().url(url.toString()).get().build();
		OkHttpClient client = new OkHttpClient();
		try {
			// 发起请求
			Response response = client.newCall(request).execute();
			return response.body().string();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return null;
	}

}

2、php

<?php
        $host = "https://api.zhuanxinyun.com/api/v2/sendSms.json";
		$sign = "【签名】";
		$app_key = "app_key";
		$app_secret = "app_secret";
		$code = "6666";
		$phones = "18088888888";
        $content = "本次验证码是".code.",如非本人操作请忽略。";
		$uri = $host."?appKey=".$app_key."&appSecret=".$app_secret."&phones=".$phones."&content=".$sign.$content;
		$ch = curl_init();
		$timeout = 5;
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
		$contents = curl_exec($ch);
		curl_close($ch);
		var_dump($contents);//输入返回内容
?>

3、.Net

using System;
using System.IO;
using System.Net;
using System.Text;

namespace SmsCode
{
    class Program
    {
        private static  String HOST = "https://api.zhuanxinyun.com/api/v2/sendSms.json";
	    private static  String SIGN = "【签名】";
	    private static  String APP_KEY = "app_key";
	    private static  String APP_SECRET = "APP_SECRET";

        static void Main(string[] args)
        {
            string mobile = "手机号";
            string code = "内容";
            string body = sendSmsCode(mobile, code);
 
            Console.WriteLine(body);
        }
        /**
        * 发送短信验证码
        * @param mobile		接收手机号
        * @param code			验证码
        */
        public static String sendSmsCode(String mobile, String code)
        {
            StringBuilder content = new StringBuilder().Append("验证码:").Append(code).Append(",如非本人操作请忽略。");
            return sendSms(mobile, content.ToString());

           // StringBuilder
        }

        /**
        * 发送短信信息
        * @param mobile		接收手机号
        * @param content		短信内容
        */
        public static string sendSms(String mobile, String content)
        {
            string msg = string.Empty;
            // 拼接请求参数
            StringBuilder url = new StringBuilder().Append(HOST).Append("?appKey=").Append(APP_KEY).Append("&appSecret=")
                    .Append(APP_SECRET).Append("&phones=").Append(mobile).Append("&content=").Append(SIGN).Append(content);
            // 封装请求参数
            try
            {
                // 发起请求

                 msg = Request_GET(url.ToString(), "UTF-8");
            
            }
            catch (Exception ex)
            {
                msg=ex.Message;
            }

            return msg;
        }

        public static string Request_GET(string urlString, string encoding)
        {
            HttpWebRequest httpWebRequest = null;
            HttpWebResponse httpWebResponse = null;
            Stream stream = null;
            StreamReader streamReader = null;
            string result = string.Empty;
            try
            {
                httpWebRequest = (WebRequest.Create(urlString) as HttpWebRequest);
                httpWebRequest.Method = "GET";
                //httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; Maxthon 2.0)";
                httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                stream = httpWebResponse.GetResponseStream();
                streamReader = new StreamReader(stream, Encoding.GetEncoding(encoding));
                result = streamReader.ReadToEnd();
            }
            catch (SystemException ex)
            {
                result = "err:" + ex.Message;
            }
            finally
            {
                if (httpWebRequest != null)
                {
                    httpWebRequest.Abort();
                }
                if (httpWebResponse != null)
                {
                    httpWebResponse.Close();
                }
                if (stream != null)
                {
                    stream.Close();
                }
                if (streamReader != null)
                {
                    streamReader.Close();
                }
            }
            return result;
        }
    }
}

五、返回值

{"errorCode":"000000","errorMsg":"提交成功"}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xml>
    <errorCode>000000</errorCode>
    <errorMsg>提交成功</errorMsg>
</xml>

技术交流

在这里插入图片描述

My Blog

blog.guijianpan.com

展开阅读全文

Java实现短信验证码发送功能

08-03

项目结构如图所示:n![图片说明](https://img-ask.csdn.net/upload/201608/03/1470231448_507503.png)n1、创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法n/**n * 文件说明n * @Description:扩展说明n * @Copyright: 2015 dreamtech.com.cn Inc. All right reservedn * @Version: V6.0n */npackage com.demo.util;nnimport java.io.IOException;nimport java.util.Map;nnimport org.apache.commons.httpclient.HttpClient;nimport org.apache.commons.httpclient.HttpException;nimport org.apache.commons.httpclient.SimpleHttpConnectionManager;nimport org.apache.commons.httpclient.methods.GetMethod;nimport org.apache.commons.httpclient.methods.PostMethod;nimport org.apache.commons.httpclient.*;n/** n * @Author: feizin * @Date: 2015年4月17日 上午9:26:34 n * @ModifyUser: feizin * @ModifyDate: 2015年4月17日 上午9:26:34 n * @Version:V6.0n */npublic class HttpRequestUtil nn /**n * HttpClient 模拟POST请求n * 方法说明n * @Discription:扩展说明n * @param urln * @param paramsn * @return Stringn * @Author: feizin * @Date: 2015年4月17日 下午7:15:59n * @ModifyUser:feizin * @ModifyDate: 2015年4月17日 下午7:15:59n */n public static String postRequest(String url, Map params) n //构造HttpClient的实例n HttpClient httpClient = new HttpClient();n n //创建POST方法的实例n PostMethod postMethod = new PostMethod(url);n n //设置请求头信息n postMethod.setRequestHeader("Connection", "close");n n //添加参数n for (Map.Entry entry : params.entrySet()) n postMethod.addParameter(entry.getKey(), entry.getValue());n n n //使用系统提供的默认的恢复策略,设置请求重试处理,用的是默认的重试处理:请求三次n httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false);n n n n //接收处理结果n String result = null;n try n //执行Http Post请求n httpClient.executeMethod(postMethod);n n //返回处理结果n result = postMethod.getResponseBodyAsString();n catch (HttpException e) n // 发生致命的异常,可能是协议不对或者返回的内容有问题n System.out.println("请检查输入的URL!");n e.printStackTrace();n catch (IOException e) n // 发生网络异常n System.out.println("发生网络异常!");n e.printStackTrace();n finally n //释放链接n postMethod.releaseConnection();n n //关闭HttpClient实例n if (httpClient != null) n ((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown();n httpClient = null;n n n return result;n nn /**n * HttpClient 模拟GET请求n * 方法说明n * @Discription:扩展说明n * @param urln * @param paramsn * @return Stringn * @Author: feizin * @Date: 2015年4月17日 下午7:15:28n * @ModifyUser:feizin * @ModifyDate: 2015年4月17日 下午7:15:28n */n public static String getRequest(String url, Map params) n //构造HttpClient实例n HttpClient client = new HttpClient();n n //拼接参数n String paramStr = "";n for (String key : params.keySet()) n paramStr = paramStr + "&" + key + "=" + params.get(key);n n paramStr = paramStr.substring(1);n n //创建GET方法的实例n GetMethod method = new GetMethod(url + "?" + paramStr);n n //接收返回结果n String result = null;n try n //执行HTTP GET方法请求n client.executeMethod(method);n n //返回处理结果n result = method.getResponseBodyAsString();n catch (HttpException e) n // 发生致命的异常,可能是协议不对或者返回的内容有问题n System.out.println("请检查输入的URL!");n e.printStackTrace();n catch (IOException e) n // 发生网络异常n System.out.println("发生网络异常!");n e.printStackTrace();n finally n //释放链接n method.releaseConnection();n n //关闭HttpClient实例n if (client != null) n ((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown();n client = null;n n n return result;n nn2、再创建一个类,生成验证码,然后传递相应的参数n/**n * 文件说明n * @Description:扩展说明n * @Copyright: 2015 dreamtech.com.cn Inc. All right reservedn * @Version: V6.0n */npackage com.demo.util;nnimport java.net.URLEncoder;nimport java.util.HashMap;nimport java.util.Map;nn/** n * @Author: feizin * @Date: 2015年4月17日 上午9:24:48 n * @ModifyUser: feizin * @ModifyDate: 2015年4月17日 上午9:24:48 n * @Version:V6.0n */npublic class SendMsgUtil n n /**n * 发送短信消息n * 方法说明n * @Discription:扩展说明n * @param phonesn * @param contentn * @returnn * @return Stringn * @Author: feizin * @Date: 2015年4月17日 下午7:18:08n * @ModifyUser:feizin * @ModifyDate: 2015年4月17日 下午7:18:08n */n @SuppressWarnings("deprecation")n public static String sendMsg(String phones,String content)n //短信接口URL提交地址n String url = "短信接口URL提交地址";n n Map params = new HashMap();n n params.put("zh", "用户账号");n params.put("mm", "用户密码");n params.put("dxlbid", "短信类别编号");n params.put("extno", "扩展编号");n n //手机号码,多个号码使用英文逗号进行分割n params.put("hm", phones);n //将短信内容进行URLEncoder编码n params.put("nr", URLEncoder.encode(content));n n return HttpRequestUtil.getRequest(url, params);n n n /**n * 随机生成6位随机验证码n * 方法说明n * @Discription:扩展说明n * @returnn * @return Stringn * @Author: feizin * @Date: 2015年4月17日 下午7:19:02n * @ModifyUser:feizin * @ModifyDate: 2015年4月17日 下午7:19:02n */n public static String createRandomVcode()n //验证码n String vcode = "";n for (int i = 0; i < 6; i++) n vcode = vcode + (int)(Math.random() * 9);n n return vcode;n n n /**n * 测试n * 方法说明n * @Discription:扩展说明n * @param argsn * @return voidn * @Author: feizin * @Date: 2015年4月17日 下午7:26:36n * @ModifyUser:feizin * @ModifyDate: 2015年4月17日 下午7:26:36n */n public static void main(String[] args) n// System.out.println(SendMsgUtil.createRandomVcode());n// System.out.println("&ecb=12".substring(1));n System.out.println(sendMsg("18123456789,15123456789", "尊敬的用户,您的验证码为" + SendMsgUtil.createRandomVcode() + ",有效期为60秒,如有疑虑请详询400-069-2886(客服电话)【XXX中心】"));n nnnn现在是HttpRequestUtil中报如下错误:n1:n![图片说明](https://img-ask.csdn.net/upload/201608/03/1470231822_151094.png)nThe method getParams() is undefined for the type HttpClientn2:n![图片说明](https://img-ask.csdn.net/upload/201608/03/1470231935_248782.png)nThe method shutdown() is undefined for the type SimpleHttpConnectionManager 问答

没有更多推荐了,返回首页