以下示例代码适用于 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务。
- :通知类和验证码短信,全国三网合一通道,5秒内到达,费用低至3.3分/条。可联系客服调整短信接收条数上限。
- :根据中国大陆手机号获取归属地信息
- :通过电信基站的系统识别码、网络识别码和基站号进行基站位置查询。
- :通过移动联通基站的小区号和基站号进行基站位置查询。
- :根据IP地址或者域名,查询该IP所属的区域
- :适用于优惠折扣、促销、推广、购物券等活动,需在短信最后加"退订回T"
API Shop(apishop.net)提供多达50款的常用第三方API,可以从github上下载代码示例合集:https://github.com/apishop/All-APIs
以上接口均包含PHP、Python、C#和Java等四种语言的代码示例,以 营销短信 API为例:
(1)基于PHP的 营销短信 API服务请求的代码示例
"", //目标手机号 "templateID" => "", //短信模板ID "params" => "", //短信变量字段,用于替换短信模板中的@字符,长度最大20 );$result = apishop_curl($method, $url, $headers, $params);If ($result) { $body = json_decode($result["body"], TRUE); $status_code = $body["statusCode"]; If ($status_code == "000000") { //状态码为000000, 说明请求成功 echo "请求成功:" . $result["body"]; } else { //状态码非000000, 说明请求失败 echo "请求失败:" . $result["body"]; }} else { //返回内容异常,发送请求失败,以下可根据业务逻辑自行修改 echo "发送请求失败";}/** * 转发请求到目的主机 * @param $method string 请求方法 * @param $URL string 请求地址 * @param null $headers 请求头 * @param null $param 请求参数 * @return array|bool */function apishop_curl(&$method, &$URL, &$headers = NULL, &$param = NULL){ // 初始化请求 $require = curl_init($URL); // 判断是否HTTPS $isHttps = substr($URL, 0, 8) == "https://" ? TRUE : FALSE; // 设置请求方式 switch ($method) { case "GET": curl_setopt($require, CURLOPT_CUSTOMREQUEST, "GET"); break; case "POST": curl_setopt($require, CURLOPT_CUSTOMREQUEST, "POST"); break; default: return FALSE; } if ($param) { curl_setopt($require, CURLOPT_POSTFIELDS, $param); } if ($isHttps) { // 跳过证书检查 curl_setopt($require, CURLOPT_SSL_VERIFYPEER, FALSE); // 检查证书中是否设置域名 curl_setopt($require, CURLOPT_SSL_VERIFYHOST, 2); } if ($headers) { // 设置请求头 curl_setopt($require, CURLOPT_HTTPHEADER, $headers); } // 返回结果不直接输出 curl_setopt($require, CURLOPT_RETURNTRANSFER, TRUE); // 重定向 curl_setopt($require, CURLOPT_FOLLOWLOCATION, TRUE); // 把返回头包含再输出中 curl_setopt($require, CURLOPT_HEADER, TRUE); // 发送请求 $response = curl_exec($require); // 获取头部长度 $headerSize = curl_getinfo($require, CURLINFO_HEADER_SIZE); // 关闭请求 curl_close($require); if ($response) { // 返回头部字符串 $header = substr($response, 0, $headerSize); // 返回体 $body = substr($response, $headerSize); // 过滤隐藏非法字符 $bodyTemp = json_encode(array( 0 => $body )); $bodyTemp = str_replace("\ufeff", "", $bodyTemp); $bodyTemp = json_decode($bodyTemp, TRUE); $body = trim($bodyTemp[0]); // 将返回结果头部转成数组 $respondHeaders = array(); $header_rows = array_filter(explode(PHP_EOL, $header), "trim"); foreach ($header_rows as $row) { $keylen = strpos($row, ":"); if ($keylen) { $respondHeaders[] = array( "key" => substr($row, 0, $keylen), "value" => trim(substr($row, $keylen + 1)) ); } } return array( "headers" => $respondHeaders, "body" => $body ); } else { return FALSE; }}复制代码
(2)基于Python的 营销短信 API服务请求的代码示例
#!/usr/bin/env python# -*- coding: utf-8 -*-# 测试环境: python2.7# 安装requests依赖 => pip install requests/ easy_install requests# 导入requests依赖import requestsimport jsonimport sysreload(sys)sys.setdefaultencoding('utf-8')def apishop_send_request(method, url, params=None, headers=None): ''' 转发请求到目的主机 @param method str 请求方法 @param url str 请求地址 @param params dict 请求参数 @param headers dict 请求头 ''' method = str.upper(method) if method == 'POST': return requests.post(url=url, data=params, headers=headers) elif method == 'GET': return requests.get(url=url, params=params, headers=headers) else: return Nonemethod = "POST"url = "https://api.apishop.net/communication/sms/sendMessage"headers = Noneparams = { "phoneNum":"", #目标手机号 "templateID":"", #短信模板ID "params":"", #短信变量字段,用于替换短信模板中的@字符,长度最大20}result = apishop_send_request(method=method, url=url, params=params, headers=headers)if result: body = result.text response = json.loads(body) status_code = response["statusCode"] if (status_code == '000000'): # 状态码为000000, 说明请求成功 print('请求成功:%s' % (body,)) else: # 状态码非000000, 说明请求失败 print('请求失败: %s' % (body,))else: # 返回内容异常,发送请求失败 print('发送请求失败')复制代码
(3)基于C#的 营销短信 API服务请求的代码示例
using System;using System.Collections.Generic;using System.IO;using System.Net;using System.Text;using System.Web.Script.Serialization;namespace apishop_sdk{class Program{ /** * 转发请求到目的主机 * @param method string 请求方法 * @param url string 请求地址 * @param params Dictionary请求参数 * @param headers Dictionary 请求头 * @return string **/ static string apishop_send_request(string method, string url, Dictionary param, Dictionary headers) { string result = string.Empty; try { string paramData = ""; if (param != null && param.Count > 0) { StringBuilder sbuilder = new StringBuilder(); foreach (var item in param) { if (sbuilder.Length > 0) { sbuilder.Append("&"); } sbuilder.Append(item.Key + "=" + item.Value); } paramData = sbuilder.ToString(); } method = method.ToUpper(); if (method == "GET") { url = string.Format("{0}?{1}", url, paramData); } HttpWebRequest wbRequest = (HttpWebRequest)WebRequest.Create(url); if (method == "GET") { wbRequest.Method = "GET"; } else if (method == "POST") { wbRequest.Method = "POST"; wbRequest.ContentType = "application/x-www-form-urlencoded"; wbRequest.ContentLength = Encoding.UTF8.GetByteCount(paramData); using (Stream requestStream = wbRequest.GetRequestStream()) { using (StreamWriter swrite = new StreamWriter(requestStream)) { swrite.Write(paramData); } } } HttpWebResponse wbResponse = (HttpWebResponse)wbRequest.GetResponse(); using (Stream responseStream = wbResponse.GetResponseStream()) { using (StreamReader sread = new StreamReader(responseStream)) { result = sread.ReadToEnd(); } } } catch { return ""; } return result; } class Response { public string statusCode; } static void Main(string[] args) { string method = "POST"; string url = "https://api.apishop.net/communication/sms/sendMessage"; Dictionary param = new Dictionary (); param.Add("phoneNum", ""); //目标手机号 param.Add("templateID", ""); //短信模板ID param.Add("params", ""); //短信变量字段,用于替换短信模板中的@字符,长度最大20 Dictionary headers = null; string result = apishop_send_request(method, url, param, headers); if (result == "") { //返回内容异常,发送请求失败 Console.WriteLine("发送请求失败"); return; } Response res = new JavaScriptSerializer().Deserialize (result); if (res.statusCode == "000000") { //状态码为000000, 说明请求成功 Console.WriteLine(string.Format("请求成功: {0}", result)); } else { //状态码非000000, 说明请求失败 Console.WriteLine(string.Format("请求失败: {0}", result)); } Console.ReadLine(); } }}复制代码
(4)基于Java的 营销短信 API服务请求的代码示例
package net.apishop.www.controller;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLEncoder;import java.util.HashMap;import java.util.Map;import com.alibaba.fastjson.JSONObject;/*** httpUrlConnection访问远程接口工具*/public class Api{ /** * 方法体说明:向远程接口发起请求,返回字节流类型结果 * param url 接口地址 * param requestMethod 请求方式 * param params 传递参数 重点:参数值需要用Base64进行转码 * return InputStream 返回结果 */ public static InputStream httpRequestToStream(String url, String requestMethod, Mapparams){ InputStream is = null; try{ String parameters = ""; boolean hasParams = false; // 将参数集合拼接成特定格式,如name=zhangsan&age=24 for (String key : params.keySet()){ String value = URLEncoder.encode(params.get(key), "UTF-8"); parameters += key + "=" + value + "&"; hasParams = true; } if (hasParams){ parameters = parameters.substring(0, parameters.length() - 1); } // 请求方式是否为get boolean isGet = "get".equalsIgnoreCase(requestMethod); // 请求方式是否为post boolean isPost = "post".equalsIgnoreCase(requestMethod); if (isGet){ url += "?" + parameters; } URL u = new URL(url); HttpURLConnection conn = (HttpURLConnection) u.openConnection(); // 请求的参数类型(使用restlet框架时,为了兼容框架,必须设置Content-Type为“”空) conn.setRequestProperty("Content-Type", "application/octet-stream"); //conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 设置连接超时时间 conn.setConnectTimeout(50000); // 设置读取返回内容超时时间 conn.setReadTimeout(50000); // 设置向HttpURLConnection对象中输出,因为post方式将请求参数放在http正文内,因此需要设置为ture,默认false if (isPost){ conn.setDoOutput(true); } // 设置从HttpURLConnection对象读入,默认为true conn.setDoInput(true); // 设置是否使用缓存,post方式不能使用缓存 if (isPost){ conn.setUseCaches(false); } // 设置请求方式,默认为GET conn.setRequestMethod(requestMethod); // post方式需要将传递的参数输出到conn对象中 if (isPost){ DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(parameters); dos.flush(); dos.close(); } // 从HttpURLConnection对象中读取响应的消息 // 执行该语句时才正式发起请求 is = conn.getInputStream(); }catch(UnsupportedEncodingException e){ e.printStackTrace(); }catch(MalformedURLException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } return is; } public static void main(String args[]){ String url = "https://api.apishop.net/communication/sms/sendMessage"; String requestMethod = "POST"; Map params = new HashMap (); params.put("phoneNum", ""); //目标手机号 params.put("templateID", ""); //短信模板ID params.put("params", ""); //短信变量字段,用于替换短信模板中的@字符,长度最大20 String result = null; try{ InputStream is = httpRequestToStream(url, requestMethod, params); byte[] b = new byte[is.available()]; is.read(b); result = new String(b); }catch(IOException e){ e.printStackTrace(); } if (result != null){ JSONObject jsonObject = JSONObject.parseObject(result); String status_code = jsonObject.getString("statusCode"); if (status_code == "000000"){ // 状态码为000000, 说明请求成功 System.out.println("请求成功:" + jsonObject.getString("result")); }else{ // 状态码非000000, 说明请求失败 System.out.println("请求失败:" + jsonObject.getString("desc")); } }else{ // 返回内容异常,发送请求失败,以下可根据业务逻辑自行修改 System.out.println("发送请求失败"); } }}复制代码