身份验证
配置 RSA 凭据并为 MusePay API 请求生成签名。
MusePay 使用 RSA 签名验证 API 请求。您需要自行生成并保管私钥,然后将对应的公钥上传至 MusePay。MusePay 不需要、也不会获取您的私钥。
生成 RSA 密钥对
生成 PKCS #8 PEM 格式的 2048 位 RSA 私钥,然后导出对应的公钥:
openssl genpkey -algorithm RSA -out muse_secret.key -pkeyopt rsa_keygen_bits:2048
openssl pkey -in muse_secret.key -pubout -out muse_public.key私钥文件格式如下。示例中间内容已经掩码处理,并非可用私钥:
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSj...已省略...AQAB
-----END PRIVATE KEY-----打开 Partner Portal,进入 API Key 页签,上传 muse_public.key 的内容以配置合作伙伴公钥。MusePay 使用该公钥验证您的 API 请求签名。
上传前,请删除 -----BEGIN PUBLIC KEY----- 和 -----END PUBLIC KEY----- 标记行,并去除所有换行。仅上传剩余的 Base64 公钥内容,确保其为完整的一行。

同时下载并妥善保存 MusePay 公钥。验证签名的 Webhook 通知时,应使用 MusePay 公钥,而不是您的合作伙伴公钥。
身份验证必填字段
每个 API 请求的 Body 都必须包含以下字段。生成签名前,还需要将接口特有字段放入同一个 Body。
partner_id
String
Partner Portal 中显示的合作伙伴 ID。
sign_type
String
固定值:RSA。
timestamp
String
当前 10 位 Unix 秒级时间戳。
nonce
String
本次请求的唯一随机值。每次请求都应生成新的 nonce;60 秒内重复使用将被拒绝。
sign
String
按下述方式生成并经过 Base64 编码的 RSA 签名。
共享请求字段的完整说明请参阅通用参数。
生成签名
请使用最终发送给 MusePay 的准确请求值:
移除
sign字段。排除值为
null或空字符串的字段。按字段名称区分大小写地进行升序排列。
将每个字段格式化为
key=value,再使用&连接。不要对该规范字符串进行 URL 编码。将规范字符串编码为 UTF-8,并使用您的 RSA 私钥和
SHA1WithRSA算法生成签名。对生成的签名进行 Base64 编码,并将结果作为
sign发送。
请求示例
未签名的请求 Body:
生成的规范字符串为:
签名完成后,将经过 Base64 编码的结果加入请求 Body:
代码示例
以下示例从 muse_secret.key 文件读取私钥。请将该文件存放在代码仓库之外,并严格限制访问权限。
签名错误排查
如果 MusePay 拒绝签名,请确认:
Partner Portal 中上传的公钥与本次签名使用的私钥相匹配;
规范字符串包含除
sign外的所有非空请求字段;字段名称和值与最终请求 Body 完全一致;
字段已按名称排序,且未进行 URL 编码;
内容使用 UTF-8 编码,并通过
SHA1WithRSA签名;timestamp是 10 位 Unix 秒级时间戳;每个请求都生成了新的
nonce。
最后更新于