2. 开发者账号注册与密钥获取

支付 SDK 接入的第一步是完成开发者账号注册并获取合法的 。本章围绕注册流程、商户号申请、密钥生成与存储安全展开,确保后续接口调用拥有合法的身份凭证与签名能力。不同支付平台(微信支付、支付宝、银联等)的注册入口虽有差异,但核心环节高度一致。

2.1 注册流程

开发者账号注册通常分为以下四个阶段,完成后方可进入应用创建与密钥申请环节。

  1. 选择平台与入口:根据业务场景选择支付平台(国内常用微信支付、支付宝、银联云闪付;跨境可用 Stripe、Adyen),进入开发者中心或开放平台。
  2. 填写账号信息:提交邮箱、手机号、开发者名称,设置登录密码并完成邮箱/手机验证。
  3. 企业实名认证:上传营业执照、法人身份证、对公账户信息(部分平台要求打款验证),认证通过后账号升级为企业开发者。
  4. 等待平台审核:审核周期通常为 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

商户号与 的申请步骤通常包含:

  1. 创建应用获取 AppID:在开发者中心创建应用,系统分配唯一 AppID(如微信 AppID、支付宝 AppID),用于标识应用身份。
  2. 签约商户号(MCH_ID):提交商户资料并签署支付协议,审核通过后获得商户号。商户号与 AppID 绑定,用于交易结算与对账。
  3. 生成 :在商户平台手动生成或上传 RSA 公钥。密钥用于接口签名与数据加密,部分平台同时提供 AES 对称密钥用于敏感信息加密。
  4. 密钥绑定与激活:将生成的公钥上传至平台,或复制平台下发的密钥字符串到本地配置文件,完成绑定后密钥生效。
密钥生成示例(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 或更强的加密算法进行加密存储。
开发者账号注册与密钥获取流程 1. 注册开发者账号 2. 企业实名认证 3. 平台资质审核 4. 创建应用获取 AppID 5. 申请商户号 6. 配置 7. 密钥安全存储 安全注意事项(贯穿全流程) • 密钥必须加密存储,禁止明文写入配置或代码仓库 • 每 90 天轮换一次密钥,生产环境与测试环境密钥隔离 • 所有密钥传输必须使用 HTTPS/TLS 加密通道,日志输出必须脱敏

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)自动轮换密钥,避免人工操作导致泄露。
• 为每个环境(开发 / 测试 / 预生产 / 生产)分配独立的密钥集,环境间禁止复用。
• 添加密钥使用审计日志,记录每次密钥的读取、解密与轮换操作,便于追溯异常行为。