2. 开发者账号注册与密钥获取
支付 SDK 接入的第一步是完成开发者账号注册并获取合法的 。本章围绕注册流程、商户号申请、密钥生成与存储安全展开,确保后续接口调用拥有合法的身份凭证与签名能力。不同支付平台(微信支付、支付宝、银联等)的注册入口虽有差异,但核心环节高度一致。
2.1 注册流程
开发者账号注册通常分为以下四个阶段,完成后方可进入应用创建与密钥申请环节。
- 选择平台与入口:根据业务场景选择支付平台(国内常用微信支付、支付宝、银联云闪付;跨境可用 Stripe、Adyen),进入开发者中心或开放平台。
- 填写账号信息:提交邮箱、手机号、开发者名称,设置登录密码并完成邮箱/手机验证。
- 企业实名认证:上传营业执照、法人身份证、对公账户信息(部分平台要求打款验证),认证通过后账号升级为企业开发者。
- 等待平台审核:审核周期通常为 1–3 个工作日,审核通过后获得开发者权限,可创建应用与商户号。
经验提示:建议提前准备清晰的营业执照扫描件与法人身份证正反面照片。部分平台(如支付宝)支持“先注册后认证”,允许在认证前浏览沙箱环境并调试 API。
2.2 商户号与 申请
审核通过后,需在开发者中心完成应用创建、商户号签约及密钥配置。下表对比主流平台的注册与密钥申请差异。
| 支付平台 | 注册入口 | 所需材料 | 审核周期 | 密钥类型 |
|---|---|---|---|---|
| 微信支付 | pay.weixin.qq.com | 营业执照 + 法人身份证 + 对公账户 | 1–3 工作日 | APIv3 密钥 / 商户证书 |
| 支付宝 | open.alipay.com | 营业执照 + 法人身份证 | 1–3 工作日 | RSA 公私钥 / AES 密钥 |
| 银联云闪付 | open.unionpay.com | 企业资质 + 业务运营证明 | 3–5 工作日 | RSA / SM2 证书 |
| Stripe | dashboard.stripe.com | 企业信息 + 银行账户 | 即时–1 日 | Secret Key / Publishable Key |
商户号与 的申请步骤通常包含:
- 创建应用获取 AppID:在开发者中心创建应用,系统分配唯一 AppID(如微信 AppID、支付宝 AppID),用于标识应用身份。
- 签约商户号(MCH_ID):提交商户资料并签署支付协议,审核通过后获得商户号。商户号与 AppID 绑定,用于交易结算与对账。
- 生成 :在商户平台手动生成或上传 RSA 公钥。密钥用于接口签名与数据加密,部分平台同时提供 AES 对称密钥用于敏感信息加密。
- 密钥绑定与激活:将生成的公钥上传至平台,或复制平台下发的密钥字符串到本地配置文件,完成绑定后密钥生效。
密钥生成示例(OpenSSL 生成 RSA 2048 密钥对):
# 生成私钥
openssl genrsa -out private_key.pem 2048
# 从私钥导出公钥
openssl rsa -in private_key.pem -pubout -out public_key.pem
# 查看私钥详情
openssl rsa -in private_key.pem -text -noout
生成的 public_key.pem 需上传至支付平台,private_key.pem 严禁外泄或上传至代码仓库。
2.3 安全注意事项
密钥泄露是支付接入中最常见的安全事故。以下安全措施必须纳入开发规范:
- 加密存储:密钥文件不应以明文形式保存在代码仓库或配置文件中。建议使用环境变量、密钥管理服务(KMS)或硬件安全模块(HSM)存储。
- 定期轮换:每 90 天轮换一次,敏感业务建议缩短至 30 天。轮换后需同步更新生产环境的密钥配置,避免影响线上交易。
- 传输加密:密钥在传输过程中必须使用 HTTPS/TLS 加密通道,禁止通过明文 HTTP、邮件或即时通讯工具传递密钥内容。
- 权限最小化:为每个应用分配独立的 ,避免不同环境(开发 / 测试 / 生产)共用密钥。生产环境密钥仅授权给必要的服务账号。
- 日志脱敏:在应用日志、异常堆栈或监控系统中禁止打印完整的密钥字符串,可输出前四位与后四位用于定位,中间部分用星号遮盖。
高危操作禁止:
• 严禁将私钥文件上传至 GitHub、GitLab 等公开代码仓库。
• 严禁在前端代码或客户端安装包中硬编码 。
• 严禁在数据库中以明文字段存储商户密钥,必须使用 AES-256 或更强的加密算法进行加密存储。
• 严禁将私钥文件上传至 GitHub、GitLab 等公开代码仓库。
• 严禁在前端代码或客户端安装包中硬编码 。
• 严禁在数据库中以明文字段存储商户密钥,必须使用 AES-256 或更强的加密算法进行加密存储。
2.4 密钥配置示例
完成密钥申请后,通常需要将密钥写入服务端配置文件或环境变量。以下为典型的 YAML 配置结构与注册 API 请求示例。
# config.yaml — 支付密钥配置文件(禁止提交至代码仓库)
payment:
wechat:
app_id: "wx1234567890abcdef"
mch_id: "1600001234"
api_secret: "${WECHAT_API_SECRET}" # 通过环境变量注入
cert_path: "/etc/certs/wechat/apiclient_cert.p12"
alipay:
app_id: "2021000112345678"
private_key_path: "/etc/certs/alipay/private_key.pem"
alipay_public_key: "/etc/certs/alipay/alipay_public_key.pem"
// 注册 API 请求示例 — 创建商户应用(POST /v1/merchant/apps)
{
"platform": "wechat",
"app_name": "电商支付应用",
"merchant_id": "1600001234",
"notify_url": "https://api.example.com/payment/callback",
"sign_type": "RSA2",
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...\n-----END PUBLIC KEY-----"
}
生产环境密钥管理最佳实践:
• 使用密钥管理服务(KMS)自动轮换密钥,避免人工操作导致泄露。
• 为每个环境(开发 / 测试 / 预生产 / 生产)分配独立的密钥集,环境间禁止复用。
• 添加密钥使用审计日志,记录每次密钥的读取、解密与轮换操作,便于追溯异常行为。
• 使用密钥管理服务(KMS)自动轮换密钥,避免人工操作导致泄露。
• 为每个环境(开发 / 测试 / 预生产 / 生产)分配独立的密钥集,环境间禁止复用。
• 添加密钥使用审计日志,记录每次密钥的读取、解密与轮换操作,便于追溯异常行为。