代码示例

以下{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);

?>

results matching ""

    No results matching ""