代码示例
以下{API_DOMAIN} 请用api.moziapi.com代替。
Java代码示例
本样例基于 java 的okhttp3 v3.11.0 发送请求。
package com.moss.demo;
import com.google.common.hash.Hashing;
import com.google.gson.Gson;
import okhttp3.*;
import org.apache.commons.codec.binary.Hex;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class SmsApiDemo {
public static class SmsURL {
//短信模板发送url
private static String templateUrl = "https://{API_DOMAIN}/sms/send/template";
//短信内容发送url
private static String contentUrl = "https://{API_DOMAIN}/sms/send/content";
}
public static class Merchant {
//商户号
private static String merchantId = "100001";
//对应apikey
private static String merchantApiKey = "ANW7R3UNvt8ZbVS9UBm0JduBphnBQUnI";
}
private static OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.build();
public static void main(String[] args) {
//示例商户订单id
String merchantOrderId;
//示例手机号
String mobiles = "11848138649";
/*************** 模板发送 ************************/
/* 样例模板 1003 */
/* 尊敬的用户,您的验证码为#code#! */
/**************************************************/
Integer tplId = 10003;
Map<String, Object> parameter = new HashMap<String, Object>();
parameter.put("code", 20190322);
merchantOrderId = "20190322-1001";
String templateResponse = sendTemplate(mobiles, tplId, parameter, merchantOrderId);
System.out.println("send template sms return : " + templateResponse);
/*************** 内容发送 ************************/
//短信签名 需要报备
String sign = "摩字短信";
//短信内容 必须与已有报备模板匹配
String content = "尊敬的用户,您的短信已送达!";
merchantOrderId = "20190322-1002";
String contentResponse = sendContent(mobiles, sign, content, merchantOrderId);
System.out.println("send content sms return : " + contentResponse);
}
/**
* 模板短信发送
*
* @param mobiles 手机号
* @param tplId 模板id
* @param parameter 模板参数,无填'{}'
* @param merchantOrderId 商户订单号
* @return
*/
private static String sendTemplate(String mobiles, Integer tplId, Map<String, Object> parameter, String merchantOrderId) {
Map<String, Object> param = new HashMap<String, Object>();
param.put("merchantOrderId", merchantOrderId);
param.put("tplId", tplId);
param.put("parameter", parameter);
param.put("mobiles", mobiles);
return postSms(SmsURL.templateUrl, param);
}
/**
* 内容短信发送
*
* @param mobiles 手机号
* @param sign 签名
* @param content 内容
* @param merchantOrderId 商户订单号
* @return
*/
private static String sendContent(String mobiles, String sign, String content, String merchantOrderId) {
Map<String, Object> param = new HashMap<String, Object>();
param.put("merchantOrderId", merchantOrderId);
param.put("sign", sign);
param.put("content", content);
param.put("mobiles", mobiles);
return postSms(SmsURL.contentUrl, param);
}
/**
* 发送短信
*
* @param url 发送url
* @param param data
* @return
*/
private static String postSms(String url, Map<String, Object> param) {
String data = new Gson().toJson(param);
String responseTxt = "";
try {
Headers head = getPostHead(buildSign(data, Merchant.merchantApiKey));
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8;"), data);
Request request = new Request.Builder().url(url).headers(head).post(requestBody).build();
Response response = okHttpClient.newCall(request).execute();
if (response.isSuccessful()) {
String text = response.body().string();
if (text != null) {
responseTxt = text;
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return responseTxt;
}
/**
* 构建请求头
*
* @param sign 动态签名
* @return
*/
public static Headers getPostHead(String sign) {
return new Headers.Builder()
.add("Accept", "application/json;charset=utf-8;")
.add("Content-Type", "application/json;charset=utf-8;")
.add("merchantId", Merchant.merchantId)
.add("sign", sign)
.build();
}
/**
* 生成请求签名
*
* @param data body数据
* @param apikey apikey
* @return
* @throws UnsupportedEncodingException
*/
private static String buildSign(String data, String apikey) throws UnsupportedEncodingException {
return Hex.encodeHexString(Hashing.sha1().hashBytes((data + apikey).getBytes("UTF-8")).asBytes());
}
}
Python代码示例
本样例基于 python 2.7 版本 发送请求。
#!/usr/bin/python
# coding=utf-8
import hashlib
import urllib3
import json
# 内容发送
def contentReq():
contentReqData = {'merchantOrderId': '20190605-1001', 'sign': '摩字短信', 'content': '尊敬的用户,您的短信已送达!', 'mobiles': '11848138649'}
url = 'https://{API_DOMAIN}/sms/send/content'
postSms(contentReqData, url)
# 模板发送
def tplReq():
tplReqData = {'merchantOrderId': '20190605-1001', 'tplId': 10003, 'parameter': '{\'code\':\'20190605\'}', 'mobiles': '11848138649'}
url = 'https://{API_DOMAIN}/sms/send/template'
postSms(tplReqData, url)
# 发送短信 data:请求数据 url:请求地址
def postSms(data, url):
# apikey
apiKey = 'ANW7R3UNvt8ZbVS9UBm0JduBphnBQUnI'
# 请求签名
sign = buildSign(str(data), apiKey)
# 请求header
req_header = {'Content-Type': 'application/json', 'merchantId': '100001', 'sign': sign}
# json作body数据
json_data = json.dumps(data)
# http请求
http = urllib3.PoolManager()
res = http.request('POST', url, body=json_data, headers=req_header)
print (res.status)
print (res.data)
# 签名生成
def buildSign(data, key):
return hashlib.sha1(data + key).hexdigest()
if __name__ == "__main__":
# 模板发送
tplReq()
# 内容发送
contentReq()
PHP代码示例
本样例基于 php 7.1.19 版本 发送请求。
<?php
//data: 请求数据
//apiKey: 请求秘钥
function buildSign($data, $apiKey)
{
return sha1($data . $apiKey);
}
//url: 请求地址
//data: 请求数据
//apikey: 请求秘钥
function posturl($url, $data, $apiKey)
{
$sign = buildSign($data, $apiKey);
//样例商户号 10001
//样例apiKey版本号 1
$headerArray = array("Content-type:application/json;charset='utf-8'", "Accept:application/json", "merchantId:10001", "sign:$sign");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$reponse = curl_exec($curl);
curl_close($curl);
return $reponse;
}
$url = "https://{API_DOMAIN}/sms/send/content";
$data = array(
"merchantOrderId" => "20190607895",
"mobiles" => "11220006753",
"sign" => "样例签名",
"content" => "样例短信内容");
$apiKey = "ANW7R3UNvt8ZbVS9UBm0JduBphnBQUnI";
print posturl($url, json_encode($data, true), $apiKey);
?>