feat: update pay notify

This commit is contained in:
Rogee
2025-04-30 20:54:37 +08:00
parent 67d6f3ec33
commit d6c5a2677c
48 changed files with 444 additions and 161 deletions

View File

@@ -4,7 +4,6 @@ import (
"errors"
"fmt"
"path/filepath"
"quyun/app/jobs"
"quyun/app/models"
"quyun/database/schemas/public/model"

View File

@@ -2,14 +2,13 @@ package http
import (
"net/url"
"time"
"quyun/app/models"
"quyun/database/fields"
"quyun/database/schemas/public/model"
"quyun/pkg/utils"
"quyun/providers/jwt"
"quyun/providers/wechat"
"time"
"github.com/gofiber/fiber/v3"
"github.com/pkg/errors"

View File

@@ -1,16 +1,13 @@
package http
import (
"fmt"
"net/http"
"quyun/app/jobs"
"quyun/providers/job"
"quyun/providers/wepay"
"github.com/go-pay/gopay"
"github.com/go-pay/gopay/wechat/v3"
"github.com/go-pay/util/js"
"github.com/gofiber/fiber/v3"
log "github.com/sirupsen/logrus"
)
@@ -28,31 +25,13 @@ type pays struct {
func (ctl *pays) Callback(ctx fiber.Ctx, channel string) error {
log := log.WithField("method", "pays.Callback")
body := ctx.Body()
si := &wechat.SignInfo{
HeaderTimestamp: ctx.Get(wechat.HeaderTimestamp),
HeaderNonce: ctx.Get(wechat.HeaderNonce),
HeaderSignature: ctx.Get(wechat.HeaderSignature),
HeaderSerial: ctx.Get(wechat.HeaderSerial),
SignBody: string(body),
}
notifyReq := &wechat.V3NotifyReq{SignInfo: si}
if err := js.UnmarshalBytes(body, notifyReq); err != nil {
log.Errorf("json unmarshal error:%v", err)
return ctx.Status(http.StatusBadRequest).JSON(fiber.Map{"error": fmt.Sprintf("json unmarshal error:%v", err)})
}
// 获取微信平台证书
certMap := ctl.wepay.WxPublicKeyMap()
// 验证异步通知的签名
err := notifyReq.VerifySignByPKMap(certMap)
notify, err := ctl.wepay.ParseNotify(ctx)
if err != nil {
log.Errorf("verify sign error:%v", err)
return ctx.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "Invalid signature"})
log.Errorf("ParseNotify error:%v", err)
return ctx.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "Failed to parse notify"})
}
if err := ctl.job.Add(&jobs.WechatCallback{NotifyReq: notifyReq}); err != nil {
if err := ctl.job.Add(&jobs.WechatPayNotify{PayNotify: notify}); err != nil {
log.Errorf("add job error:%v", err)
return ctx.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": "Failed to add job"})
}

View File

@@ -2,14 +2,13 @@ package http
import (
_ "embed"
"time"
"quyun/app/models"
"quyun/app/requests"
"quyun/database/fields"
"quyun/database/schemas/public/model"
"quyun/providers/ali"
"quyun/providers/wepay"
"time"
"github.com/go-pay/gopay/wechat/v3"
"github.com/gofiber/fiber/v3"

View File

@@ -1,11 +1,10 @@
package http
import (
"strings"
"time"
"quyun/app/models"
"quyun/database/schemas/public/model"
"strings"
"time"
"github.com/gofiber/fiber/v3"
)

View File

@@ -1,11 +1,10 @@
package http
import (
"time"
"quyun/app/models"
"quyun/database/schemas/public/model"
"quyun/providers/wechat"
"time"
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/log"