All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 7m42s
- getStatusLogic 类型断言修复(*user.User) - restoreLogic 事务拆分为单条处理 + appAccountToken 解析 - attachTransactionLogic 提取 ParseProductIdDuration 共享函数 - 新增 config_helper.go 统一 Apple API 配置加载 - reconcileLogic 补充 BundleID 配置读取 - activateOrderLogic 邀请赠送天数逻辑完善 Co-Authored-By: claude-flow <ruv@ruv.net>
58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
package apple
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"strings"
|
|
|
|
"github.com/perfect-panel/server/internal/model/payment"
|
|
"github.com/perfect-panel/server/internal/svc"
|
|
iapapple "github.com/perfect-panel/server/pkg/iap/apple"
|
|
)
|
|
|
|
// LoadAppleServerAPIConfig loads the first enabled Apple IAP payment config
|
|
// from the payment table and returns a ServerAPIConfig ready for API calls.
|
|
func LoadAppleServerAPIConfig(ctx context.Context, svc *svc.ServiceContext) (*iapapple.ServerAPIConfig, error) {
|
|
pays, err := svc.PaymentModel.FindListByPlatform(ctx, "apple")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, pay := range pays {
|
|
if pay.Enable == nil || !*pay.Enable || pay.Config == "" {
|
|
continue
|
|
}
|
|
var cfg payment.AppleIAPConfig
|
|
if e := cfg.Unmarshal([]byte(pay.Config)); e != nil {
|
|
continue
|
|
}
|
|
if cfg.KeyID == "" || cfg.IssuerID == "" || cfg.PrivateKey == "" {
|
|
continue
|
|
}
|
|
apiCfg := &iapapple.ServerAPIConfig{
|
|
KeyID: cfg.KeyID,
|
|
IssuerID: cfg.IssuerID,
|
|
PrivateKey: fixPEMKey(cfg.PrivateKey),
|
|
Sandbox: cfg.Sandbox,
|
|
}
|
|
// Read BundleID from site custom data
|
|
if svc.Config.Site.CustomData != "" {
|
|
var customData struct {
|
|
IapBundleId string `json:"iapBundleId"`
|
|
}
|
|
_ = json.Unmarshal([]byte(svc.Config.Site.CustomData), &customData)
|
|
apiCfg.BundleID = customData.IapBundleId
|
|
}
|
|
return apiCfg, nil
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
func fixPEMKey(key string) string {
|
|
if !strings.Contains(key, "\n") && strings.Contains(key, "BEGIN PRIVATE KEY") {
|
|
key = strings.ReplaceAll(key, " ", "\n")
|
|
key = strings.ReplaceAll(key, "-----BEGIN\nPRIVATE\nKEY-----", "-----BEGIN PRIVATE KEY-----")
|
|
key = strings.ReplaceAll(key, "-----END\nPRIVATE\nKEY-----", "-----END PRIVATE KEY-----")
|
|
}
|
|
return key
|
|
}
|