我在我的网站上设置了一个支付系统,其工作方式如下。
买家购买商品 我调用 SetExpressCheckout 返回成功或失败。成功后,我使用返回的 token 进行提交。提交成功后,我会将商品标记为已售出或扣除数量。
我遇到的问题是,如果交易完成且没有待定状态,我当前的程序会起作用,但为了处理待定项目,我执行以下操作
检查用户是否有任何待处理的项目
$sql = "SELECT * FROM basket_items WHERE status = 'pending' AND userID = '$user_id'";
$pending_items = queryArray($sql);
foreach($pending_items as $item){
$token = $item['token'];
//get status of the pending transaction
$transaction_details = GetExpressCheckoutDetails($token);
$trans_status = $EXP_CHECK_DETAILS['CHECKOUTSTATUS'];
if($trans_status == 'completed'){
MarkItemSold($item['id']);
}
}
此过程的问题是,如果具有待定授权操作的买家/卖家花费超过 3 小时,则 token 无效。所以这给我留下了 2 个查询
如何在 token 过期后处理完成的交易而不尝试再次购买该商品?
我可以从 getTransactionDetails 获取买家的邮政地址吗?
谢谢
最佳答案
改为尝试调用 GetTransactionDetails API。如果您提交了 DoExpressCheckoutPayment 调用,您将获得一个交易 ID,您可以使用它来查找付款。响应将告诉您 PayPal 中的交易状态并为您提供送货地址(如果在原始交易期间提供或请求)。
交易 ID 不会过期。
不过,我不确定我是否 100% 了解您的流程。您是否作为授权处理交易?
关于php - Paypal API 待处理付款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16835993/