first commit
This commit is contained in:
81
apns/Apns.go
Normal file
81
apns/Apns.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package apns
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type RequestBody struct {
|
||||
DeviceToken string `json:"device_token"`
|
||||
Title string `json:"title"`
|
||||
Content string `json:"content"`
|
||||
Source string `json:"source"`
|
||||
WxID string `json:"wxid"`
|
||||
}
|
||||
|
||||
func ApnsPush(msg string, title string, device_token string, wxid string) (response string) {
|
||||
url := "http://106.53.106.115/api/apns/push"
|
||||
method := "POST"
|
||||
headers := map[string]string{
|
||||
"Content-Type": "application/json",
|
||||
}
|
||||
bodyData := RequestBody{
|
||||
DeviceToken: device_token,
|
||||
Title: title,
|
||||
Content: msg,
|
||||
Source: "bark",
|
||||
WxID: wxid,
|
||||
}
|
||||
body, err := json.Marshal(bodyData)
|
||||
if err != nil {
|
||||
fmt.Println("序列化请求体失败:", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 发送HTTP请求
|
||||
responseBytes, err := HTTPRequest(method, url, headers, body)
|
||||
if err != nil {
|
||||
fmt.Println("请求失败:", err)
|
||||
return
|
||||
}
|
||||
return string(responseBytes)
|
||||
}
|
||||
|
||||
// HTTPRequest 发送HTTP请求,并返回响应结果和错误(如果有)
|
||||
func HTTPRequest(method, url string, headers map[string]string, body []byte) ([]byte, error) {
|
||||
client := &http.Client{}
|
||||
|
||||
// 创建请求
|
||||
req, err := http.NewRequest(method, url, bytes.NewBuffer(body))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("创建%s请求失败: %v", method, err)
|
||||
}
|
||||
|
||||
// 添加请求头
|
||||
for key, value := range headers {
|
||||
req.Header.Set(key, value)
|
||||
}
|
||||
|
||||
// 发送请求
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("%s请求失败: %v", method, err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// 读取响应体
|
||||
respBody, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("读取响应体失败: %v", err)
|
||||
}
|
||||
|
||||
return respBody, nil
|
||||
}
|
||||
|
||||
func main2() {
|
||||
// 示例调用
|
||||
ApnsPush("消息内容", "消息标题", "设备令牌", "微信ID")
|
||||
}
|
||||
179
apns/deviceToken.go
Normal file
179
apns/deviceToken.go
Normal file
@@ -0,0 +1,179 @@
|
||||
package apns
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"time"
|
||||
)
|
||||
|
||||
// 连接MySQL数据库
|
||||
func ConnectDB() (*sql.DB, error) {
|
||||
// 数据库连接信息
|
||||
dsn := "wechat_mmtls:hNPpcsT2RH6pYRRk@tcp(106.53.106.115:3306)/wechat_mmtls"
|
||||
|
||||
// 连接到数据库
|
||||
db, err := sql.Open("mysql", dsn)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 测试连接是否成功
|
||||
err = db.Ping()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return db, nil
|
||||
}
|
||||
|
||||
// 结果结构体
|
||||
type APNSVip struct {
|
||||
ID int
|
||||
DeviceToken string
|
||||
Status int
|
||||
UserName string
|
||||
WxID string
|
||||
}
|
||||
|
||||
// 结果结构体
|
||||
type LicenseKey struct {
|
||||
ID int
|
||||
DeviceToken string
|
||||
Status int
|
||||
License string
|
||||
expiryDate string
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
func QueryData(db *sql.DB, query string) ([]APNSVip, error) {
|
||||
// 查询数据
|
||||
rows, err := db.Query(query)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var result []APNSVip
|
||||
|
||||
for rows.Next() {
|
||||
var apns APNSVip
|
||||
if err := rows.Scan(&apns.ID, &apns.DeviceToken, &apns.Status, &apns.UserName, &apns.WxID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result = append(result, apns)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// 查询单条记录数据(防止 SQL 注入)
|
||||
func queryDataByField(db *sql.DB, fieldName string, value interface{}) (*APNSVip, error) {
|
||||
// 构建查询语句
|
||||
query := fmt.Sprintf("SELECT * FROM apns_vip WHERE %s = ? LIMIT 1", fieldName)
|
||||
|
||||
// 查询数据
|
||||
row := db.QueryRow(query, value)
|
||||
|
||||
var apns APNSVip
|
||||
err := row.Scan(&apns.ID, &apns.DeviceToken, &apns.Status, &apns.UserName, &apns.WxID)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
// 如果未找到记录,则返回 nil 和 nil
|
||||
return nil, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &apns, nil
|
||||
}
|
||||
|
||||
func IsLicenseBind(db *sql.DB, value string) (*LicenseKey, error) {
|
||||
// 构建查询语句
|
||||
query := fmt.Sprintf("SELECT * FROM license_key WHERE license = ? and status=1 LIMIT 1")
|
||||
// 查询数据
|
||||
row := db.QueryRow(query, value)
|
||||
|
||||
var licenseKey LicenseKey
|
||||
err := row.Scan(&licenseKey.ID, &licenseKey.DeviceToken, &licenseKey.Status, &licenseKey.License, &licenseKey.expiryDate)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
// 如果未找到记录,则返回 nil 和 nil
|
||||
return nil, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &licenseKey, nil
|
||||
}
|
||||
|
||||
func UpdateLicenseBindStatus(db *sql.DB, device_token string, license string) error {
|
||||
// 构建更新语句
|
||||
query := "UPDATE license_key SET status = 1,device_token=? WHERE license = ? and status=0"
|
||||
|
||||
// 执行更新操作
|
||||
_, err := db.Exec(query, device_token, license)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func HasLicense(db *sql.DB, value string) (*LicenseKey, error) {
|
||||
// 构建查询语句
|
||||
query := fmt.Sprintf("SELECT license FROM license_key WHERE license = ? LIMIT 1")
|
||||
// 查询数据
|
||||
row := db.QueryRow(query, value)
|
||||
|
||||
var licenseKey LicenseKey
|
||||
err := row.Scan(&licenseKey.License)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
// 如果未找到记录,则返回 nil 和 nil
|
||||
return nil, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &licenseKey, nil
|
||||
}
|
||||
|
||||
// CheckExpiry 检查日期是否过期
|
||||
func CheckExpiry(expiryDateString string) bool {
|
||||
// 将字符串解析为时间对象
|
||||
expiryDate, err := time.Parse("2006-01-02", expiryDateString)
|
||||
if err != nil {
|
||||
fmt.Println("Error parsing expiry date:", err)
|
||||
return false
|
||||
}
|
||||
|
||||
// 获取当前时间
|
||||
currentTime := time.Now()
|
||||
|
||||
// 比较过期日期和当前日期
|
||||
if expiryDate.Before(currentTime) {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func main777() {
|
||||
// 连接数据库
|
||||
db, err := ConnectDB()
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
// 根据字段查询数据(防止 SQL 注入)
|
||||
license := "123"
|
||||
license_key, err := IsLicenseBind(db, license)
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
}
|
||||
_ = UpdateLicenseBindStatus(db, "333", "123")
|
||||
|
||||
fmt.Println(license_key)
|
||||
}
|
||||
Reference in New Issue
Block a user