Java实现手机发送短信验证码

1、本功能根据互亿无线短信平台提供的对接接口,需要开通短信服务(可注册领取试用礼包),支持国内国外短信发送,平台连接:点击此连接

2、请求互亿无线短信接口参数说明:(支持get/post请求):

参数名称参数值描述是否必填
url请求路径
accountAPIID(账户ID)
passwordAPIKEY(账户密码)
mobile接收人手机号
content短信内容
time时间戳(使用动态密码是需填)
format返回格式(xml或json,默认xml)

3、通过http提交发送短信请求到互亿无线短信服务器后,响应参数(xml格式)如下:

参数名称类型描述
codeint返回值为2时,表示提交成功 (code值较多,可根据需要提示msg)
smsidstring当提交成功后,此字段为流水号,否则为0
msgstring提交结果描述

4、示例:

新建一个properties文件,将国内(国际)请求参数配置好(后期改动方便):

sms_url=http://106.ihuyi.cn/webservice/sms.php?method=Submit ##(国内请求路径)
cms_url=http://api.isms.ihuyi.com/webservice/isms.php?method=Submit ##(国外请求路径)
sms_user= admin ##(国内账户ID)
sms_pwd=WEX123 ##(密码)
cms_user=admin  ##(国际账户ID)
cms_pwd=GJCV123 ##(密码)

创建CommonUtils类读取properties文件中的配置信息

/**
 * 
 * 类名称:CommonUtils 
 * 类描述:
 * 创建人:xq
 * 修改备注:
 * @version 
 * 
 */
package com.utils;

import java.io.InputStream;
import java.util.Properties;

/**
 * @ClassName: CommonUtils 
 * @Description: 读取配置文件信息
* written by xq
 * 
 */
public class CommonUtils {

	private static String sms_url;
	
	private static String cms_url;
	
	private static String cms_user;
	
	private static String cms_pwd;

	private static String sms_user;

	private static String sms_pwd;
	
