You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP API创建PayPal计费协议后,如何在IPN中获取并解密Billing AgreementId?

如何在PayPal IPN中获取并解密Billing AgreementId?

当然可以在IPN通知里拿到Billing AgreementId!你提到的那个加密字段,其实是PayPal返回的encrypted_billing_agreement_id,下面我给你拆解下获取和解密的具体步骤:

一、确认IPN中的目标字段

当IPN触发和计费协议相关的事件(比如协议创建成功、定期付款完成等)时,IPN的POST数据里会包含encrypted_billing_agreement_id这个字段,也就是你截图里看到的加密值。

二、解密加密的Billing AgreementId(PHP实现)

因为你是用PHP开发的,这里直接给你适配PHP的解密方案:

1. 准备PayPal公钥

首先你需要从PayPal开发者平台获取对应环境的公钥:

  • 登录PayPal开发者账号,进入你的应用详情页
  • 找到IPN加密相关的设置板块,下载对应环境(沙箱/生产)的公钥文件(通常是.pem格式)

2. 编写PHP解密代码

利用PHP的OpenSSL扩展来完成解密操作,注意要先对加密字段做base64解码,示例代码如下:

// 从IPN的POST数据中获取加密的协议ID
$encryptedAgreementId = $_POST['encrypted_billing_agreement_id'];

// 读取你下载的PayPal公钥文件
$paypalPublicKey = file_get_contents('/your/path/to/paypal_public_key.pem');

// 先对加密字符串进行base64解码
$encryptedData = base64_decode($encryptedAgreementId);

// 执行解密操作
$decryptedAgreementId = '';
// 使用OAEP填充模式,这是PayPal要求的解密方式
openssl_public_decrypt($encryptedData, $decryptedAgreementId, $paypalPublicKey, OPENSSL_PKCS1_OAEP_PADDING);

// 现在$decryptedAgreementId就是明文的Billing AgreementId了
var_dump($decryptedAgreementId);

3. 关键注意事项

  • 环境匹配:沙箱环境必须用沙箱公钥,生产环境用生产公钥,混用会直接导致解密失败。
  • IPN真实性验证:在解密之前,一定要先验证IPN消息的合法性!把收到的所有POST数据原封不动回传给PayPal的验证URL(沙箱:https://ipnpb.sandbox.paypal.com/cgi-bin/webscr,生产:https://ipnpb.paypal.com/cgi-bin/webscr),只有收到PayPal返回的VERIFIED,再进行解密操作,避免恶意请求。
  • OpenSSL扩展:确保你的PHP环境已经启用了OpenSSL扩展,否则openssl_public_decrypt函数无法正常运行。

内容的提问来源于stack exchange,提问作者Veerankutty VP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 18:18:15