Loading...
문자와 API 연동규격 설명서

본 API 연동규격 설명서를 관심을 가져주셔서 감사합니다.
우리는 개발자가 사용할 수 있는 API를 제공하며, 액세스가 간단하고 사용하기 쉽게 만들어져 있습니다.
AES/MD5 암호화의 두 가지 방법으로 API보안 연결을 지원하고 있습니다.
각 플랫폼별로 호출 예제와 테스트를 제공하고 있으니 문서를 자세히 숙지하신 후에 사용하시기 바랍니다.

질문이 있으시면 고객 서비스, 기술 지원에 문의하십시오.

호출 설명

SMS API는 HTTP/HTTPS를 사용하며 REST 원칙을 따르도록 설계된 웹 서비스 인터페이스이며 거의 모든 클라이언트와 프로그래밍 언어를 사용하여 REST API와 상호 작용할 수 있습니다. 간단한 HTTP/HTTPS POST 요청을 보내 쉽게 액세스할 수 있습니다.

참고:

  • API를 사용하기 위해서는 회원가입 후에 "문자와" 사이트에 로그인 하신 후 "마이메뉴" -> "API관리" 에서 API신청을 하여 ACCESS키를 발급 받으셔야 합니다.
  • 계정 및 정보를 안전하게 유지하려면 기능이 온라인 상태가되기 전에 백그라운드로 이동하여 사용하려는 IP 주소를 IP 화이트리스트 목록에 추가합니다
  • 단일 계정(APIKEY) 호출 인터페이스는 최대 10TPS(Transactions Per Second)로 제한되며 추가 리소스가 필요한 경우 기술 지원에 문의하십시오
SMS 전송 인터페이스
기능 설명

이 인터페이스는 주로 SMS 단일 전송 시나리오에 적용되며, 특수 시나리오에서는 대량 전송을 지원할 수 있지만(최대 1,000개의 휴대폰 번호로 동일한 내용의 문자 메시지를 보낼 수 있지만 대량 전송은 다소 지연될 수 있습니다.)

팁:

  • 운영자 정책으로 인해 API를 개발하기 전에 백그라운드에서 서명, 템플릿 및 관련 설정(액세스 부팅 참조)을 완료합니다.
  • 확인 코드 문자 메시지, 휴대 전화 인증 링크, 악의적 인 공격을 피하기 위해 행동 확인 코드를 추가하시기 바랍니다.
  • 이 인터페이스의 QPS 제한은 초당 10회입니다. 제한을 초과하면 당일 API 호출이 제한됩니다. 합리적으로 호출하시기 바랍니다.

HTTP 헤더 정보:

Accept:application/json; charset=utf-8;
Content-Type:multipart/form-data; charset=utf-8;
요청
URL:https://api.munjawa.com/SmsApi/v1/SendSms
액세스 방법: POST
http 지원: https 및 http 액세스가 지원되며 https
사용하는 것이 좋습니다
요청 매개 변수입니다
입니다
매개 변수 이름입니다 유형입니다 필수 패스 여부 설명입니다 예입니다
header String 계정 설정 - API 관리 보기에서 사용자 고유 ID를 사용합니다 9b11127a9701975c734b8aee81ee3526
data String data의 데이터는 암호화되어야 합니다. 매개 변수: type - 전송 영역, apikind - 전송 유형, countrycode - 국가 코드, reservedtype - 약속 유형, reservedtime - 약속 시간, 모바일 - 사용자 휴대폰 번호, content - SMS 콘텐츠, contacts - 수신자 휴대폰 번호입니다. {"type":0,"apikind":1,"countrycode":82, "reservedtype":0,"reservedtime":"", "mobile":"01057420006","content":"The is a test", "contacts":"01057420000,01057420001"}

참고 사항:

  • API키를 올바르게 인코딩하여 헤더에 포함 시켜 전송하여야 합니다.
  • 이 인터페이스의 QPS 제한은 초당 50회입니다. 제한을 초과하면 당일 API 호출이 제한됩니다. 합리적으로 호출하시기 바랍니다.