	static {
		try {
			Properties props = new Properties();
			// 加载
			ClassLoader cl = CommonUtils.class.getClassLoader();
			// 读取(properties文件名)
			InputStream is = cl.getResourceAsStream("nets.properties");

			// 加载信息
			props.load(is);
			sms_url = props.getProperty("sms_url");
			cms_url = props.getProperty("cms_url");
			cms_user=props.getProperty("cms_user");
			cms_pwd = props.getProperty("cms_pwd");
			sms_user = props.getProperty("sms_user");
			sms_pwd = props.getProperty("sms_pwd");
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	
   //提供get/set方法
	public static String getCms_user() {
		return cms_user;
	}

	public static String getCms_pwd() {
		return cms_pwd;
	}

	public static String getCms_url() {
		return cms_url;
	}

	public static String getSms_url() {
		return sms_url;
	}

	public static void setSms_url(String sms_url) {
		CommonUtils.sms_url = sms_url;
	}
	
	public static String getSms_pwd() {
		return sms_pwd;
	}

	public static String getSms_user() {
		return sms_user;
	}
	
	public static void setSms_pwd(String sms_pwd) {
		CommonUtils.sms_pwd = sms_pwd;
	}

	public static void setSms_user(String sms_user) {
		CommonUtils.sms_user = sms_user;
	}
	
}

创建VerifyCode类编写发送短信验证码代码(国际、国内):

package com.agent;

import com.utils.CommonUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Random;

public class VerifyCode {

    public static void main(String[] args) {
        //zone 区分国内国外短信
        getVerifyCode("15000000000","0018");
    }

    /**
     * 添加发送内容
     * @param mobileno
     * @param zone
     * @return
     */
    public static String  getVerifyCode(String mobileno,String zone) {
        // 获取验证码
        String verifycode = String.valueOf(makeRandomWithRange(100000, 999999));
        String s = "86";
        //如果区号不为86开头,说明是国际短信
        String content = "Your verification code is " + verifycode;
        String contents = "您的验证码是:" + verifycode + "。请不要把验证码泄露给其他人。";
        String code="";
        if (zone != null && !zone.equals(s)) {
         code = sendMessage( mobileno, content, zone);
        }else{
          code = sendMessage( mobileno, contents, zone);
        }
        if ("2".equals(code)) {
                return "发送成功";
            } else{
                return "发送失败";
            }
        }

    /**
     * 发送验证码
     * @param mobileno
     * @param content
     * @param zone
     * @return
     */
        public  static String sendMessage(String mobileno, String content,String zone) {
            boolean bclIsSend = false;
            String code = null;
            try {
                StringBuilder sb = new StringBuilder();
                String s="86";
                //国际国内区分
                if(zone!=null&&zone.equals(s)){
                    sb.append(CommonUtils.getSms_url());
                    sb.append("&account=").append(CommonUtils.getSms_user());
                    sb.append("&password=").append(CommonUtils.getSms_pwd());
                    sb.append("&mobile=").append(mobileno);
                }else{
                    sb.append(CommonUtils.getCms_url());
                    sb.append("&account=").append(CommonUtils.getCms_user());
                    sb.append("&password=").append(CommonUtils.getCms_pwd());
                    sb.append("&mobile=").append(zone+"%20"+mobileno);
                }
                String _content = URLEncoder.encode(content, "gbk");
                sb.append("&content=").append(_content.replaceAll("\\+", "%20"));
                String result = httpResult(sb.toString());
                Document doc;
                try {
                    doc = DocumentHelper.parseText(result);
                    Element root = doc.getRootElement();
                    code = root.elementText("code");
                    if ("2".equals(code)) {
                        bclIsSend = true;
                        System.out.println(mobileno + ":----短信提交成功。");
                    }else{
                        System.out.println(mobileno + ":----短信发送失败。");
                    }
                } catch (DocumentException e) {
                    e.printStackTrace();
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            return code;
        }

    /**
     * 获取6位验证码
     * @param min
     * @param max
     * @return
     */
    public static int makeRandomWithRange(int min, int max) {
        Random random = new Random();
        int num = random.nextInt(max) % (max - min + 1) + min;
        return num;
    }

    /**
     * 发送请求
     * @param url
     * @return
     */
    public static String httpResult(String url) {
    String result = "";
    try {

        URL reqURL = new URL(url);
        HttpURLConnection connection = (HttpURLConnection) reqURL.openConnection();
        connection.setRequestMethod("POST");
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setUseCaches(false);
        connection.setConnectTimeout(2000);
        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String temp = in.readLine();
        while (temp != null) {
            if (result != null) {
                result += temp;
            } else {
                result = temp;
            }

            temp = in.readLine();
        }
        result = URLDecoder.decode(result, "UTF-8");

    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
    return result;
}

    }

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity是一款跨平台的游戏开发引擎,通常用于开发各种类型的游戏应用程序。然而,Unity本身不提供直接获取手机号码的API。在Unity中,要获取手机号码,通常需要依赖于其他第三方库或平台提供的API。以下是一种可能的实现方式: 一种常见的方法是使用Unity与Android或iOS原生平台的交互能力来获取手机号码。在Unity中,可以通过使用C#调用Android或iOS的原生插件来获取手机号码。需要编写C#脚本,并在其中实现调用原生平台的API接口。 以Android平台为例,可以通过Unity与Android原生插件进行交互,使用Android TelephonyManager类的getLine1Number()方法获取设备的手机号码。首先,需要编写一个Android原生插件,实现获取手机号码的逻辑。然后,将该插件导入到Unity项目中,并在C#脚本中调用该插件的相关方法来获取手机号码。 对于iOS平台,可以使用Unity的iOS Native Plugin功能来实现类似的操作。首先,编写一个Objective-C类或Swift类,实现获取手机号码的逻辑。然后,将该类导入到Unity项目中,并通过Unity的iOS Native Plugin功能来调用该类的方法来获取手机号码。 需要注意的是,获取设备手机号码是涉及到用户隐私的操作,对于某些地区和国家可能会受到法律的限制。因此,在进行此类操作时,需要遵守相关的法律法规,并确保在获取用户手机号码时获得用户的明确授权。 综上所述,通过与Android或iOS原生平台的交互,可以在Unity中实现获取手机号码的功能。但需要注意合规性和法律要求,尊重用户隐私。 ### 回答2: Unity中获取手机号码的API并不是Unity自带的功能,因为Unity主要是用来开发游戏和应用程序的跨平台引擎,并不涉及直接获取手机号码的操作。但是在Unity开发过程中,可以通过调用第三方插件或者与手机端进行交互来获取手机号码。 一种常用的方法是使用Unity与Android或iOS设备进行交互,通过调用相关平台的API来获取手机号码。例如,在Android平台上,可以使用Unity的Android插件功能,通过Java代码调用Android的TelephonyManager类的相关方法来获取手机号码。而在iOS平台上,可以使用Unity的iOS插件功能,通过Objective-C或Swift代码调用iOS的CoreTelephony类的相关方法来获取手机号码。 另外一种方法是通过在Unity应用中使用短信验证的服务提供商的API来验证手机号码。这些服务提供商通常会提供相应的API文档和示例代码,可以根据文档来调用API以获取手机号码。这种方法通常需要在用户进行手机号码验证时才能获取到手机号码。 总之,Unity本身并不直接提供获取手机号码的API,但可以通过与手机平台进行交互或使用短信验证服务来获取手机号码。具体的实现方式会根据所使用的平台和需求来选择合适的方法。 ### 回答3: 在使用Unity获取手机号码的API时,通常需要结合第三方平台或服务商来实现。下面是一种简单的方法来获取手机号码: 1. 首先,你需要选择一个合适的第三方服务商来提供手机号码验证的功能。目前市面上有很多提供短信验证码的平台,比如阿里云、腾讯云、互亿无线等。 2. 注册一个账号并获得API密钥,这个密钥将用于在Unity中调用API。 3. 在Unity中创建一个新的C#脚本,用来处理手机号码验证的逻辑。 4. 在脚本中使用Unity提供的网络请求功能来向服务商的API发送请求。 5. 使用服务商提供的API接口,将要验证的手机号码作为参数传递给API。 6. 接着,服务商将会返回一个短信验证码到指定的手机号码。 7. 在Unity中,你可以使用输入框等UI组件来让用户输入短信验证码。 8. 当用户输入了验证码后,将验证码和手机号码再次发送给服务商的API进行验证。 9. 服务商将验证结果返回给Unity,你可以根据结果来处理相应的逻辑。 需要注意的是,具体的实现细节和步骤可能会因为选择的服务商不同而有所差异。因此,在使用Unity获取手机号码的API时,最好可以参考所选服务商提供的文档和示例代码来进行开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值