You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
v2.tiantianxinye.365care/支付宝面对面支付密钥配置说明.md

7.7 KiB

支付宝面对面支付密钥配置说明

📋 需要的密钥参数

根据代码 AlipayF2F.class.php,支付宝面对面支付需要以下 3个核心参数

代码中的变量名 数据库字段 说明 是否必需
merchantPrivateKey private_key 应用私钥(商户私钥) 必需
appId appid 应用IDAPPID 必需
alipayPublicKey alipay_key 支付宝公钥 必需
- public_key 应用公钥 ⚠️ 需要上传到支付宝,但代码中不使用

🔑 各密钥的作用

1. 应用ID (APPID)

  • 作用:标识您的应用,支付宝用来识别是哪个应用发起的请求
  • 获取位置:支付宝开放平台 → 开发者中心 → 应用详情页
  • 格式:通常是数字字符串,如 2021001234567890

2. 应用私钥 (merchantPrivateKey / private_key)

  • 作用:用于对请求参数进行签名,确保请求的真实性和完整性
  • 生成方式:使用支付宝密钥生成工具生成
  • 格式RSA2 私钥,通常以 -----BEGIN RSA PRIVATE KEY----- 开头
  • ⚠️ 重要绝对不能泄露,泄露后可能导致资金损失

3. 支付宝公钥 (alipayPublicKey / alipay_key)

  • 作用:用于验证支付宝返回数据的签名,确保数据来源的真实性
  • 获取位置:上传应用公钥后,在支付宝开放平台自动生成
  • 格式RSA2 公钥,通常以 -----BEGIN PUBLIC KEY----- 开头

4. 应用公钥 (public_key)

  • 作用:需要上传到支付宝开放平台,支付宝用此公钥验证您的签名
  • 生成方式:与应用私钥成对生成
  • ⚠️ 注意:代码中不使用此字段,但必须上传到支付宝平台

📍 获取步骤

第一步:注册并登录支付宝开放平台

  1. 访问:https://open.alipay.com/
  2. 使用支付宝账号登录
  3. 完成开发者认证(企业或个人)

第二步:申请开通当面付功能

  1. 登录后,进入 "产品中心"
  2. 搜索 "当面付" 产品
  3. 点击 "立即接入" 进行申请
  4. 填写相关信息并提交审核
  5. 等待审核通过通常1-3个工作日

第三步:创建应用并获取 APPID

  1. 进入 "开发者中心""我的应用"
  2. 点击 "创建应用"
  3. 选择应用类型:"网页&移动应用"
  4. 填写应用信息:
    • 应用名称
    • 应用图标
    • 应用描述
    • 应用类型等
  5. 提交审核
  6. 审核通过后,在应用详情页可以看到 APPID

第四步:生成密钥对

4.1 下载密钥生成工具

4.2 生成密钥对

  1. 运行密钥生成工具
  2. 选择密钥类型:RSA2推荐
  3. 点击 "生成密钥"
  4. 工具会生成:
    • 应用私钥private_key- 保存好,不要泄露
    • 应用公钥public_key- 需要上传到支付宝

4.3 保存密钥

  • 应用私钥:复制保存到数据库的 private_key 字段
  • 应用公钥:复制保存到数据库的 public_key 字段(用于上传)

第五步:上传应用公钥并获取支付宝公钥

  1. 进入应用详情页 → "开发设置""接口加签方式"
  2. 找到 "应用公钥" 配置项
  3. 将生成的 应用公钥 粘贴进去
  4. 点击 "保存"
  5. 保存后,支付宝会自动生成 支付宝公钥
  6. 复制 支付宝公钥,保存到数据库的 alipay_key 字段

📚 官方文档链接

主要文档

  1. 支付宝开放平台首页

  2. 当面付产品文档

  3. 密钥生成工具下载

  4. 密钥配置指南

  5. EasySDK 使用文档(您的代码使用的是 EasySDK

  6. API 文档 - 统一收单交易支付接口

开发指南

💾 数据库配置

在系统中配置时,需要填写以下字段:

// 数据库表alipay_account
[
    'name' => '支付宝账号名称',           // 便于识别的名称
    'appid' => '2021001234567890',        // 应用ID
    'private_key' => '-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA...
-----END RSA PRIVATE KEY-----',           // 应用私钥(完整内容)
    'public_key' => '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A...
-----END PUBLIC KEY-----',                // 应用公钥(完整内容,需上传到支付宝)
    'alipay_key' => '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A...
-----END PUBLIC KEY-----',                // 支付宝公钥(完整内容)
]

⚠️ 重要注意事项

安全相关

  1. 应用私钥绝对不能泄露

    • 不要提交到代码仓库
    • 不要通过邮件、聊天工具发送
    • 建议存储在数据库中,并做好数据库安全防护
  2. 密钥格式要完整

    • 必须包含 -----BEGIN...----------END...----- 标记
    • 必须包含所有换行符
    • 不要删除任何空格或换行
  3. 密钥长度

    • RSA2 密钥通常较长2048位
    • 确保数据库字段长度足够(代码中设置为 2048 字符)

配置相关

  1. 签名方式

    • 代码中使用的是 RSA2 签名方式
    • 确保支付宝平台也配置为 RSA2
  2. 环境区分

    • 沙箱环境(测试):使用沙箱的 APPID 和密钥
    • 正式环境(生产):使用正式环境的 APPID 和密钥
  3. 应用公钥上传

    • 必须上传应用公钥到支付宝平台
    • 上传后支付宝才会生成对应的支付宝公钥
    • 如果更换了密钥对,需要重新上传

🔍 代码中的使用位置

// app/Libs/AlipayF2F.class.php

public function getOptions(AlipayAccount $alipayAccount)
{
    $options = new Config();
    $options->protocol = 'https';
    $options->gatewayHost = 'openapi.alipay.com';
    $options->signType = 'RSA2';  // 使用 RSA2 签名
    
    // 从数据库读取配置
    $options->merchantPrivateKey = $alipayAccount->private_key;  // 应用私钥
    $options->appId = $alipayAccount->appid;                     // 应用ID
    $options->alipayPublicKey = $alipayAccount->alipay_key;      // 支付宝公钥
    
    return $options;
}

🛠️ 常见问题

Q1: 密钥生成工具在哪里下载?

A: https://opendocs.alipay.com/common/02khjo

Q2: 应用公钥和支付宝公钥有什么区别?

A:

  • 应用公钥:您自己生成的,需要上传到支付宝
  • 支付宝公钥:支付宝根据您的应用公钥生成的,用于验证支付宝返回的数据

Q3: 私钥泄露了怎么办?

A: 立即重新生成密钥对,并更新支付宝平台配置,同时更换数据库中的私钥

Q4: 测试环境和正式环境的密钥可以共用吗?

A: 不可以,测试环境(沙箱)和正式环境需要使用不同的 APPID 和密钥

Q5: 密钥格式要求是什么?

A: 必须包含完整的 PEM 格式,包括 BEGIN 和 END 标记,以及所有换行符

📞 技术支持