All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 6m41s
新增通过transaction_id附加苹果交易的功能,包括: 1. 添加AttachAppleTransactionByIdRequest类型和对应路由 2. 实现AppleIAPConfig配置模型 3. 添加ServerAPI获取交易信息的实现 4. 优化JWS解析逻辑,增加cleanB64函数处理空格 5. 完善苹果通知处理逻辑的日志和注释
153 lines
3.7 KiB
Go
153 lines
3.7 KiB
Go
package payment
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type Payment struct {
|
|
Id int64 `gorm:"primaryKey"`
|
|
Name string `gorm:"type:varchar(100);not null;default:'';comment:Payment Name"`
|
|
Platform string `gorm:"<-:create;type:varchar(100);not null;comment:Payment Platform"`
|
|
Icon string `gorm:"type:varchar(255);default:'';comment:Payment Icon"`
|
|
Domain string `gorm:"type:varchar(255);default:'';comment:Notification Domain"`
|
|
Config string `gorm:"type:text;not null;comment:Payment Configuration"`
|
|
Description string `gorm:"type:text;comment:Payment Description"`
|
|
FeeMode uint `gorm:"type:tinyint(1);not null;default:0;comment:Fee Mode: 0: No Fee 1: Percentage 2: Fixed Amount 3: Percentage + Fixed Amount"`
|
|
FeePercent int64 `gorm:"type:int;default:0;comment:Fee Percentage"`
|
|
FeeAmount int64 `gorm:"type:int;default:0;comment:Fixed Fee Amount"`
|
|
Enable *bool `gorm:"type:tinyint(1);not null;default:0;comment:Is Enabled"`
|
|
Token string `gorm:"type:varchar(255);unique;not null;default:'';comment:Payment Token"`
|
|
}
|
|
|
|
func (*Payment) TableName() string {
|
|
return "payment"
|
|
}
|
|
|
|
func (l *Payment) BeforeDelete(_ *gorm.DB) (err error) {
|
|
if l.Id == -1 {
|
|
return fmt.Errorf("can't delete default payment method")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type Filter struct {
|
|
Mark string
|
|
Enable *bool
|
|
Search string
|
|
}
|
|
|
|
type StripeConfig struct {
|
|
PublicKey string `json:"public_key"`
|
|
SecretKey string `json:"secret_key"`
|
|
WebhookSecret string `json:"webhook_secret"`
|
|
Payment string `json:"payment"`
|
|
}
|
|
|
|
func (l *StripeConfig) Marshal() ([]byte, error) {
|
|
type Alias StripeConfig
|
|
return json.Marshal(&struct {
|
|
*Alias
|
|
}{
|
|
Alias: (*Alias)(l),
|
|
})
|
|
}
|
|
|
|
func (l *StripeConfig) Unmarshal(data []byte) error {
|
|
type Alias StripeConfig
|
|
aux := (*Alias)(l)
|
|
return json.Unmarshal(data, &aux)
|
|
}
|
|
|
|
type AlipayF2FConfig struct {
|
|
AppId string `json:"app_id"`
|
|
PrivateKey string `json:"private_key"`
|
|
PublicKey string `json:"public_key"`
|
|
InvoiceName string `json:"invoice_name"`
|
|
Sandbox bool `json:"sandbox"`
|
|
}
|
|
|
|
func (l *AlipayF2FConfig) Marshal() ([]byte, error) {
|
|
type Alias AlipayF2FConfig
|
|
return json.Marshal(&struct {
|
|
*Alias
|
|
}{
|
|
Alias: (*Alias)(l),
|
|
})
|
|
}
|
|
|
|
func (l *AlipayF2FConfig) Unmarshal(data []byte) error {
|
|
type Alias AlipayF2FConfig
|
|
aux := (*Alias)(l)
|
|
return json.Unmarshal(data, &aux)
|
|
}
|
|
|
|
type EPayConfig struct {
|
|
Pid string `json:"pid"`
|
|
Url string `json:"url"`
|
|
Key string `json:"key"`
|
|
Type string `json:"type"`
|
|
}
|
|
|
|
func (l *EPayConfig) Marshal() ([]byte, error) {
|
|
type Alias EPayConfig
|
|
return json.Marshal(&struct {
|
|
*Alias
|
|
}{
|
|
Alias: (*Alias)(l),
|
|
})
|
|
}
|
|
|
|
func (l *EPayConfig) Unmarshal(data []byte) error {
|
|
type Alias EPayConfig
|
|
aux := (*Alias)(l)
|
|
return json.Unmarshal(data, &aux)
|
|
}
|
|
|
|
type CryptoSaaSConfig struct {
|
|
Endpoint string `json:"endpoint"`
|
|
AccountID string `json:"account_id"`
|
|
SecretKey string `json:"secret_key"`
|
|
Type string `json:"type"`
|
|
}
|
|
|
|
func (l *CryptoSaaSConfig) Marshal() ([]byte, error) {
|
|
type Alias CryptoSaaSConfig
|
|
return json.Marshal(&struct {
|
|
*Alias
|
|
}{
|
|
Alias: (*Alias)(l),
|
|
})
|
|
}
|
|
|
|
func (l *CryptoSaaSConfig) Unmarshal(data []byte) error {
|
|
type Alias CryptoSaaSConfig
|
|
aux := (*Alias)(l)
|
|
return json.Unmarshal(data, &aux)
|
|
}
|
|
|
|
type AppleIAPConfig struct {
|
|
ProductIds []string `json:"product_ids"`
|
|
KeyID string `json:"key_id"`
|
|
IssuerID string `json:"issuer_id"`
|
|
PrivateKey string `json:"private_key"`
|
|
Sandbox bool `json:"sandbox"`
|
|
}
|
|
|
|
func (l *AppleIAPConfig) Marshal() ([]byte, error) {
|
|
type Alias AppleIAPConfig
|
|
return json.Marshal(&struct {
|
|
*Alias
|
|
}{
|
|
Alias: (*Alias)(l),
|
|
})
|
|
}
|
|
|
|
func (l *AppleIAPConfig) Unmarshal(data []byte) error {
|
|
type Alias AppleIAPConfig
|
|
aux := (*Alias)(l)
|
|
return json.Unmarshal(data, &aux)
|
|
}
|