Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Paypal API待付款_Php_Mysql_Api_Paypal_Express Checkout - Fatal编程技术网

Php Paypal API待付款

Php Paypal API待付款,php,mysql,api,paypal,express-checkout,Php,Mysql,Api,Paypal,Express Checkout,我已经在我的网站上设置了一个支付系统,其工作原理如下 买家购买商品时,我会打一个SetExpressCheckout电话,返回成功或失败。成功后,我使用返回的令牌进行提交。在提交成功后,我将该商品标记为已售出或扣除数量 我遇到的问题是,如果事务在没有挂起状态的情况下完成,则我的当前过程可以工作,但为了处理挂起的项目,我执行以下操作 检查用户是否有任何挂起的项 $sql = "SELECT * FROM basket_items WHERE status = 'pending' AND userI

我已经在我的网站上设置了一个支付系统,其工作原理如下

买家购买商品时,我会打一个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小时,则令牌无效。这就给我留下了两个问题

  • 如何在令牌过期后处理已完成的交易,而不尝试再次购买该商品

  • 我可以从getTransactionDetails获得买家的邮政地址吗


  • 谢谢

    请改用GetTransactionDetails API调用。如果您提交了DoExpressCheckoutPayment呼叫,您将获得一个交易ID,您可以使用该ID查找付款。响应将告诉您PayPal内交易的状态,并提供您的发货地址(如果在原始交易期间提供或请求)

    事务ID未过期


    我不确定我是否100%清楚你的流程。您是否将交易作为授权进行处理?

    将交易作为直接购买进行处理,但根据卖家的paypal设置,可能需要授权,因此Pending我阅读了一些其他问题,即transactionID在3小时后过期。我是否需要IPN侦听器?paypal交易ID不会过期。如果您打算使用IPN功能,则需要有一个脚本,该脚本可以处理返回PayPal的响应过程—IPN侦听器。我发现IPN非常方便。每次交易完成后,您都会收到一封发送给您的邮件,您可以使用它来更新您的终端,而不是进行手动检查。