Пример работы с SMS шлюзом на языке Go
Отправка смс
Получения статуса отправленной смс
Получение цены отправки
Получение баланса
Отправка смс:
package main
import (
"net/url"
"bytes"
"fmt"
"net/http"
"io/ioutil"
"encoding/json"
"encoding/xml"
)
type SmsGateway struct {
login string
password string
xml string
}
type SMS struct {
Sentdate string `xml:"sentdate,omitempty" json:"sentdate,omitempty"`
Operations struct {
Operation string `xml:"operation" json:"operation"`
} `xml:"operations" json:"operations"`
Authentification struct {
Username string `xml:"username" json:"username"`
Password string `xml:"password" json:"password"`
} `xml:"authentification" json:"authentification"`
Message struct {
Sender string `xml:"sender" json:"sender"`
Text string `xml:"text" json:"text"`
} `xml:"message" json:"message"`
Numbers []Number `xml:"numbers>number" json:"numbers"`
Statistics []Messageid `xml:"statistics>messageid" json:"statistics"`
}
type Number struct {
Value int64 `xml:",chardata"`
}
type Messageid struct {
Value string `xml:",chardata"`
}
type ResponseJson struct {
Status int `xml:"status" json:"status"`
Credits int32 `xml:"credits" json:"credits"`
Amount int32 `xml:"amount" json:"amount"`
Currenry string `xml:"currenry" json:"currenry"`
}
func (smsGateway *SmsGateway) sendRequest(smsData SMS) (string, error) {
// json struct to xml
xmlSms, _ := xml.Marshal(smsData)
// log xml request
// fmt.Println(string(xmlSms))
form := url.Values{
"XML": {`<?xml version="1.0" encoding="UTF-8"?>` + string(xmlSms)},
}
stringData := form.Encode()
client := &http.Client;{}
req, err := http.NewRequest("POST", "http://api.myatompark.com/members/sms/xml.php", bytes.NewBufferString(stringData))
if err != nil {
fmt.Println(err)
}
// you can then set the Header here
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
// now POST it
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
}
defer resp.Body.Close()
if resp.StatusCode == http.StatusOK {
bodyBytes, err2 := ioutil.ReadAll(resp.Body)
bodyString := string(bodyBytes)
if err2 != nil {
fmt.Println(err2)
}
var responseJson ResponseJson
xml.Unmarshal([]byte(bodyString), &responseJson;)
jsonDataResp, _ := json.Marshal(responseJson)
/*{
'-1': { 'status': '-1', 'code' : 'AUTH_FAILED', 'message': 'Неправильний логін та/або пароль' },
'-2': { 'status': '-2', 'code' : 'XML_ERROR', 'message': 'Неправильний формат XML' },
'-3': { 'status': '-3', 'code' : 'NOT_ENOUGH_CREDITS', 'message': 'Недостатньо кредитів на акаунті користувача' },
'-4': { 'status': '-4', 'code' : 'NO_RECIPIENTS', 'message': 'Немає вірних номерів отримувачів' },
'-7': { 'status': '-7', 'code' : 'BAD_SENDER_NAME', 'message': 'Помилка в імені відправника' },
}*/
return string(jsonDataResp), err2;
}
return "", err;
}
func (smsGateway *SmsGateway) sendSms(sender string, message string, numbers []int64, sentdate string) {
operation := "SEND"
// xml to json
xmlData := `<?xml version="1.0" encoding="UTF-8"?>
`;
var smsData SMS
xml.Unmarshal([]byte(xmlData), &smsData;)
smsData.Authentification.Username = smsGateway.login
smsData.Authentification.Password = smsGateway.password
smsData.Operations.Operation = operation
smsData.Message.Sender = sender
smsData.Message.Text = message
if sentdate != "" {
smsData.Sentdate = sentdate
}
for _, value := range numbers {
smsData.Numbers = append(smsData.Numbers, Number{int64(value)})
}
res, err := smsGateway.sendRequest(smsData)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(res)
}
}
func (smsGateway *SmsGateway) getPrice(sender string, message string, numbers []int64) {
operation := "GETPRICE"
xmlData := `<?xml version="1.0" encoding="UTF-8"?>
`
var smsData SMS
xml.Unmarshal([]byte(xmlData), &smsData;)
smsData.Authentification.Username = smsGateway.login
smsData.Authentification.Password = smsGateway.password
smsData.Operations.Operation = operation
smsData.Message.Sender = sender
smsData.Message.Text = message
for _, value := range numbers {
smsData.Numbers = append(smsData.Numbers, Number{int64(value)})
}
res, err := smsGateway.sendRequest(smsData)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(res)
}
}
func (smsGateway *SmsGateway) getStatus(list []string) {
operation := "GETSTATUS"
xmlData := `<?xml version="1.0" encoding="UTF-8"?>
`
var smsData SMS
xml.Unmarshal([]byte(xmlData), &smsData;)
smsData.Authentification.Username = smsGateway.login
smsData.Authentification.Password = smsGateway.password
smsData.Operations.Operation = operation
for _, value := range list {
smsData.Statistics = append(smsData.Statistics, Messageid{value})
}
res, err := smsGateway.sendRequest(smsData)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(res)
}
}
func (smsGateway *SmsGateway) getBalance() {
operation := "BALANCE"
xmlData := `<?xml version="1.0" encoding="UTF-8"?>
`
var smsData SMS
xml.Unmarshal([]byte(xmlData), &smsData;)
smsData.Authentification.Username = smsGateway.login
smsData.Authentification.Password = smsGateway.password
smsData.Operations.Operation = operation
res, err := smsGateway.sendRequest(smsData)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(res)
}
}
func (smsGateway *SmsGateway) getCreditPrice() {
operation := "CREDITPRICE"
xmlData := `<?xml version="1.0" encoding="UTF-8"?>
`
var smsData SMS
xml.Unmarshal([]byte(xmlData), &smsData;)
smsData.Authentification.Username = smsGateway.login
smsData.Authentification.Password = smsGateway.password
smsData.Operations.Operation = operation
res, err := smsGateway.sendRequest(smsData)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(res)
}
}
// config
var username = "your username"
var password = "your password"
// usage example
func main() {
smsGateway := SmsGateway{
login: username,
password: password,
}
smsGateway.sendSms("sender", "text", []int64{380930000000}, "20-07-2018")
smsGateway.getPrice("sender", "text", []int64{380930000000})
smsGateway.getStatus([]string{"msg1"})
smsGateway.getBalance()
smsGateway.getCreditPrice()
}
По запросу предоставляется необходимое количество дополнительных смс для тестирования сервиса массовых смс-уведомлений ePochta SMS.
Есть вопрос?
- 8 (800) 555-09-63
- Бесплатно по России
Новости:
- 2020-11-23
- ePochta объявляет старт Черной Пятницы: Спеццена на рассылку в WhatsApp
- 2020-11-18
- С 1 декабря 2020 года оператор МТС повышает стоимость СМС
- 2020-05-04
- Вебинар: СМС маркетинг. Что писать в тексте СМС рассылок?
- 2020-04-28
- Операторы повышают цены СМС рассылки по прямому каналу в РФ
- 2019-12-21
- Украинские операторы повышают цену СМС


7 (495) 649-62-48
Украинский
Казахский
English
Italiano