요청의 예입니다
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace NetCoreTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string secretkey = "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA";
            string apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc";
            var res = UserSendSms(apikey, secretkey);
            Console.WriteLine(res. Result);
        }
        static async Task UserSendSms(string apikey, string secretkey)
        {
            string url = "https://munjawa.com/SmsApi/v1/SendSms";

            Dictionary values = new Dictionary();
            values. Add("type", "0");
            values. Add("apikind", "1");
            values. Add("countrycode", "82");
            values. Add("reservedtype", "0");
            values. Add("reservedtime", null);
            values. Add("mobile", "01057420006");
            values. Add("content", "SMS 테스트 보내기");
            values. Add("contacts", "01057420000,01057420001");

            string data_json = Newtonsoft.Json.JsonConvert.SerializeObject(values);

            NameValueCollection nameValues = new NameValueCollection();
            nameValues.Add("Header", apikey);

            try
            {
                string upload_data = await AesEncrypt(secretkey, data_json);
                nameValues.Add("Data", upload_data);
            }
            catch (Exception ex)
            {
                return ex. Message;
            }

            var json = HttpPost(url, nameValues). Result;

            return json;
        }
        static async Task HttpPost(string url, NameValueCollection postDataStr)
        {
            string responseData = "";
            try
            {
                using (var client = new WebClient())
                {
                    byte[] bytes = client. UploadValues(url, postDataStr);
                    responseData = Encoding.UTF8.GetString(bytes);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
            return responseData;
        }
        public static async Task AesEncrypt(string key, string data)
        {
            try
            {
                byte[] bKey = Convert.FromBase64String(key);
                byte[] aesKey = new byte[32];
                byte[] aesIV = new byte[16];

                Array.Copy(bKey, 0, aesKey, 0, 32);
                Array.Copy(bKey, 32, aesIV, 0, 16);

                AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
                aes.IV = aesIV;
                aes. Key = aesKey;
                aes. Mode = CipherMode.CBC;
                aes. Padding = PaddingMode.PKCS7;
                byte[] bdata = Encoding.UTF8.GetBytes(data);
                using (ICryptoTransform encrypt = aes. CreateEncryptor())
                {
                    byte[] destin = encrypt. TransformFinalBlock(bdata, 0, bdata. Length);
                    return Convert.ToBase64String(destin);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
        }
    }
}
                    
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace NETFramework
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string secretkey = "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA";
            string apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc";
            var res = UserSendSms(apikey, secretkey);
            Console.WriteLine(res. Result);
        }
        문자 메시지를 보냅니다
        static async Task UserSendSms(string apikey, string secretkey)
        {
            string url = "https://munjawa.com/SmsApi/v1/SendSms";

            Dictionary values = new Dictionary();
            values. Add("type", "0");
            values. Add("apikind", "1");
            values. Add("countrycode", "82");
            values. Add("reservedtype", "0");
            values. Add("reservedtime", null);
            values. Add("mobile", "01057420006");
            values. Add("content", "SMS 테스트 보내기");
            values. Add("contacts", "01057420000,01057420001");

            string data_json = Newtonsoft.Json.JsonConvert.SerializeObject(values);

            NameValueCollection nameValues = new NameValueCollection();
            nameValues.Add("Header", apikey);

            try
            {
                string upload_data = await AesEncrypt(secretkey, data_json);
                nameValues.Add("Data", upload_data);
            }
            catch (Exception ex)
            {
                return ex. Message;
            }

            var json = HttpPost(url, nameValues). Result;

            return json;
        }


        static async Task HttpPost(string url, NameValueCollection postDataStr)
        {
            string responseData = "";

            try
            {
                using (var client = new WebClient())
                {
                    byte[] bytes = client. UploadValues(url, postDataStr);
                    responseData = Encoding.UTF8.GetString(bytes);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
            return responseData;
        }

        public static async Task AesEncrypt(string key, string data)
        {
            try
            {
                byte[] bKey = Convert.FromBase64String(key);
                byte[] aesKey = new byte[32];
                byte[] aesIV = new byte[16];

                Array.Copy(bKey, 0, aesKey, 0, 32);
                Array.Copy(bKey, 32, aesIV, 0, 16);

                AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
                aes.IV = aesIV;
                aes. Key = aesKey;
                aes. Mode = CipherMode.CBC;
                aes. Padding = PaddingMode.PKCS7;
                byte[] bdata = Encoding.UTF8.GetBytes(data);
                using (ICryptoTransform encrypt = aes. CreateEncryptor())
                {
                    byte[] destin = encrypt. TransformFinalBlock(bdata, 0, bdata. Length);
                    return Convert.ToBase64String(destin);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
        }
    }
}
                    
<?php
  require_once 'AES.php';
    $securityKey = "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA";
    $aesTool = new Aes($securityKey, 'AES-256-CBC');
    $apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc"; apikey로 수정하고 공식 웹 사이트에 로그인하여 얻을 수 있습니다
    $ch = curl_init();
    /* 인증 방법 설정 */
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Accept:text/plain; charset=utf-8',
        'Content-Type:application/x-www-form-urlencoded', 'charset=utf-8'
    ));
    /* 반환 결과를 스트림으로 설정 */
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    /* 시간 초과 설정*/
    curl_setopt($ch, CURLOPT_TIMEOUT, 3000);
    /* 통신 방법 설정 */
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    문자 메시지를 보냅니다
    $paramsStr = '{"type":0,"apikind":1,"countrycode":82, "reservedtype":0,"reservedtime":"", "mobile":"01057420006","content":"The is a test", "contacts":" 01057420000,01057420001"}';
    $cipherText = $aesTool->encrypt($paramsStr);
    $data = array('header' => $apikey, 'data' => $cipherText);
    $json_data = UserSendSms($ch, $data);
    $array = json_decode($json_data, true);
    print_r($array);

    문자 메시지를 보냅니다
    function UserSendSms($ch, $data)
    {
        curl_setopt($ch, CURLOPT_URL, 'https://munjawa.com/SmsApi/v1/SendSms');
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
        $result = curl_exec($ch);
        $error = curl_error($ch);
        checkErr($result, $error);
        return $result;
    }
  function checkErr($result, $error)
  {
      if ($result === false) {
          echo 'Curl error: ' . $error;
      } else {
          echo '오류 없이 작업 완료';
      }
  }
?>
<?
    class Aes
        {
        /**
            * 암호화
            * @param string $plainText 일반 텍스트
            * @return bool|string
            */
        public function encrypt(string $plainText)
        {
            $originData = (openssl_encrypt($this->addPkcs7Padding($plainText, 16), $this->method, $this->securityKey, OPENSSL_NO_PADDING, $this->iv));
            return $originData === false ? false : base64_encode($originData);
        }
    }
?>
                    
 AesUtils.java
package com.example;
import java.lang.reflect.Array;
import java.security.Security;
import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class AesUtils {
    private static final String key = "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA";
    private static final String iv = "EJ9iIPhzB4I5UDfs";
    static {
        try {
            Security.addProvider(new BouncyCastleProvider());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static String encryptAES(String data) throws Exception {
        try {
            byte[] aesKey = AesUtils.decode(key);
            byte[] bkey = Arrays.copyOf(aesKey, 32);
            byte[] bIV = Arrays.copyOfRange(aesKey, 32, 48);
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
            SecretKeySpec keyspec = new SecretKeySpec(bkey, "AES");
            IvParameterSpec ivspec = new IvParameterSpec(bIV);
            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
            byte[] encrypted = cipher.doFinal(data.getBytes("UTF-8"));
            BASE64 트랜스코딩.
            return AesUtils.encode(encrypted).trim();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    public static String encode(byte[] byteArray) {
        return new String(new Base64().encode(byteArray));
    }
    public static byte[] decode(String base64EncodedString) {
        return new Base64().decode(base64EncodedString);
    }
}

 Main.java
package com.example;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Dictionary;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
public class Main {
    private static String URI_GET_SENDSMS = "https://munjawa.com/SmsApi/v1/SendSms";
    public static void main(String[] args) throws IOException, URISyntaxException {
        String apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc";
        System.out.println(Main.userSendSms(apikey));
    }
    /**
     * 문자 메시지를 보냅니다
     *
     * json 형식 문자열을 @return
     * @throws java.io.IOException
     */
    public static String userSendSms(String apikey) throws IOException, URISyntaxException {
        Map dataDic = new HashMap();
        dataDic.put("type", "0");
        dataDic.put("apikind", "1");
        dataDic.put("countrycode", "82");
        dataDic.put("reservedtype", "0");
        dataDic.put("reservedtime", null);
        dataDic.put("mobile", "01057420006");
        dataDic.put("content", "테스트입니다");
        dataDic.put("sendDate", "01057420000,01057420001");

        Gson gsonData = new Gson();
        String data = gsonData.toJson(dataDic);

        String enDataDic = "";
        try {
            enDataDic = AesUtils.encryptAES(data);
        } catch (Exception e) {
            e.printStackTrace();
        }

        Map params = new HashMap();
        params.put("header", apikey);
        params.put("data", enDataDic);

        return post(URI_GET_REPORTLIST, params);
    }
    public static String post(String url, Map paramsMap) {
        CloseableHttpClient client = HttpClients.createDefault();
        String responseText = "";
        CloseableHttpResponse response = null;
        try {
            HttpPost httpPost = new HttpPost(url);
            httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
            if (paramsMap != null && paramsMap.size()> 0) {
                List paramList = new ArrayList();
                for (Map.Entry param : paramsMap.entrySet()) {
                    NameValuePair pair = new BasicNameValuePair(param.getKey(), param.getValue());
                    paramList.add(pair);
                }
                httpPost.setEntity(new UrlEncodedFormEntity(paramList, "UTF-8"));
            }

            response = client.execute(httpPost);
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                responseText = EntityUtils.toString(entity);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return responseText;
    }
}

                    
var  crypto = require( 'crypto' );
var request = require('request').defaults({rejectUnauthorized: false});
var algorithm = 'aes-256-cbc';
const base64 = 'he8MTjKMVGSwcKMEqhZgyjy7PAZESXQENVv/eqjaZlXGG8cW2x2WW4J7vLdwuQj7=';
const buff = Buffer.from(base64, 'base64');
var key = buff.slice(0, 32);
var iv = buff.slice(-16);
var data = '{"type":0,"apikind":1,"countrycode":82,"reservedtype":0,"reservedtime":"","mobile":"01011111111","content":"The is a test","contacts":"01022222222,01033333333"} ';
function encrypt(data) {
    var  cipher = crypto.createCipheriv(algorithm, key, iv);
    var  cipherChunks = [];
    cipherChunks.push(cipher.update(data, 'utf8', 'base64'));
    cipherChunks.push(cipher.final('base64'));
    return cipherChunks.join(''); 
}
var dataList = {
    header: '97d568ee656a429ba2f6b60e5ca55694',
    data: encrypt(data)
}
request({
    url:'https://munjawa.com/SmsApi/v1/SendSms',
    method: "POST",
    json: true,
    form: dataList
}, function(error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body);
    }
}); 
                    
import requests
import base64
from Crypto.Cipher import AES
# from Crypto.Util.Padding import pad
# import time
import json
class SmsApiTest:
    def SendSms():
        post_url = 'https://munjawa.com/SmsApi/v1/SendSms'
        p_json = {
            'type': '0',
            'apikind': '1',
            'countrycode': '82',
            'reservedtype': '0',
            'reservedtime': 'null',
            'mobile': '01057420006',
            'content': 'this is a test',
            'contacts': '0057420000,01057420001'
        }

        e = a.aes_encrypt(json.dumps(p_json))
        request_param = {
            'header': '8ee3dc19bb124e7ea7eb0433c4f90ffc',
            'data': e
        }
        res = SmsApiTest.request_post(post_url, request_param)
        print(res)

    def request_post(url, param):
        fails = 0
        while True:
            try:
                if fails>= 20:
                    break

                req = requests.post(url=url,
                                    data=param,
                                    timeout=1000,
                                    verify=False)
                if req.status_code == 200:
                    text = req.json()
                else:
                    continue
            except Exception:
                fails += 1
                print('네트워크 연결 문제, 다시 요청 시도 중: ', fails)
            else:
                break
        return text
class Encrypt:
    def __init__(self, aeskey, iv):
        self.key = aeskey
        self.iv = iv
    def pkcs7padding(self, text):
        PKCS7로 채우기
        bs = 16
        length = len(text)
        bytes_length = len(text.encode('utf-8'))
        padding_size = length if (bytes_length == length) else bytes_length
        padding = bs - padding_size % bs
        padding_text = chr(padding) * padding
        self.coding = chr(padding)
        return text + padding_text
    def aes_encrypt(self, content):
        """ "AES 암호화""
        cipher = AES.new(self.key, AES. MODE_CBC, self.iv)
        # 일반 텍스트를 처리합니다
        content_padding = self.pkcs7padding(content)
        # 암호화
        encrypt_bytes = cipher.encrypt(content_padding.encode('utf-8'))
        # 다시 코딩합니다
        result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')
        return result
if __name__ == '__main__':
    apikey = '8ee3dc19bb124e7ea7eb0433c4f90ffc'
    key = '9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA'
    bkey = bytearray(base64.b64decode(key))
    aeskey = bkey[0:32]
    iv = bkey[32:]
    a = Encrypt(aeskey, iv)
    req = SmsApiTest
    res = req. SendSms()
                    
package main
import (
	"bytes"
	"crypto/aes"
	"crypto/cipher"
	"encoding/base64"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"net/url"
	"strings"
)
func main() {
	apikey := "8ee3dc19bb124e7ea7eb0433c4f90ffc"
	key := "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA"
	SendSmsPost(apikey, key)
}
func SendSmsPost(apikey, secretkey string) {
	url_post := "https://munjawa.com/SmsApi/v1/SendSms"
	if err != nil {
		log. Print("error:", err)
		return
	}
	orignData := []byte("{'type':'0','apikind':'1','countrycode':'82','reservedtype':'0','reservedtime':'null','mobile':'01057420006','content':'this is a test','contacts':' 0057420000,01057420001',}")
	log. Print("원본:", string(orignData))
	encrypted := AesEncryptCBC(orignData, bkey)
	encydata := base64. StdEncoding.EncodeToString(encrypted)
	log. Println(base64):, encydata
	decrypted := AesDecryptCBC(encrypted, bkey)
	log. Println([암호 해독 결과:], string(decrypted))
	urlValues := url. Values{}
	urlValues.Add("header", apikey)
	urlValues.Add("data", encydata)
	resp, _ := http. PostForm(url_post, urlValues)
	body, _ := ioutil. ReadAll(resp. Body)
	fmt. Println(string(body))
}
func AesEncryptCBC(origData []byte, key []byte) (encrypted []byte) {
	키 그룹화
	NewCipher 함수는 입력 k의 길이를 16, 24 또는 32로 제한합니다
	aesKey := key[0:32]
	block, _ := aes. NewCipher(aesKey)
	blockSize := block. BlockSize() // 키 블록의 길이를 가져옵니다
	aesIv := key[32:48]
	origData = PKCS7Padding(origData, blockSize) // 전체 코드를 보완합니다
	blockMode := cipher. NewCBCEncrypter(block, aesIv) // 암호화 모드
	encrypted = make([]byte, len(origData)) // 배열을 만듭니다
	blockMode.CryptBlocks(encrypted, origData) // 암호화
	return encrypted
}
PKCS7로 채웁니다
func PKCS7Padding(ciphertext []byte, blockSize int) []byte {
	padding := blockSize - len(ciphertext)%blockSize
	padtext := bytes. Repeat([]byte{byte(padding)}, padding)
	return append(ciphertext, padtext...)
}

func PKCS7UnPadding(origData []byte) []byte {
	length := len(origData)
	unpadding := int(origData[length-1])
	return origData[:(length - unpadding)]
}
                    
응답 매개 변수입니다
매개 변수 이름입니다 유형입니다 설명입니다 예입니다
code Integer 요청 상태 코드입니다. 0
message String 상태를 반환합니다 OK
detail String 호출 인터페이스의 성공 여부에 대한 설명입니다 SUCCESS
data String 데이터를 반환합니다 {"OrderId":26,"TotalCount":2,"PayAmount":50.000000000000000000000000000}
Json은 예제를 반환합니다
{
"code": 0,
"message":"OK",
"detail":"SUCCESS",
"data":"{"OrderId":26,"TotalCount":2,"PayAmount":50.000000000000000000000000000}"
}
상태 보고서를 가져옵니다
기능 설명

이 인터페이스가 켜져 있는 경우 72시간 동안 새 프로덕션에 대한 상태 보고서 데이터를 독립적으로 저장합니다. 이 인터페이스를 통해 새로 생성된 상태 보고서를 가져올 수 있습니다. 성공적으로 획득한 데이터는 삭제됩니다.

참고 사항:

  • API키를 올바르게 인코딩하여 헤더에 포함 시켜 전송하여야 합니다.
  • 이 인터페이스의 QPS 제한은 초당 10회입니다. 제한을 초과하면 당일 API 호출이 제한됩니다. 합리적으로 호출하시기 바랍니다.

HTTP 헤더 정보:

Accept:application/json; charset=utf-8;
Content-Type:application/x-www-form-urlencoded; charset=utf-8;
요청
URL:https://api.munjawa.com/SmsApi/v1/QueryReport
액세스 방법: POST
http 지원: https 및 http 액세스가 지원되며 https
사용하는 것이 좋습니다
요청 매개 변수입니다
매개 변수 이름입니다 유형입니다 필수입니다 설명입니다 예입니다
header String 계정 설정 - API 관리 보기에서 사용자 고유 ID를 사용합니다 9b11127a9701975c734b8aee81ee3526
data String date의 데이터는 암호화되어야 합니다. 매개 변수: sendDate - 보낸 날짜; {"sendDate":"2022-07-15"}
요청의 예입니다
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace NetCoreTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string secretkey = "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA";
            string apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc";
            var res = GetReport(apikey, secretkey);
            Console.WriteLine(res. Result);
        }
        static async Task GetReport(string apikey, string secretkey)
        {
            string url = "https://munjawa.com/SmsApi/v1/QueryReport";
            string date = "2022-07-15";

            Dictionary values = new Dictionary();
            values. Add("sendDate", date);
            string data_json = Newtonsoft.Json.JsonConvert.SerializeObject(values);

            NameValueCollection nameValues = new NameValueCollection();
            nameValues.Add("Header", apikey);

            try
            {
                string upload_data = await AesEncrypt(secretkey, data_json);
                nameValues.Add("Data", upload_data);
            }
            catch (Exception ex)
            {
                return ex. Message;
            }

            var json = HttpPost(url, nameValues). Result;

            return json;
        }
        static async Task HttpPost(string url, NameValueCollection postDataStr)
        {
            string responseData = "";
            try
            {
                using (var client = new WebClient())
                {
                    byte[] bytes = client. UploadValues(url, postDataStr);
                    responseData = Encoding.UTF8.GetString(bytes);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
            return responseData;
        }
        public static async Task AesEncrypt(string key, string data)
        {
            try
            {
                byte[] bKey = Convert.FromBase64String(key);
                byte[] aesKey = new byte[32];
                byte[] aesIV = new byte[16];

                Array.Copy(bKey, 0, aesKey, 0, 32);
                Array.Copy(bKey, 32, aesIV, 0, 16);

                AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
                aes.IV = aesIV;
                aes. Key = aesKey;
                aes. Mode = CipherMode.CBC;
                aes. Padding = PaddingMode.PKCS7;
                byte[] bdata = Encoding.UTF8.GetBytes(data);
                using (ICryptoTransform encrypt = aes. CreateEncryptor())
                {
                    byte[] destin = encrypt. TransformFinalBlock(bdata, 0, bdata. Length);
                    return Convert.ToBase64String(destin);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
        }
    }
}
                    
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace NETFramework
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string secretkey = "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA";
            string apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc";
            var res = GetReport(apikey, secretkey);
            Console.WriteLine(res. Result);
        }
        보고서를 가져옵니다
        static async Task GetReport(string apikey, string secretkey)
        {
            string url = "https://munjawa.com/SmsApi/v1/QueryReport";
            string date = "2022-07-15";

            Dictionary values = new Dictionary();
            values. Add("sendDate", date);
            string data_json = Newtonsoft.Json.JsonConvert.SerializeObject(values);

            NameValueCollection nameValues = new NameValueCollection();
            nameValues.Add("Header", apikey);

            try
            {
                string upload_data = await AesEncrypt(secretkey, data_json);
                nameValues.Add("Data", upload_data);
            }
            catch (Exception ex)
            {
                return ex. Message;
            }

            var json = HttpPost(url, nameValues). Result;

            return json;
        }


        static async Task HttpPost(string url, NameValueCollection postDataStr)
        {
            string responseData = "";

            try
            {
                using (var client = new WebClient())
                {
                    byte[] bytes = client. UploadValues(url, postDataStr);
                    responseData = Encoding.UTF8.GetString(bytes);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
            return responseData;
        }

        public static async Task AesEncrypt(string key, string data)
        {
            try
            {
                byte[] bKey = Convert.FromBase64String(key);
                byte[] aesKey = new byte[32];
                byte[] aesIV = new byte[16];

                Array.Copy(bKey, 0, aesKey, 0, 32);
                Array.Copy(bKey, 32, aesIV, 0, 16);

                AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
                aes.IV = aesIV;
                aes. Key = aesKey;
                aes. Mode = CipherMode.CBC;
                aes. Padding = PaddingMode.PKCS7;
                byte[] bdata = Encoding.UTF8.GetBytes(data);
                using (ICryptoTransform encrypt = aes. CreateEncryptor())
                {
                    byte[] destin = encrypt. TransformFinalBlock(bdata, 0, bdata. Length);
                    return Convert.ToBase64String(destin);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
        }
    }
}
                    
<?php
  require_once 'AES.php';
    $securityKey = "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA";
    $aesTool = new Aes($securityKey, 'AES-256-CBC');
    $apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc"; apikey로 수정하고 공식 웹 사이트에 로그인하여 얻을 수 있습니다
    $ch = curl_init();
    /* 인증 방법 설정 */
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Accept:text/plain; charset=utf-8',
        'Content-Type:application/x-www-form-urlencoded', 'charset=utf-8'
    ));
    /* 반환 결과를 스트림으로 설정 */
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    /* 시간 초과 설정*/
    curl_setopt($ch, CURLOPT_TIMEOUT, 3000);
    /* 통신 방법 설정 */
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    보고서 보내기를 가져옵니다
    $paramsStr = '{"sendDate":"2022-07-15"}';
    $cipherText = $aesTool->encrypt($paramsStr);
    $data = array('header' => $apikey, 'data' => $cipherText);
    $json_data = GetReport($ch, $data);
    $array = json_decode($json_data, true);
    print_r($array);

    보고서 보내기를 가져옵니다
    function GetReport($ch, $data)
    {
        curl_setopt($ch, CURLOPT_URL, 'https://munjawa.com/SmsApi/v1/QueryReport');
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
        $result = curl_exec($ch);
        $error = curl_error($ch);
        checkErr($result, $error);
        return $result;
    }
  function checkErr($result, $error)
  {
      if ($result === false) {
          echo 'Curl error: ' . $error;
      } else {
          echo '오류 없이 작업 완료';
      }
  }
?>
<?
    class Aes
        {
        /**
            * 암호화
            * @param string $plainText 일반 텍스트
            * @return bool|string
            */
        public function encrypt(string $plainText)
        {
            $originData = (openssl_encrypt($this->addPkcs7Padding($plainText, 16), $this->method, $this->securityKey, OPENSSL_NO_PADDING, $this->iv));
            return $originData === false ? false : base64_encode($originData);
        }
    }
?>
                    
 AesUtils.java
package com.example;
import java.lang.reflect.Array;
import java.security.Security;
import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class AesUtils {
    private static final String key = "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA";
    private static final String iv = "EJ9iIPhzB4I5UDfs";
    static {
        try {
            Security.addProvider(new BouncyCastleProvider());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static String encryptAES(String data) throws Exception {
        try {
            byte[] aesKey = AesUtils.decode(key);
            byte[] bkey = Arrays.copyOf(aesKey, 32);
            byte[] bIV = Arrays.copyOfRange(aesKey, 32, 48);
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
            SecretKeySpec keyspec = new SecretKeySpec(bkey, "AES");
            IvParameterSpec ivspec = new IvParameterSpec(bIV);
            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
            byte[] encrypted = cipher.doFinal(data.getBytes("UTF-8"));
            BASE64 트랜스코딩.
            return AesUtils.encode(encrypted).trim();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    public static String encode(byte[] byteArray) {
        return new String(new Base64().encode(byteArray));
    }
    public static byte[] decode(String base64EncodedString) {
        return new Base64().decode(base64EncodedString);
    }
}

 Main.java
package com.example;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Dictionary;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
public class Main {
    private static String URI_GET_REPORTLIST = "https://munjawa.com/SmsApi/v1/Queryreport";
    public static void main(String[] args) throws IOException, URISyntaxException {
        String apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc";
        System.out.println(Main.getReport(apikey));
    }
    /**
     * 전송 보고서를 가져옵니다
     *
     * json 형식 문자열을 @return
     * @throws java.io.IOException
     */
    public static String getReport(String apikey) throws IOException, URISyntaxException {
        Map dataDic = new HashMap();
        dataDic.put("sendDate", "2022-07-15");
        Gson gsonData = new Gson();
        String data = gsonData.toJson(dataDic);

        String enDataDic = "";
        try {
            enDataDic = AesUtils.encryptAES(data);
        } catch (Exception e) {
            e.printStackTrace();
        }

        Map params = new HashMap();
        params.put("header", apikey);
        params.put("data", enDataDic);

        return post(URI_GET_REPORTLIST, params);
    }
    public static String post(String url, Map paramsMap) {
        CloseableHttpClient client = HttpClients.createDefault();
        String responseText = "";
        CloseableHttpResponse response = null;
        try {
            HttpPost httpPost = new HttpPost(url);
            httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
            if (paramsMap != null && paramsMap.size()> 0) {
                List paramList = new ArrayList();
                for (Map.Entry param : paramsMap.entrySet()) {
                    NameValuePair pair = new BasicNameValuePair(param.getKey(), param.getValue());
                    paramList.add(pair);
                }
                httpPost.setEntity(new UrlEncodedFormEntity(paramList, "UTF-8"));
            }

            response = client.execute(httpPost);
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                responseText = EntityUtils.toString(entity);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return responseText;
    }
}

                    
var  crypto = require( 'crypto' );
var request = require('request').defaults({rejectUnauthorized: false});
var algorithm =  'aes-256-cbc';
const base64 = 'he8MTjKMVGSwcKMEqhZgyjy7PAZESXQENVv/eqjaZlXGG8cW2x2WW4J7vLdwuQj7=';
const buff = Buffer.from(base64, 'base64');
var key = buff.slice(0, 32);
var iv = buff.slice(-16);
var data =  '{"sendDate":"2022-07-20"}';
function encrypt(data) {
    var  cipher = crypto.createCipheriv(algorithm, key, iv);
    var  cipherChunks = [];
    cipherChunks.push(cipher.update(data, 'utf8', 'base64'));
    cipherChunks.push(cipher.final('base64'));
    return cipherChunks.join(''); 
}
var dataList = {
    header: '97d568ee656a429ba2f6b60e5ca55694',
    data: encrypt(data
}
request({
    url:'https://munjawa.com/SmsApi/v1/QueryReport',
    method: "POST",
    json: true,
    form: dataList
}, function(error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body);
    }
}); 
                    
import requests
import base64
from Crypto.Cipher import AES
# from Crypto.Util.Padding import pad
# import time
import json
class SmsApiTest:
    def GetReport():
        post_url = 'https://munjawa.com/SmsApi/v1/QueryReport'
        p_json = {'sendDate': '2022-07-15'}

        e = a.aes_encrypt(json.dumps(p_json))
        request_param = {
            'header': '8ee3dc19bb124e7ea7eb0433c4f90ffc',
            'data': e
        }
        res = SmsApiTest.request_post(post_url, request_param)
        print(res)

    def request_post(url, param):
        fails = 0
        while True:
            try:
                if fails>= 20:
                    break

                req = requests.post(url=url,
                                    data=param,
                                    timeout=1000,
                                    verify=False)
                if req.status_code == 200:
                    text = req.json()
                else:
                    continue
            except Exception:
                fails += 1
                print('네트워크 연결 문제, 다시 요청 시도 중: ', fails)
            else:
                break
        return text
class Encrypt:
    def __init__(self, aeskey, iv):
        self.key = aeskey
        self.iv = iv
    def pkcs7padding(self, text):
        PKCS7로 채우기
        bs = 16
        length = len(text)
        bytes_length = len(text.encode('utf-8'))
        padding_size = length if (bytes_length == length) else bytes_length
        padding = bs - padding_size % bs
        padding_text = chr(padding) * padding
        self.coding = chr(padding)
        return text + padding_text
    def aes_encrypt(self, content):
        """ "AES 암호화""
        cipher = AES.new(self.key, AES. MODE_CBC, self.iv)
        # 일반 텍스트를 처리합니다
        content_padding = self.pkcs7padding(content)
        # 암호화
        encrypt_bytes = cipher.encrypt(content_padding.encode('utf-8'))
        # 다시 코딩합니다
        result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')
        return result
if __name__ == '__main__':
    apikey = '8ee3dc19bb124e7ea7eb0433c4f90ffc'
    key = '9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA'
    bkey = bytearray(base64.b64decode(key))
    aeskey = bkey[0:32]
    iv = bkey[32:]
    a = Encrypt(aeskey, iv)
    req = SmsApiTest
    res = req. GetReport()
                    
package main
import (
	"bytes"
	"crypto/aes"
	"crypto/cipher"
	"encoding/base64"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"net/url"
	"strings"
)
func main() {
	apikey := "8ee3dc19bb124e7ea7eb0433c4f90ffc"
	key := "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA"
	GetReport(apikey, key)
}
func GetReport(apikey, secretkey string) {
	url_post := "https://munjawa.com/SmsApi/v1/QueryReport"

	bkey, err := base64. StdEncoding.DecodeString(secretkey)
	if err != nil {
		log. Print("error:", err)
		return
	}

	orignData := []byte("{'sendDate':'2022-07-15'}")
	log. Print("원본:", string(orignData))

	encrypted := AesEncryptCBC(orignData, bkey)
	encydata := base64. StdEncoding.EncodeToString(encrypted)
	log. Println(base64):, encydata
	decrypted := AesDecryptCBC(encrypted, bkey)
	log. Println([암호 해독 결과:], string(decrypted))

	urlValues := url. Values{}
	urlValues.Add("header", apikey)
	urlValues.Add("data", encydata)

	resp, _ := http. PostForm(url_post, urlValues)
	body, _ := ioutil. ReadAll(resp. Body)

	fmt. Println(string(body))
}
func AesEncryptCBC(origData []byte, key []byte) (encrypted []byte) {
	키 그룹화
	NewCipher 함수는 입력 k의 길이를 16, 24 또는 32로 제한합니다
	aesKey := key[0:32]
	block, _ := aes. NewCipher(aesKey)
	blockSize := block. BlockSize() // 키 블록의 길이를 가져옵니다
	aesIv := key[32:48]
	origData = PKCS7Padding(origData, blockSize) // 전체 코드를 보완합니다
	blockMode := cipher. NewCBCEncrypter(block, aesIv) // 암호화 모드
	encrypted = make([]byte, len(origData)) // 배열을 만듭니다
	blockMode.CryptBlocks(encrypted, origData) // 암호화
	return encrypted
}
PKCS7로 채웁니다
func PKCS7Padding(ciphertext []byte, blockSize int) []byte {
	padding := blockSize - len(ciphertext)%blockSize
	padtext := bytes. Repeat([]byte{byte(padding)}, padding)
	return append(ciphertext, padtext...)
}
func PKCS7UnPadding(origData []byte) []byte {
	length := len(origData)
	unpadding := int(origData[length-1])
	return origData[:(length - unpadding)]
}
                    
응답 매개 변수입니다
매개 변수 이름입니다 유형입니다 설명입니다 예입니다
code Integer 요청 상태 코드입니다. 0
message String 상태를 반환합니다 OK
detail String 호출 인터페이스의 성공 여부에 대한 설명입니다 SUCCESS
data String 데이터를 반환합니다 [{"OrderId":9,"Mobile":"01057420006","Content":"태양의 달 8월입니다~!\n태양같은 에너지를 당신께 선물합니다.\n활기찬 한달 보내세요.*^_^*","TotalCount":2,"SuccessCount":2, "FailCount":0,"CreateTime":"2022-07-15T14:36:17.16408"}, {"OrderId":10,"Mobile":"01057420006","Content":"aaaa", "TotalCount":4,"SuccessCount":4,"FailCount":0, "CreateTime":"2022-07-15T14:57:16.916"}]
Json은 예제를 반환합니다
{
"code":0,
"message":"OK",
"detail":"SUCCESS",
"data":"[{"OrderId":9,"Mobile":"01057420006", "Content":"태양의 달 8월입니다~!\n태양같은 에너지를 당신께 선물합니다.\n활기찬 한달 보내세요.*^_^*", "TotalCount":2,"SuccessCount":2,"FailCount":0,"CreateTime":"2022-07-15T14:36:17.16408"}, {"OrderId":10,"Mobile":"01057420006","Content":"aaaa","TotalCount":4,"SuccessCount":4, "FailCount":0,"CreateTime":"2022-07-15T14:57:16.916"}]"
}
전송 세부 정보를 가져옵니다
기능 설명

이 인터페이스가 켜져 있는 경우 72시간 동안 새 프로덕션에 대한 상태 보고서 데이터를 독립적으로 저장합니다. 이 인터페이스를 통해 새로 생성된 상태 보고서를 가져올 수 있습니다. 성공적으로 획득한 데이터는 삭제됩니다.

참고 사항:

  • API키를 올바르게 인코딩하여 헤더에 포함 시켜 전송하여야 합니다.
  • 이 인터페이스의 QPS 제한은 초당 10회입니다. 제한을 초과하면 당일 API 호출이 제한됩니다. 합리적으로 호출하시기 바랍니다.

HTTP 헤더 정보:

Accept:application/json; charset=utf-8;
Content-Type:multipart/form-data; charset=utf-8;
요청
URL:https://api.munjawa.com/SmsApi/v1/QueryReportDetail
액세스 방법: POST
http 지원: https 및 http 액세스가 지원되며 https
사용하는 것이 좋습니다
요청 매개 변수입니다
매개 변수 이름입니다 유형입니다 필수입니다 설명입니다 예입니다
header String 계정 설정 - API 관리 보기에서 사용자 고유 ID를 사용합니다 9b11127a9701975c734b8aee81ee3526
data String data의 매개 변수는 암호화가 필요합니다. 매개변수: orderid - 주문 번호; {"orderid":"14"}
요청의 예입니다
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace NetCoreTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string secretkey = "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA";
            string apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc";
            var res = GetReportDetail(apikey, secretkey);
            Console.WriteLine(res. Result);
        }
        static async Task GetReportDetail(string apikey, string secretkey)
        {
            string url = "https://munjawa.com/SmsApi/v1/QueryReportDetail";
            string orderid = "14";
            Dictionary values = new Dictionary();
            values. Add("orderid", orderid);
            string data_json = Newtonsoft.Json.JsonConvert.SerializeObject(values);
            NameValueCollection nameValues = new NameValueCollection();
            nameValues.Add("Header", apikey);
            try
            {
                string upload_data = await AesEncrypt(secretkey, data_json);
                nameValues.Add("Data", upload_data);
            }
            catch (Exception ex)
            {
                return ex. Message;
            }

            var json = HttpPost(url, nameValues). Result;

            return json;
        }
        static async Task HttpPost(string url, NameValueCollection postDataStr)
        {
            string responseData = "";
            try
            {
                using (var client = new WebClient())
                {
                    byte[] bytes = client. UploadValues(url, postDataStr);
                    responseData = Encoding.UTF8.GetString(bytes);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
            return responseData;
        }
        public static async Task AesEncrypt(string key, string data)
        {
            try
            {
                byte[] bKey = Convert.FromBase64String(key);
                byte[] aesKey = new byte[32];
                byte[] aesIV = new byte[16];

                Array.Copy(bKey, 0, aesKey, 0, 32);
                Array.Copy(bKey, 32, aesIV, 0, 16);

                AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
                aes.IV = aesIV;
                aes. Key = aesKey;
                aes. Mode = CipherMode.CBC;
                aes. Padding = PaddingMode.PKCS7;
                byte[] bdata = Encoding.UTF8.GetBytes(data);
                using (ICryptoTransform encrypt = aes. CreateEncryptor())
                {
                    byte[] destin = encrypt. TransformFinalBlock(bdata, 0, bdata. Length);
                    return Convert.ToBase64String(destin);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
        }
    }
}
                    
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace NETFramework
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string secretkey = "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA";
            string apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc";
            var res = GetReportDetail(apikey, secretkey);
            Console.WriteLine(res. Result);
        }
        보고서 세부 정보를 가져옵니다
        static async Task GetReportDetail(string apikey, string secretkey)
        {
            string url = "https://munjawa.com/SmsApi/v1/QueryReportDetail";
            string orderid = "14";

            Dictionary values = new Dictionary();
            values. Add("orderid", orderid);
            string data_json = Newtonsoft.Json.JsonConvert.SerializeObject(values);

            NameValueCollection nameValues = new NameValueCollection();
            nameValues.Add("Header", apikey);

            try
            {
                string upload_data = await AesEncrypt(secretkey, data_json);
                nameValues.Add("Data", upload_data);
            }
            catch (Exception ex)
            {
                return ex. Message;
            }

            var json = HttpPost(url, nameValues). Result;

            return json;
        }


        static async Task HttpPost(string url, NameValueCollection postDataStr)
        {
            string responseData = "";

            try
            {
                using (var client = new WebClient())
                {
                    byte[] bytes = client. UploadValues(url, postDataStr);
                    responseData = Encoding.UTF8.GetString(bytes);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
            return responseData;
        }

        public static async Task AesEncrypt(string key, string data)
        {
            try
            {
                byte[] bKey = Convert.FromBase64String(key);
                byte[] aesKey = new byte[32];
                byte[] aesIV = new byte[16];

                Array.Copy(bKey, 0, aesKey, 0, 32);
                Array.Copy(bKey, 32, aesIV, 0, 16);

                AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
                aes.IV = aesIV;
                aes. Key = aesKey;
                aes. Mode = CipherMode.CBC;
                aes. Padding = PaddingMode.PKCS7;
                byte[] bdata = Encoding.UTF8.GetBytes(data);
                using (ICryptoTransform encrypt = aes. CreateEncryptor())
                {
                    byte[] destin = encrypt. TransformFinalBlock(bdata, 0, bdata. Length);
                    return Convert.ToBase64String(destin);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
        }
    }
}
                    
<?php
  require_once 'AES.php';
    $securityKey = "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA";
    $aesTool = new Aes($securityKey, 'AES-256-CBC');
    $apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc"; apikey로 수정하고 공식 웹 사이트에 로그인하여 얻을 수 있습니다
    $ch = curl_init();
    /* 인증 방법 설정 */
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Accept:text/plain; charset=utf-8',
        'Content-Type:application/x-www-form-urlencoded', 'charset=utf-8'
    ));
    /* 반환 결과를 스트림으로 설정 */
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    /* 시간 초과 설정*/
    curl_setopt($ch, CURLOPT_TIMEOUT, 3000);
    /* 통신 방법 설정 */
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    전송 세부 정보를 가져옵니다
    $paramsStr = '{"orderid":"14"}';
    $cipherText = $aesTool->encrypt($paramsStr);
    $data = array('header' => $apikey, 'data' => $cipherText);
    $json_data = GetReportDetail($ch, $data);
    $array = json_decode($json_data, true);
    print_r($array);

    전송 세부 정보를 가져옵니다
    function GetReportDetail($ch, $data)
    {
        curl_setopt($ch, CURLOPT_URL, 'https://munjawa.com/SmsApi/v1/QueryReportDetail');
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
        $result = curl_exec($ch);
        $error = curl_error($ch);
        checkErr($result, $error);
        return $result;
    }
    function checkErr($result, $error)
    {
        if ($result === false) {
            echo 'Curl error: ' . $error;
        } else {
            echo '오류 없이 작업 완료';
        }
    }
?>
<?
    class Aes
        {
        /**
            * 암호화
            * @param string $plainText 일반 텍스트
            * @return bool|string
            */
        public function encrypt(string $plainText)
        {
            $originData = (openssl_encrypt($this->addPkcs7Padding($plainText, 16), $this->method, $this->securityKey, OPENSSL_NO_PADDING, $this->iv));
            return $originData === false ? false : base64_encode($originData);
        }
    }
?>
                    
 AesUtils.java
package com.example;
import java.lang.reflect.Array;
import java.security.Security;
import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class AesUtils {
    private static final String key = "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA";
    private static final String iv = "EJ9iIPhzB4I5UDfs";
    static {
        try {
            Security.addProvider(new BouncyCastleProvider());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static String encryptAES(String data) throws Exception {
        try {
            byte[] aesKey = AesUtils.decode(key);
            byte[] bkey = Arrays.copyOf(aesKey, 32);
            byte[] bIV = Arrays.copyOfRange(aesKey, 32, 48);
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
            SecretKeySpec keyspec = new SecretKeySpec(bkey, "AES");
            IvParameterSpec ivspec = new IvParameterSpec(bIV);
            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
            byte[] encrypted = cipher.doFinal(data.getBytes("UTF-8"));
            BASE64 트랜스코딩.
            return AesUtils.encode(encrypted).trim();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    public static String encode(byte[] byteArray) {
        return new String(new Base64().encode(byteArray));
    }
    public static byte[] decode(String base64EncodedString) {
        return new Base64().decode(base64EncodedString);
    }
}

 Main.java
package com.example;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Dictionary;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
public class Main {
    private static String URI_GET_REPORTLIST = "https://munjawa.com/SmsApi/v1/QueryReportDetail";
    public static void main(String[] args) throws IOException, URISyntaxException {
        String apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc";
        System.out.println(Main.getReport(apikey));
    }
    /**
     * 전송 보고서를 가져옵니다
     *
     * json 형식 문자열을 @return
     * @throws java.io.IOException
     */
    public static String getReportDetail(String apikey) throws IOException, URISyntaxException {
        Map dataDic = new HashMap();
        dataDic.put("orderid", "14");
        Gson gsonData = new Gson();
        String data = gsonData.toJson(dataDic);

        String enDataDic = "";
        try {
            enDataDic = AesUtils.encryptAES(data);
        } catch (Exception e) {
            e.printStackTrace();
        }

        Map params = new HashMap();
        params.put("header", apikey);
        params.put("data", enDataDic);

        return post(URI_GET_REPORTLIST, params);
    }
    public static String post(String url, Map paramsMap) {
        CloseableHttpClient client = HttpClients.createDefault();
        String responseText = "";
        CloseableHttpResponse response = null;
        try {
            HttpPost httpPost = new HttpPost(url);
            httpPost.addHeader("Content-Type", "multipart/form-data");
            if (paramsMap != null && paramsMap.size() > 0) {
                List paramList = new ArrayList();
                for (Map.Entry param : paramsMap.entrySet()) {
                    NameValuePair pair = new BasicNameValuePair(param.getKey(), param.getValue());
                    paramList.add(pair);
                }
                httpPost.setEntity(new UrlEncodedFormEntity(paramList, "UTF-8"));
            }

            response = client.execute(httpPost);
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                responseText = EntityUtils.toString(entity);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return responseText;
    }
}
                    
var  crypto = require( 'crypto' );
var request = require('request').defaults({rejectUnauthorized: false});
var algorithm = 'aes-256-cbc';
const base64 = 'he8MTjKMVGSwcKMEqhZgyjy7PAZESXQENVv/eqjaZlXGG8cW2x2WW4J7vLdwuQj7=';
const buff = Buffer.from(base64, 'base64');
var key = buff.slice(0, 32);
var iv = buff.slice(-16);
var data = '{"orderid":"18"}';
function encrypt(data) {
    var  cipher = crypto.createCipheriv(algorithm, key, iv);
    var  cipherChunks = [];
    cipherChunks.push(cipher.update(data, 'utf8', 'base64'));
    cipherChunks.push(cipher.final('base64'));
    return cipherChunks.join(''); 
}
var dataList = {
    header: '97d568ee656a429ba2f6b60e5ca55694',
    data: encrypt(data)
}
request({
    url:'https://munjawa.com/v1/QueryReportDetail',
    method: "POST",
    json: true,
    form: dataList
}, function(error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body);
    }
}); 
                    
import requests
import base64
from Crypto.Cipher import AES
# from Crypto.Util.Padding import pad
# import time
import json
class SmsApiTest:
    def GetReportDetail():
        post_url = 'https://munjawa.com/SmsApi/v1/QueryReportDetail'
        p_json = {'orderid':'14'}

        e = a.aes_encrypt(json.dumps(p_json))
        request_param = {
            'header': '8ee3dc19bb124e7ea7eb0433c4f90ffc',
            'data': e
        }
        res = SmsApiTest.request_post(post_url, request_param)
        print(res)

    def request_post(url, param):
        fails = 0
        while True:
            try:
                if fails >= 20:
                    break

                req = requests.post(url=url,
                                    data=param,
                                    timeout=1000,
                                    verify=False)
                if req.status_code == 200:
                    text = req.json()
                else:
                    continue
            except Exception:
                fails += 1
                print('네트워크 연결 문제, 다시 요청 시도 중: ', fails)
            else:
                break
        return text
class Encrypt:
    def __init__(self, aeskey, iv):
        self.key = aeskey
        self.iv = iv
    def pkcs7padding(self, text):
        PKCS7로 채우기
        bs = 16
        length = len(text)
        bytes_length = len(text.encode('utf-8'))
        padding_size = length if (bytes_length == length) else bytes_length
        padding = bs - padding_size % bs
        padding_text = chr(padding) * padding
        self.coding = chr(padding)
        return text + padding_text
    def aes_encrypt(self, content):
        """ "AES 암호화""
        cipher = AES.new(self.key, AES. MODE_CBC, self.iv)
        # 일반 텍스트를 처리합니다
        content_padding = self.pkcs7padding(content)
        # 암호화
        encrypt_bytes = cipher.encrypt(content_padding.encode('utf-8'))
        # 다시 코딩합니다
        result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')
        return result
if __name__ == '__main__':
    apikey = '8ee3dc19bb124e7ea7eb0433c4f90ffc'
    key = '9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA'
    bkey = bytearray(base64.b64decode(key))
    aeskey = bkey[0:32]
    iv = bkey[32:]
    a = Encrypt(aeskey, iv)
    req = SmsApiTest
    res = req. GetReportDetail()
                    
package main
import (
	"bytes"
	"crypto/aes"
	"crypto/cipher"
	"encoding/base64"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"net/url"
	"strings"
)
func main() {
	apikey := "8ee3dc19bb124e7ea7eb0433c4f90ffc"
	key := "9Rwkkl8hTiech/KSEinXPfwWiDYQfeJA1KubmDgi34ay4dutIfm0oUj7oqxQlmnA"
	GetReportDetail(apikey, key)
}
func GetReportDetail(apikey, secretkey string) {
	url_post := "https://munjawa.com/SmsApi/v1/QueryReportDetail"

	bkey, err := base64. StdEncoding.DecodeString(secretkey)
	if err != nil {
		log. Print("error:", err)
		return
	}

	orignData := []byte("{'orderid':14}")
	log. Print("원본:", string(orignData))

	encrypted := AesEncryptCBC(orignData, bkey)
	encydata := base64. StdEncoding.EncodeToString(encrypted)
	log. Println(base64):, encydata
	decrypted := AesDecryptCBC(encrypted, bkey)
	log. Println([암호 해독 결과:], string(decrypted))

	urlValues := url. Values{}
	urlValues.Add("header", apikey)
	urlValues.Add("data", encydata)

	resp, _ := http. PostForm(url_post, urlValues)
	body, _ := ioutil. ReadAll(resp. Body)

	fmt. Println(string(body))
}
func AesEncryptCBC(origData []byte, key []byte) (encrypted []byte) {
	키 그룹화
	NewCipher 함수는 입력 k의 길이를 16, 24 또는 32로 제한합니다
	aesKey := key[0:32]
	block, _ := aes. NewCipher(aesKey)
	blockSize := block. BlockSize() // 키 블록의 길이를 가져옵니다
	aesIv := key[32:48]
	origData = PKCS7Padding(origData, blockSize) // 전체 코드를 보완합니다
	blockMode := cipher. NewCBCEncrypter(block, aesIv) // 암호화 모드
	encrypted = make([]byte, len(origData)) // 배열을 만듭니다
	blockMode.CryptBlocks(encrypted, origData) // 암호화
	return encrypted
}
PKCS7로 채웁니다
func PKCS7Padding(ciphertext []byte, blockSize int) []byte {
	padding := blockSize - len(ciphertext)%blockSize
	padtext := bytes. Repeat([]byte{byte(padding)}, padding)
	return append(ciphertext, padtext...)
}
func PKCS7UnPadding(origData []byte) []byte {
	length := len(origData)
	unpadding := int(origData[length-1])
	return origData[:(length - unpadding)]
}
                    
응답 매개 변수입니다
매개 변수 이름입니다 유형입니다 설명입니다 예입니다
code Integer 요청 상태 코드입니다. 0
message String 상태를 반환합니다 OK
detail String 호출 인터페이스의 성공 여부에 대한 설명입니다 SUCCESS
data String 데이터를 반환합니다 [{"OrderId":14,"Seq":1,"PhoneNum":"01057420001","SendStatus":4, "SendTime":"2022-07-19T18:44:58.394974"},{"OrderId":14,"Seq":2, "PhoneNum":"01057420000","SendStatus":4,"SendTime":"2022-07-19T18:44:58.395239"}]
Json은 예제를 반환합니다
{
"code":0,
"message":"OK",
"detail":"SUCCESS",
"data":"[{"OrderId":14,"Seq":1,"PhoneNum":"01057420001","SendStatus":4, "SendTime":"2022-07-19T18:44:58.394974"},{"OrderId":14,"Seq":2, "PhoneNum":"01057420000","SendStatus":4,"SendTime":"2022-07-19T18:44:58.395239"}]"
}
계정 잔액을 조회
합니다
기능 설명

잔액 조회 API, 이 인터페이스는 사용자가 현재 잔액을 조회하는 데 사용됩니다.

참고 사항:

  • API키를 올바르게 인코딩하여 헤더에 포함 시켜 전송하여야 합니다.
  • 이 인터페이스의 QPS 제한은 초당 10회입니다. 제한을 초과하면 당일 API 호출이 제한됩니다. 합리적으로 호출하시기 바랍니다.

HTTP 헤더 정보:

Accept:application/json; charset=utf-8;
Content-Type:application/x-www-form-urlencoded; charset=utf-8;
요청
URL:https://api.munjawa.com/SmsApi/v1/QueryBalance
액세스 방법: POST
http 지원: https 및 http 액세스가 지원되며 https
사용하는 것이 좋습니다
요청 매개 변수입니다
매개 변수 이름입니다 유형입니다 필수입니다 설명입니다 예입니다
apikey String 계정 설정 - API 관리 보기에서 사용자 고유 ID를 사용합니다 9b11127a9701975c734b8aee81ee3526
요청의 예입니다
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace NetCoreTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc";
            var res = GetUserInfo(apikey);
            Console.WriteLine(res. Result);
        }
        static Task GetUserInfo(string apikey)
        {
            string url = "https://munjawa.com/SmsApi/v1/QueryBalance";
            NameValueCollection nameValues = new NameValueCollection();
            nameValues.Add("apikey", apikey);
            var json = HttpPost(url, nameValues);
            return json;
        }
        static async Task HttpPost(string url, NameValueCollection postDataStr)
        {
            string responseData = "";
            try
            {
                using (var client = new WebClient())
                {
                    byte[] bytes = client. UploadValues(url, postDataStr);
                    responseData = Encoding.UTF8.GetString(bytes);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
            return responseData;
        }
    }
}
                    
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace NETFramework
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc";
            var res = GetUserInfo(apikey);
            Console.WriteLine(res. Result);
        }
        계정 잔액을 가져옵니다
        static Task GetUserInfo(string apikey)
        {
            string url = "https://munjawa.com/SmsApi/v1/QueryBalance";
            NameValueCollection nameValues = new NameValueCollection();
            nameValues.Add("apikey", apikey);
            var json = HttpPost(url, nameValues);
            return json;
        }
        static async Task HttpPost(string url, NameValueCollection postDataStr)
        {
            string responseData = "";
            try
            {
                using (var client = new WebClient())
                {
                    byte[] bytes = client. UploadValues(url, postDataStr);
                    responseData = Encoding.UTF8.GetString(bytes);
                }
            }
            catch (Exception ex)
            {
                return ex. Message;
            }
            return responseData;
        }
    }
}

                    
<?php
    $apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc"; apikey로 수정하고 공식 웹 사이트에 로그인하여 얻을 수 있습니다
    $ch = curl_init();
    /* 인증 방법 설정 */
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Accept:text/plain; charset=utf-8',
        'Content-Type:application/x-www-form-urlencoded', 'charset=utf-8'
    ));
    /* 반환 결과를 스트림으로 설정 */
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    /* 시간 초과 설정*/
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    /* 통신 방법 설정 */
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    사용자 정보를 얻습니다
    $json_data = get_user($ch, $apikey);
    $array = json_decode($json_data, true);
    print_r($array);
    계정 정보를 가져옵니다
    function get_user($ch, $apikey)
    {
        curl_setopt($ch, CURLOPT_URL, 'https://munjawa.com/SmsApi/v1/QueryBalance');
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('apikey' => $apikey)));
        $result = curl_exec($ch);
        $error = curl_error($ch);
        checkErr($result, $error);
        return $result;
    }
    function checkErr($result, $error)
    {
        if ($result === false) {
            echo 'Curl error: ' . $error;
        } else {
            echo '오류 없이 작업 완료';
        }
    }
?>
                    
 Main.java
package com.example;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Dictionary;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
public class Main {
    private static String URI_GET_USER_INFO = "https://munjawa.com/SmsApi/v1/QueryBalance";
    public static void main(String[] args) throws IOException, URISyntaxException {
        String apikey = "8ee3dc19bb124e7ea7eb0433c4f90ffc";
        System.out.println(Main.getUserInfo(apikey));
    }
    /**
     * 계정 정보를 가져옵니다
     *
     * json 형식 문자열을 @return
     * @throws java.io.IOException
     */
    public static String getUserInfo(String apikey) throws IOException, URISyntaxException {
        Map params = new HashMap();
        params.put("apikey", apikey);
        return post(URI_GET_USER_INFO, params);
    }
}

                    
var request = require('request').defaults({rejectUnauthorized: false});
var data = {
    apikey: "97d568ee656a429ba2f6b60e5ca55694"
}
request({
    url:'https://munjawa.com/SmsApi/v1/QueryBalance',
    method: "POST",
    json: true,
    form: data
}, function(error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body);
    }
}); 
                    
import requests
import base64
from Crypto.Cipher import AES
# from Crypto.Util.Padding import pad
# import time
import json
class SmsApiTest:
    def GetBalance():
        post_url = 'https://munjawa.com/SmsApi/v1/QueryBalance'
        request_param = {'apikey': apikey}
        res = SmsApiTest.request_post(post_url, request_param)
        print(res)
if __name__ == '__main__':
    apikey = '8ee3dc19bb124e7ea7eb0433c4f90ffc'
    req = SmsApiTest
    res = req. GetBalance()
                    
package main
import (
	"bytes"
	"crypto/aes"
	"crypto/cipher"
	"encoding/base64"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"net/url"
	"strings"
)
func main() {
	apikey := "8ee3dc19bb124e7ea7eb0433c4f90ffc"
	GetBalance(apikey)
}
func GetBalance(apikey string) {
    url := "https://munjawa.com/SmsApi/v1/QueryBalance"

    method := "POST"
    payload := strings. NewReader("apikey=" + apikey)
    client := &http. Client{}
    req, err := http. NewRequest(method, url, payload)

    if err != nil {
	    fmt. Println(err)
	    return
    }
    req. Header.Set("Content-Type", "application/x-www-form-urlencoded")

    res, err := client. Do(req)
    if err != nil {
	    fmt. Println(err)
	    return
    }
    defer res. Body.Close()

    body, err := ioutil. ReadAll(res. Body)
    if err != nil {
	    fmt. Println(err)
	    return
    }
    fmt. Println(string(body))
}
                    
응답 매개 변수입니다
매개 변수 이름입니다 유형입니다 설명입니다 예입니다
code Integer 요청 상태 코드입니다. 0
message String 상태를 반환합니다 OK
detail String 호출 인터페이스의 성공 여부에 대한 설명입니다 SUCCESS
data String 데이터를 반환합니다 {"UserId":"01057420006","Cash":42275.880000000000000000000000,
"Point":50.000000000000000000000000000}
Json은 예제를 반환합니다
{
"code": 0,
"message": "OK",
"deatil": "SUCCESS"
"mobile": "{"UserId":"01057420006","Cash":42275.880000000000000000000000,"Point":50.000000000000000000000000000}"
}
2.0의 새로운 기능

API가 2.0으로 업그레이드되었습니다. API 2.0은 새로운 사용자가 API 2.0을 직접 사용할 수 있도록 더 많은 기능을 제공하며, 이전 사용자는 기본적으로 API 2.0 권한을 가지며 2.0 인터페이스를 따라 개발해야 하는 경우 사용할 수 있습니다.

참고:

  • 더 많은 전송 기능, single_send, batch_send multi_send 전송 방법을 보다 유연하게 지원합니다.
  • 인터페이스는 값 수정을 반환하고 통계 요약을 더 쉽게 수행할 수 있습니다.
  • 전송 성공 실패는 HTTP 계층에서 구분되어 사용 환경을 개선합니다.