1 Star 0 Fork 0

亦息、亦铭/simplifly-airwallex

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
notify.go 2.45 KB
一键复制 编辑 原始数据 按行查看 历史
亦息、亦铭 提交于 2025-04-29 16:23 +08:00 . 1
package airwallex
import (
"errors"
"github.com/gin-gonic/gin"
"github.com/goccy/go-json"
"simplifly-tech/payment/consts"
model2 "simplifly-tech/payment/model"
"strconv"
"strings"
"time"
)
func (airwallexService *AirwallexService) Notify(ctx *gin.Context) (*model2.PaymentNotification, error) {
allRespStr, err := ctx.GetRawData()
if err != nil {
return nil, err
}
var reqData AirwallexReqData
if err = json.Unmarshal(allRespStr, &reqData); err != nil {
return nil, err
}
xTimestamp := ctx.GetHeader("x-timestamp")
xSignature := ctx.GetHeader("x-signature")
if xTimestamp == "" || xSignature == "" {
return nil, errors.New("x-signature error")
}
bodyStr := xTimestamp + string(allRespStr)
newSign := ComputeHMAC(airwallexService.PayServerKey, bodyStr)
if newSign != xSignature {
return nil, errors.New("x-signature error")
}
orderIdArr := strings.Split(reqData.Data.Object.MerchantOrderId, "-")
status := consts.NotifyStatusFailed
if reqData.Data.Object.Status == "SUCCEEDED" {
status = consts.NotifyStatusSuccess
}
paidAt, _ := time.Parse("2006-01-02T15:04:05", reqData.Data.Object.CreatedAt[0:19])
incomeId, _ := strconv.ParseUint(orderIdArr[1], 10, 64)
return &model2.PaymentNotification{
Status: status,
OrderID: orderIdArr[0],
IncomeID: uint(incomeId),
PaidAt: paidAt,
AsyncPayment: true,
ReferenceID: reqData.Data.Object.Id,
}, nil
}
func (airwallexService *AirwallexService) RefundNotify(ctx *gin.Context) (*model2.NotifyResponse, error) {
allRespStr, err := ctx.GetRawData()
if err != nil {
return nil, err
}
var reqData AirWallexRefundNotofy
if err = json.Unmarshal(allRespStr, &reqData); err != nil {
return nil, err
}
xTimestamp := ctx.GetHeader("x-timestamp")
xSignature := ctx.GetHeader("x-signature")
if xTimestamp == "" || xSignature == "" {
return nil, errors.New("signature error")
}
reqDataJson, err := json.Marshal(reqData)
if err != nil {
return nil, err
}
bodyStr := xTimestamp + string(reqDataJson)
newSign := ComputeHMAC(airwallexService.RefundServerKey, bodyStr)
if newSign != xSignature {
return nil, errors.New("signature error")
}
if reqData.Data.Object.Status != "ACCEPTED" && reqData.Data.Object.Status != "SUCCEEDED" { //accepted
return nil, errors.New("not success")
}
paidAt, _ := time.Parse("2006-01-02T15:04:05", reqData.Data.Object.CreatedAt[0:19])
return &model2.NotifyResponse{
PaidAt: &paidAt,
Paid: reqData.Data.Object.Amount.Neg(),
}, nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/lis_lmy/simplifly-airwallex.git
git@gitee.com:lis_lmy/simplifly-airwallex.git
lis_lmy
simplifly-airwallex
simplifly-airwallex
4d04b2c76139

搜索帮助