package main import ( "context" "encoding/json" "gitea.cdlsxd.cn/sdk/plugin/instance" "gitea.cdlsxd.cn/sdk/plugin/manage" "gitea.cdlsxd.cn/sdk/plugin/proto" "log" ) var wechatRedPackConfig = &manage.Config{ Cmd: "pkg/mac/wechat_redpack_v2.so", Tag: "wechat_redpack_v2", Version: 1, CookieKey: "wechat_redpack_v2", CookieValue: "wechat_redpack_v2", } type Wechat struct { MchID string `json:"mch_id"` MchCertificateSerialNumber string `json:"mch_certificate_serial_number"` WechatPayPublicKeyID string `json:"wechat_pay_public_key_id"` MchApiV3Key string `json:"mch_api_v3_key"` } func getWechatRedPackV2Conf() []byte { c := &Wechat{ MchID: "1652322442", // 证书所属商户 MchCertificateSerialNumber: "2CE0C4F37E960878F354C986E6F1A5342558BABC", WechatPayPublicKeyID: "PUB_KEY_ID_0116523224422025061800192371001800", MchApiV3Key: "7e6eb4a5ebeed3cf61c693586b11d00b", } marshal, _ := json.Marshal(c) return marshal } func WechatRedPackV2Order() { orderExtra := struct { Appid string `json:"app_id"` NotifyUrl string `json:"notify_url"` }{ Appid: "wxe3bd59243545fa8a", NotifyUrl: "https://transfer.86698.cn/notify/v1/wx_1652322442", // 通知url必须为公网可访问的URL,必须为HTTPS,不能携带参数,因此路由设计 “wx_1652322442” 处理 } orderExtraBytes, _ := json.Marshal(orderExtra) productExtra := struct { BatchName string `json:"batch_name"` BatchRemark string `json:"batch_remark"` }{ BatchName: "LSXD测试", BatchRemark: "LSXD测试~", } productExtraBytes, _ := json.Marshal(productExtra) err := manage.Add(wechatRedPackConfig) if err != nil { log.Fatalln(err) } defer manage.Close() request := &proto.OrderRequest{ Config: getWechatRedPackV2Conf(), Order: &proto.OrderRequest_Order{ OrderNo: "20251106001", Account: "ojbqr6HpeWKFy9Sgdx8yCmmeVJiw", Quantity: 1, Amount: 0.1, Extra: orderExtraBytes, }, Product: &proto.OrderRequest_Product{ ProductNo: "", Price: 0.1, Type: 0, Extra: productExtraBytes, }, } res, err := instance.Order(context.Background(), wechatRedPackConfig.Tag, request) if err != nil { log.Fatalln(err) } log.Printf("Order res:%+v", res) } func WechatRedPackV2Query() { err := manage.Add(wechatRedPackConfig) if err != nil { log.Fatalln(err) } defer manage.Close() request := &proto.QueryRequest{ Config: getWechatRedPackV2Conf(), Order: &proto.QueryRequest_Order{ OrderNo: "19497351672832450564", TradeNo: "", Account: "", Extra: []byte(``), }, } res, err := instance.Query(context.Background(), wechatRedPackConfig.Tag, request) if err != nil { log.Fatalln(err) } log.Printf("Query res:%+v", res) } func WechatRedPackV2Notify() { body := []byte(`{"id":"fd06376a-3e1b-5516-81f8-9b69cf1ba416","create_time":"2025-07-28T16:10:15+08:00","resource_type":"encrypt-resource","event_type":"MCHTRANSFER.BILL.FINISHED","summary":"商家转账单据终态通知","resource":{"original_type":"mch_payment","algorithm":"AEAD_AES_256_GCM","ciphertext":"XJBIhrHgbe9NR5q/jLYmZKdT/3xuKm2x7EFu3T52Hj2hjPzarRSA2HCsGTxGojfD+CFyJHIULlL2adqLijAjpi3B6TaYKY4LqhtJ/RYSQtYNxYvBpWX1yLOWe8luJbWxmQvKZxIekFs8lGVgkPBUw0IfEAvJ6jHAGCcgxLIqxgOf6UtGUqxCCNp/V3xy8zCiHB0Mvlw8eXCTuG+ZESJIXvloVGNS79R6iNeqk4kNKRSaV86MNh1KQlmoBxZ4yEshD/vIlMulU3xEc+mM25y8vUS4Ot6pxEpUdUyjwcb9QTwTTnZzm6i+VWYymcItAVBQrvsKBMmqWnPtNXG8++13k3DeO1LyVKURmnWXXT1mImmGx/teN/1xPV5y6nChu/HTbcJGDQy2twuq6TPFbbYlTjZH047z/ZtozJNvGNeh","associated_data":"mch_payment","nonce":"YN3eW5H8mxLs"}}`) hds := `{"Accept":["*/*"],"Cache-Control":["no-cache"],"Connection":["close"],"Content-Length":["775"],"Content-Type":["application/json"],"Pragma":["no-cache"],"User-Agent":["Mozilla/4.0"],"Wechatpay-Nonce":["dF8R9izUJnPBjVLa2cAcCaa7j6QUgitl"],"Wechatpay-Serial":["PUB_KEY_ID_0116523224422025061800192371001800"],"Wechatpay-Signature":["SoXIiTRTr6jofXXxGlfO+wyf1IzXFXcsfvEU2EggQfRKFu+8h3TT6QMQ8zIf8dpkkTPexB/3igGiATrR3uZY4ZeOpRrhIFHSJj0Ala0Ri2Nt4zk+MuBQnhybSYJ4Cn3/sHC4i2HFoOSil7OqlSr79hjod3h0tjYVQLtZ4+Cjp0IeMNB4p5qmIuERuhtfRqcyqXik9/uYNYxw8/Wkf1mMnTsBxyXK3iHAoinXNrEiqCCrQHCfnORMYosr7l+Ox8v9u1c8FFt+rt09vKssVCqYaZ/XRala3mjslDRiluFKSuqb7/JO3AxQjBK6M0iSZOlnmiXSIAq+UxJg4cem6wHi+g=="],"Wechatpay-Signature-Type":["WECHATPAY2-SHA256-RSA2048"],"Wechatpay-Timestamp":["1753690220"],"X-Forwarded-For":["121.51.58.168"],"X-Forwarded-Proto":["https"],"X-Real-Ip":["121.51.58.168"]}` if err := manage.Add(wechatRedPackConfig); err != nil { log.Fatalln(err) } defer manage.Close() request := &proto.NotifyRequest{ Config: getWechatRedPackV2Conf(), Queries: nil, Headers: []byte(hds), Body: body, } res, err := instance.Notify(context.Background(), wechatRedPackConfig.Tag, request) if err != nil { log.Fatalln(err) } log.Printf("Query res:%+v", res) }