概述
接入支付宝 App 支付时,你是否遇到过 x509: inner and outer signature algorithm identifiers don't match 或 isv.not-online-app 错误?本文基于真实排障经历,分析两个典型问题:一是因加密类型(证书模式与普通模式)混用导致的证书签名算法不匹配;二是应用未提交审核直接调起支付返回 40003。帮你快速定位并解决这些"隐形坑"。
商户/应用申请
支付宝商户支付需要的流程步骤:
1、在支付宝开通商户商家平台申请、开通认证商户 https://b.alipay.com/page/portal/home
2、在支付宝开放平台申请应用,用户是通用的,一定要注意登录次数,是有次数限制的 https://open.alipay.com/
3、下载支付宝开放平台密钥工具,如下如:

加密方式
加密方式一共有两种:密钥模式 、证书模式 ,支付宝开放平台,RSA2、SM2 都分「普通公钥模式」和「公钥证书模式」,核心差异是安全等级、抗抵赖能力。
- 密钥模式 :直接用「公钥、私钥字符串」验签,无第三方认证,简单但安全弱。
- 证书模式 :用带 CA 签名的数字证书 验签,支付宝官方核验证书身份,防篡改、防冒充、可吊销,安全等级高。
1. 普通密钥模式(最简单)
- 生成:自己生成一对应用私钥、应用公钥,上传应用公钥到支付宝,下载支付宝公钥。
- 原理:纯密钥校验,无第三方 CA 机构背书。
- 特点:配置简单、对接快;私钥泄露风险高,无身份背书,中小商户、测试环境常用。
2. 证书模式(更安全,推荐生产)
- 生成:申请X.509 格式数字证书(RSA2 证书 / SM2 国密证书),上传证书 + 证书私钥。
- 原理:引入 CA 机构认证身份,证书带有效期,可吊销,支持抗抵赖、防篡改、身份核验。
- 特点:安全性极高,满足金融级安全;配置复杂,需维护证书有效期;RSA2、SM2 都支持证书模式。
加密算法
- RSA2(SHA256withRSA) :国际通用非对称算法,支付宝默认主流方案, 密钥固定 2048 位 RSA,搭配 SHA256 哈希签名,基于**大整数分解难题。
- SM2:国家商用密码算法(国密),椭圆曲线 ECC 算法,密钥仅 256 位 ,基于椭圆曲线离散对数难题,国内金融、政务强制合规场景优先。
设置密钥
在支付宝开放平台设置密钥Key,根据你接入的类型设置,把每一个证书下载到本地,在SDK调起的地方使用,我的是证书类型,证书类型稍微复杂一点:

在实际的接入中,遇到了2个问题:
问题一:登录到支付宝开放平台应用->开发设置里可以设置,需要注意的是加密类型,如果类型不一致,支付宝不能成功调起,比如我之前用的是证书,然后配置的不对,产生错误信息x509: inner and outer signature algorithm identifiers don't match 配置正确就能被成功调用。
问题二:再接入SDK的时候,支付宝返回错误信息,这是因为应用还未上线,提交审核。
JavaScript
{resultStatus: 4000, result: {
"alipay_trade_app_pay_response": {
"code": "40003",
"msg": "Insufficient Conditions",
"sub_code": "isv.not-online-app",
"sub_msg": "应用未上线"
}
}, memo:
}
代码实现
代码包使用的是官方集成包github.com/smartwalle/alipay/v3,把主要结构体和方法写在下面了,只要能实例化没有提示公钥错误,说明密钥已经被正确创建了,把包集成到自己的业务里就可以了。
go
package pay
import (
"github.com/smartwalle/alipay/v3"
)
type AliPay struct {
ctx context.Context
svcCtx *svc.ServiceContext
AppId string
IsProd bool
SignType string
ReturnUrl string
NotifyUrl string
RefundNotifyUrl string
PrivateKey string
AppPublicCert string // 应用公钥
AlipayRootCert string // 支付宝根证书
AlipayPublicCert string // 支付宝公钥
client *alipay.Client
}