- 配置PayPal Webhook URL和Webhook ID用于支付回调处理 - 移除PayPal对CNY和MYR货币的支持,添加特殊转换处理逻辑 - 实现用户信息获取、更新和密码修改的API接口 - 添加Token验证和用户身份认证机制 - 实现用户信息更新时的手机号和邮箱唯一性校验 - 添加密码修改时的旧密码验证功能
3.0 KiB
3.0 KiB
PayPal订单生命周期和字段填充说明
订单状态流转
PayPal订单会经历以下状态:
- CREATED - 订单已创建(初始状态)
- PAYER_ACTION_REQUIRED - 需要付款人操作(跳转到PayPal登录页)
- APPROVED - 订单已批准(用户在PayPal批准支付)
- COMPLETED - 订单已完成(订单被捕获后)
字段填充时机
创建订单时(CREATED状态)
以下字段在创建订单时通常为 null,这是正常现象:
payer_email- null(用户尚未登录PayPal)payer_name- null(用户尚未登录PayPal)payer_id- null(用户尚未登录PayPal)payment_status- null(尚未支付)capture_id- null(尚未捕获订单)
原因:创建订单时,用户还没有在PayPal登录和批准支付,所以PayPal不会返回这些信息。
用户批准订单后(APPROVED状态)
以下字段会被填充:
payer_email- 用户PayPal邮箱payer_name- 用户PayPal姓名payer_id- 用户PayPal账户IDpayment_status- 仍为null(尚未捕获)capture_id- 仍为null(尚未捕获)
触发时机:
- 用户点击"立即支付"后跳转到PayPal
- 用户在PayPal登录并批准支付
- 系统通过Webhook事件
CHECKOUT.ORDER.APPROVED或查询订单详情获取
订单被捕获后(COMPLETED状态)
以下字段会被填充:
payment_status- 支付状态(如:COMPLETED)capture_id- 支付捕获ID
触发时机:
- 调用
/api/paypal/orders/{orderId}/capture接口捕获订单 - 系统通过Webhook事件
PAYMENT.CAPTURE.COMPLETED获取
与沙箱测试的关系
这些字段为null与沙箱测试环境无关,这是PayPal订单的正常生命周期:
- 在生产环境中,如果订单状态为CREATED,这些字段同样为null
- 只有在用户完成PayPal登录、批准支付、订单被捕获后,这些字段才会被填充
- 沙箱环境和生产环境的行为是一致的
如何查看完整信息
- 查看
order_data字段:该字段存储了PayPal返回的完整JSON响应,包含所有信息 - 查询订单详情:调用
/api/paypal/orders/{orderId}接口,系统会自动更新订单信息 - 等待Webhook事件:PayPal会发送Webhook事件,系统会自动更新订单信息
代码更新逻辑
系统会在以下时机自动更新订单信息:
- 创建订单时:调用
createPaymentOrder方法 - 查询订单时:调用
getOrder接口,自动调用updateOrderFromPayPal方法 - 捕获订单时:调用
captureOrder接口,自动调用updateOrderFromPayPal方法 - Webhook事件:处理Webhook事件时,自动调用
updateOrderFromPayPal方法
建议
如果需要在订单创建后立即获取payer信息,可以:
- 在用户从PayPal返回后,调用
getOrder接口查询订单详情 - 配置Webhook监听
CHECKOUT.ORDER.APPROVED事件 - 在订单确认页面加载时,主动查询一次PayPal订单详情