2013-05-30 237 views
0

我在我的网站上设置了一个支付系统,其工作方式如下。Paypal API待付款

买方购买物品我做一个SetExpressCheckout调用,返回成功或失败。成功时,我会使用返回的令牌进行提交。在提交成功后,我会将该项目标记为已售出或扣除数量。

我遇到的问题是我现在的程序工作,如果该交易完成后没有挂起状态,但为了处理未决的项目怎么做,如果用户有任何未决项目的下列

检查

$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小时,令牌无效。因此,我留下2个查询

  1. 如何在令牌过期后处理完成的交易而不尝试再次购买物品?

  2. 我可以从getTransactionDetails获取买家邮寄地址吗?

感谢

回答

1

尝试GetTransactionDetails API调用来代替。如果您提交了DoExpressCheckoutPayment呼叫,您将获得一个可用于查找付款的交易ID。回复将告诉您PayPal内的交易状态,并为您提供送货地址(如果在原始交易中提供或请求)。

交易ID不会过期。

虽然我不确定自己的流程是否100%清晰。您是否将交易视为授权处理?

+0

作为直接购买处理交易,但取决于卖家贝宝设置,它可能需要授权,因此等待 –

+0

我读了一些其他问题,transactionID在3小时后过期 –

+0

我需要IPN监听器吗? –