package alipay
import (
"PartTimeBack/src/constant/config"
"PartTimeBack/src/utils/logger"
"context"
"fmt"
"github.com/smartwalle/alipay/v3"
)
func GetOpenid(code string, tokenVersion string) string {
// 初始化支付宝客户端,明确指定签名算法为 RSA2
client, err := alipay.New(config.EnvCfg.AliAppid, config.EnvCfg.AliAppPrivateKey, false)
if err != nil {
logger.Warning("初始化支付宝客户端失败: ", err)
return ""
}
client.SetEncryptKey("KvXUzxp5d8aNhD+sr+ulpw==")
// 设置支付宝公钥
if err := client.LoadAliPayPublicKey(config.EnvCfg.AliPublicKey); err != nil {
logger.Warning("加载支付宝公钥失败: ", err)
return ""
}
logger.Info("支付宝小程序登录参数:")
logger.Info("Appid:", config.EnvCfg.AliAppid)
logger.Info("Code:", code)
logger.Info("TokenVersion:", tokenVersion)
logger.Info("支付宝应用私钥:", config.EnvCfg.AliAppPrivateKey)
logger.Info("支付宝应用公钥:", config.EnvCfg.AliAppPublicKey)
logger.Info("支付宝公钥:", config.EnvCfg.AliPublicKey)
// 调用接口获取 openId
ctx := context.Background()
param := alipay.SystemOauthToken{
GrantType: "authorization_code",
Code: code,
}
resp, err := client.SystemOauthToken(ctx, param)
if err != nil {
logger.WarningF("支付宝小程序用户登录鉴权失败!: %v", err)
return ""
}
// 解析返回结果,提取 openId
if resp.OpenId != "" {
logger.Info(fmt.Sprintf("获取用户openId成功: %s", resp.OpenId))
return resp.OpenId
}
// 兼容处理:如果没有 open_id,尝试获取 user_id
if resp.UserId != "" {
logger.Info(fmt.Sprintf("获取用户userId成功: %s", resp.UserId))
return resp.UserId
}
logger.Warning("解析 openId 失败")
logger.Info("响应内容:", resp)
return ""
}
获取openId 一个劲的报 40003, 微信小程序也设置了私钥公钥, 已经不知道具体哪里出了问题了