This commit is contained in:
parent
4640e095b8
commit
cd3a0068d3
|
@ -23,7 +23,13 @@ ysepay:
|
|||
notifyUrl: "http://xxxxxxxxxxxxx/ysePay/notifyPay"
|
||||
CERTID: "826452972730006"
|
||||
busCode: "00510030" #业务代码
|
||||
MQTT:
|
||||
orderMQTT:
|
||||
topic: "pay"
|
||||
ip: "101.200.127.15" #测试环境IP
|
||||
port: 1883
|
||||
user: "yuledui"
|
||||
passwd: "yuledui"
|
||||
driverMQTT:
|
||||
topic: "pay"
|
||||
ip: "101.200.127.15" #测试环境IP
|
||||
port: 1883
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
2024-11-15 08:45:33.783 http.go:51: invalid character '<' looking for beginning of value
|
||||
2024-11-15 08:45:33.784 mqtt.go:59: 订单MQTT连接地址: mqtt://101.200.127.15:1883
|
||||
2024-11-15 08:54:20.774 http.go:53: invalid character '<' looking for beginning of value
|
||||
2024-11-15 08:54:20.774 mqtt.go:59: 订单MQTT连接地址: mqtt://101.200.127.15:1883
|
3
main.go
3
main.go
|
@ -8,7 +8,8 @@ import (
|
|||
|
||||
func main() {
|
||||
|
||||
err := service.MQTTService.InitMQTT() //初始化连接订单MQTT
|
||||
service.CatService.SignCat()
|
||||
err := service.MQTTService.InitOrderMQTT() //初始化连接订单MQTT
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/md5"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"sort"
|
||||
"strings"
|
||||
"zhaoCaiMao/vo"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
type Cat struct {
|
||||
}
|
||||
|
||||
var CatService Cat
|
||||
var letters = []rune("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")
|
||||
|
||||
// 招财猫签到
|
||||
func (t *Cat) SignCat() error {
|
||||
req := vo.SignReq{}
|
||||
req.Vendor = "LANDI"
|
||||
req.Nonce = randStr(22)
|
||||
req.Sn = "LDNS3022890N637808"
|
||||
req.SignMethod = "md5"
|
||||
req.TerminalInfo = "测试请求"
|
||||
req.Sign = t.sign(&req)
|
||||
fmt.Println(req.Sign)
|
||||
jsonBody, err := json.Marshal(&req)
|
||||
if err != nil {
|
||||
g.Log().Line().Print(nil, err)
|
||||
return err
|
||||
}
|
||||
r, err := http.Post("https://rmb.pingan.com.cn:443", "application/json", bytes.NewBuffer(jsonBody))
|
||||
if err != nil {
|
||||
g.Log().Line().Print(nil, err)
|
||||
return err
|
||||
}
|
||||
defer r.Body.Close()
|
||||
body, err := io.ReadAll(r.Body)
|
||||
fmt.Println(string(body))
|
||||
if err != nil {
|
||||
g.Log().Line().Print(nil, err)
|
||||
return err
|
||||
}
|
||||
resp := vo.SignResp{}
|
||||
err = json.Unmarshal(body, &resp)
|
||||
if err != nil {
|
||||
g.Log().Line().Print(nil, err)
|
||||
return err
|
||||
}
|
||||
fmt.Println(resp)
|
||||
return nil
|
||||
|
||||
}
|
||||
func (t *Cat) sign(req *vo.SignReq) string {
|
||||
parts := []string{}
|
||||
parts = append(parts, fmt.Sprintf("%s=%s", "nonce", req.Nonce))
|
||||
parts = append(parts, fmt.Sprintf("%s=%s", "signMethod", req.SignMethod))
|
||||
parts = append(parts, fmt.Sprintf("%s=%s", "sn", req.Sn))
|
||||
parts = append(parts, fmt.Sprintf("%s=%s", "terminalInfo", req.TerminalInfo))
|
||||
parts = append(parts, fmt.Sprintf("%s=%s", "vendor", req.Vendor))
|
||||
sort.Strings(parts)
|
||||
data := strings.Join(parts, "&")
|
||||
data += fmt.Sprintf("&key=(%s)", "49df1a070e754da391493bfef5139282")
|
||||
fmt.Println(data)
|
||||
hash := md5.New()
|
||||
io.WriteString(hash, data)
|
||||
md5Sum := hash.Sum(nil)
|
||||
return fmt.Sprintf("%x", md5Sum)
|
||||
}
|
||||
func randStr(n int) string {
|
||||
b := make([]rune, n)
|
||||
for i := range b {
|
||||
b[i] = letters[rand.Intn(len(letters))]
|
||||
}
|
||||
return string(b)
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
"encoding/json"
|
||||
"zhaoCaiMao/vo"
|
||||
|
||||
mqtt "github.com/eclipse/paho.mqtt.golang"
|
||||
|
@ -18,9 +18,37 @@ type MQTT struct {
|
|||
|
||||
var MQTTService MQTT
|
||||
|
||||
func (t *MQTT) InitMQTT() error {
|
||||
ip := g.Cfg().MustGet(nil, "MQTT.ip") //订单MQTT
|
||||
port := g.Cfg().MustGet(nil, "MQTT.port")
|
||||
/*
|
||||
func (t *MQTT) InitDriverMQTT() error {
|
||||
ip := g.Cfg().MustGet(nil, "driverMQTT.ip") //订单MQTT
|
||||
port := g.Cfg().MustGet(nil, "driverMQTT.port")
|
||||
// 创建MQTT客户端选项
|
||||
var broker = server_ip
|
||||
var port = server_port
|
||||
opts := mqtt.NewClientOptions() // 创建MQTT客户端选项
|
||||
opts.AddBroker(fmt.Sprintf("tcp://%s:%d", broker, port)) // 添加MQTT broker地址和端口
|
||||
userName := "Signature" + "|" + AccessKey_ID + "|" + InstanceId
|
||||
password := HmacSha1(AccessKey_Secret, ClientId)
|
||||
opts.SetClientID(ClientId) // 设置客户端ID
|
||||
opts.SetUsername(userName) // 设置用户名(用于MQTT的身份验证)
|
||||
opts.SetPassword(string(Decode(password))) // 设置密码(用于MQTT的身份验证)
|
||||
opts.SetDefaultPublishHandler(AliMessagePubHandler) // 设置默认的消息发布处理函数
|
||||
opts.SetAutoReconnect(true) //客户端与MQTT代理的连接断开时,是否自动尝试重新连接
|
||||
opts.SetMaxReconnectInterval(3) //客户端在两次连续重连尝试之间的最大时间间隔秒
|
||||
opts.OnConnect = AliConnectHandler // 设置连接成功的处理函数
|
||||
opts.OnConnectionLost = AliConnectLostHandler // 设置连接丢失的处理函数
|
||||
fmt.Println("opts:", opts)
|
||||
alimc = mqtt.NewClient(opts) // 创建新的MQTT客户端实例
|
||||
if token := alimc.Connect(); token.Wait() && token.Error() != nil { // 尝试连接到MQTT broker
|
||||
fmt.Println("-------------------------")
|
||||
fmt.Println("链接异常:", token.Error().Error())
|
||||
panic(token.Error()) // 如果连接失败,则抛出异常
|
||||
}
|
||||
}
|
||||
*/
|
||||
func (t *MQTT) InitOrderMQTT() error {
|
||||
ip := g.Cfg().MustGet(nil, "orderMQTT.ip") //订单MQTT
|
||||
port := g.Cfg().MustGet(nil, "orderMQTT.port")
|
||||
|
||||
/*
|
||||
user := g.Cfg().MustGet(nil, "MQTT.user")
|
||||
|
@ -45,7 +73,7 @@ func (t *MQTT) InitMQTT() error {
|
|||
g.Log().Line().Error(nil, err)
|
||||
return err
|
||||
}
|
||||
payTopic := g.Cfg().MustGet(nil, "MQTT.topic").String()
|
||||
payTopic := g.Cfg().MustGet(nil, "orderMQTT.topic").String()
|
||||
//订阅支付订单消息
|
||||
token = t.client.Subscribe(payTopic, 2, nil)
|
||||
if !token.Wait() {
|
||||
|
@ -63,8 +91,7 @@ func (t *MQTT) reciveOrderMQTTHandler(client mqtt.Client, msg mqtt.Message) {
|
|||
g.Log().Line().Print(nil, err)
|
||||
return
|
||||
}
|
||||
t.createMsgToCat(&mqttOrder)
|
||||
|
||||
//t.createMsgToCat(&mqttOrder)
|
||||
|
||||
//to-----发送到招财猫设备
|
||||
|
||||
|
@ -75,6 +102,8 @@ func (t *MQTT) connectLostHandler(client mqtt.Client, err error) {
|
|||
g.Log().Line().Print(nil, "订单MQTT 重新连接成功")
|
||||
token.Wait()
|
||||
}
|
||||
|
||||
/*
|
||||
// 组织发送招财猫的报文
|
||||
func (t *MQTT) createMsgToCat(mqttOrder *vo.MQTTOrder) {
|
||||
mqttOrder.
|
||||
|
@ -86,6 +115,5 @@ func (t *MQTT) createMsgToCat(mqttOrder *vo.MQTTOrder) {
|
|||
mqttdevice.Type = 2
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
package vo
|
||||
|
||||
type SignReq struct {
|
||||
Vendor string `json:"vendor"` //厂商编号
|
||||
Sn string `json:"sn"` //机身号
|
||||
SignMethod string `json:"signMethod"` //签名方式,默认md5
|
||||
Nonce string `json:"nonce"` //随机数
|
||||
TerminalInfo string `json:"terminalInfo"` //设备信息
|
||||
Sign string `json:"sign"` //签名
|
||||
}
|
||||
type SignResp struct {
|
||||
Code string `json:"code"` //错误码
|
||||
Msg string `json:"msg"` //错误描述
|
||||
Host string `json:"host"` //服务器地址
|
||||
Port int `json:"Port"` //端口
|
||||
ClientId string `json:"clientId"` //客户端ID
|
||||
Username string `json:"username"` //用户名
|
||||
Password string `json:"password"` //密码
|
||||
Topic string `json:"topic"` //订阅消息主题名
|
||||
}
|
Loading…
Reference in New Issue