PayPal订阅创建后webhook回调数据缺少custom_id如何解决
问题根因
你提交的订阅创建请求参数结构错误:custom_id 是PayPal订阅创建接口的顶级请求参数,和 plan_id、start_time 平级,你错误将该字段放到了 shipping_amount 内部。而 shipping_amount 仅支持 currency_code、value 两个合法字段,PayPal会直接忽略该字段下的非法参数,因此你传递的custom_id没有被存储,自然不会在webhook回调中返回。
修复方案
调整你请求的JSON结构,将custom_id移到顶级参数位置即可,修正后的请求体示例如下:
// 仅展示调整后的CURLOPT_POSTFIELDS部分,其余代码保持不变 curl_setopt($ch, CURLOPT_POSTFIELDS, '{ "plan_id": "P-97A61885CU957844JMFV", "start_time": "2021-10-19T00:00:00Z", "custom_id": "xxxxdxxx", "shipping_amount": { "currency_code": "USD", "value": "10.00" }, "subscriber": { "name": { "given_name": "John", "surname": "Doe" }, "email_address": "customer@example.com", "shipping_address": { "name": { "full_name": "John Doe" }, "address": { "address_line_1": "2211 N First Street", "address_line_2": "Building 17", "admin_area_2": "San Jose", "admin_area_1": "CA", "postal_code": "95131", "country_code": "US" } } }, "application_context": { "brand_name": "SAMPLEBRAND", "locale": "en-US", "shipping_preference": "SET_PROVIDED_ADDRESS", "user_action": "SUBSCRIBE_NOW", "payment_method": { "payer_selected": "PAYPAL", "payee_preferred": "IMMEDIATE_PAYMENT_REQUIRED" }, "return_url": "https://sample.com/webhook_paypal.php", "cancel_url": "https://sample.com/webhook_paypal.php" } }');
注意事项
- 调整参数后发起请求,后续所有和该订阅相关的webhook回调(包括订阅创建、扣款成功、订阅状态变更等事件)的
resource字段下,都会携带你传入的custom_id custom_id最大支持127个字符,超出长度会被截断或导致请求报错- 你可以在订阅创建成功后,直接调用订阅查询接口提前验证
custom_id是否被正确存储,无需等待webhook触发
内容的提问来源于stack exchange,提问作者user1343837
相关产品推荐
相关产品推荐

