12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package payment
- import (
- "eta/eta_mini_ht_api/common/component/cache"
- logger "eta/eta_mini_ht_api/common/component/log"
- "eta/eta_mini_ht_api/common/exception"
- "eta/eta_mini_ht_api/common/utils/payment"
- "eta/eta_mini_ht_api/common/utils/redis"
- orderService "eta/eta_mini_ht_api/domian/order"
- "fmt"
- "strings"
- )
- var (
- redisUtils = cache.GetInstance()
- )
- type WechatSDKParams struct {
- OrderNo string
- PrepayId string
- Timestamp string
- NonceStr string
- PaySign string
- SignType string
- }
- func CreatePaymentOrder(userId, templateUserId int, OrderNo string, tradeNo string) (err error) {
- //先获取当前商品订单的支付记录
- tradeOrderList, err := orderService.GetUnFailedTradeFlowByProductOrder(OrderNo)
- if len(tradeOrderList) > 0 {
- for _, tradeOrder := range tradeOrderList {
- if tradeOrder.PaymentStatus == "done" {
- logger.Error("当前商品订单已支付,无法再次发起支付")
- return exception.New(exception.PaymentDoneError)
- }
- if tradeOrder.PaymentStatus == "pending" {
- logger.Error("当前商品订单正在支付,无法再次发起支付")
- return exception.New(exception.PaymentProcessingError)
- }
- }
- }
- merchantId := redisUtils.GetString(redis.GenerateMerchantKey())
- if merchantId == "" {
- logger.Error("商户配置信息不存在,无法创建支付订单")
- err = exception.New(exception.MerchantInfoNotConfig)
- return
- }
- return orderService.CreateTradeOrder(userId, templateUserId, OrderNo, tradeNo, merchantId)
- }
- func GenerateProductOrderNo() string {
- return orderService.GenerateTradeOrderNo()
- }
- func DealWechatSDKParams(sdk WechatSDKParams) (err error) {
- keys, err := redisUtils.Keys(redis.GenerateWechatOrderToken("*"))
- if err != nil {
- err = fmt.Errorf("系统异常,获取支付订单失败")
- }
- var hitOrder bool
- var paymentParam payment.PaymentParam
- var redisErr error
- for _, key := range keys {
- paymentParam, redisErr = payment.GetPaymentParam(strings.TrimPrefix(key, "payment:token:"))
- if redisErr != nil {
- continue
- }
- if paymentParam.PayOrderNo == sdk.OrderNo {
- if paymentParam.Status != payment.PENDING {
- logger.Error("重复的推送消息")
- err = fmt.Errorf("当前订单正在处理中,请勿重复推送")
- return
- }
- paymentParam.PrepayId = sdk.PrepayId
- paymentParam.Timestamp = sdk.Timestamp
- paymentParam.NonceStr = sdk.NonceStr
- paymentParam.PaySign = sdk.PaySign
- paymentParam.SignType = sdk.SignType
- redisErr = payment.Ready(key, paymentParam)
- if redisErr == nil {
- hitOrder = true
- }
- break
- }
- }
- if !hitOrder {
- logger.Error("处理微信支付SDK失败,订单信息不存在/信息处理异常[%v]", redisErr)
- err = fmt.Errorf("处理微信支付SDK失败,订单信息不存在/信息处理异常")
- }
- return
- }
|