Skip to content

40003 - 应用未配置对应签名算法的公钥或者证书 #251

Description

@KdGhost
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, 微信小程序也设置了私钥公钥, 已经不知道具体哪里出了问题了

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions