【问题标题】:Authorize & process payment after 1 day when token expires within 3 hours令牌在 3 小时内到期后 1 天后授权和处理付款
【发布时间】:2015-03-15 07:17:56
【问题描述】:

我正在使用 paypal 经典 API 通过 Express Checkout (https://developer.paypal.com/docs/classic/express-checkout/ht_ec-singleAuthPayment-curl-etc/) 授权和处理付款。

虽然根据文档授权有效期为三天,但令牌在三个小时内到期。

那么,如何在令牌过期后捕获交易?

PS。 我知道这是 How am I supposed to capture a payment 1 day after its authorization if the PayPal token expires after 3 hours? 的副本,但就像提问的用户一样,“DoExpressCheckoutPayment”可以在三个小时后完成。

【问题讨论】:

    标签: php curl paypal express-checkout


    【解决方案1】:

    解决者:

    1) SetExpressCheckout 到自己的帐户(付款操作 == 订单)

    $request_params = array(
    
        'RETURNURL' => $obj['SUCCESSURL'],
        'CANCELURL' => $obj['CANCELURL'],
        'NOSHIPPING' => '1',
        'BRANDNAME' => $obj['BRANDNAME'],
    
        'PAYMENTREQUEST_0_CURRENCYCODE' => $obj['CURRENCY'],
        'PAYMENTREQUEST_0_DESC' => $obj['ITEMDESCRIPTION'],
        'PAYMENTREQUEST_0_PAYMENTACTION' => 'Order',
        'PAYMENTREQUEST_0_AMT' => $obj['AMOUNTTOTAL'],
        'PAYMENTREQUEST_0_SELLERPAYPALACCOUNTID' => $obj['RECEIVER1'],
        'PAYMENTREQUEST_0_PAYMENTREQUESTID' => $obj['REQUESTID1']
    
    );
    
    $response = $obj['PAYPAL']->request('SetExpressCheckout', $request_params);
    

    2) DoExpressCheckout

    $request_params = array(
        'TOKEN' => $obj['TOKEN'],
    //  'PAYMENTACTION' => 'Authorization',
        'PAYERID' => $obj['PAYERID'],
    
        'PAYMENTREQUEST_0_PAYMENTACTION' => 'Order',
        'PAYMENTREQUEST_0_AMT' => $obj['AMOUNTTOTAL'],
        'PAYMENTREQUEST_0_SELLERPAYPALACCOUNTID' => $obj['RECEIVER1'],
        'PAYMENTREQUEST_0_PAYMENTREQUESTID' => $obj['REQUESTID1'],
        'PAYMENTREQUEST_0_CURRENCYCODE' => $obj['CURRENCY']
    );
    
    $response = $obj['PAYPAL']->request('DoExpressCheckoutPayment', $request_params);
    echo '<b>02. DO TRANSACTION</b><br />';
    echo '<pre>';
    print_r($response);
    echo '</pre>';
    

    3) DoCapture 在 24 小时内拥有帐户

    echo '<a href="pay_app.php?tid=' . $response['PAYMENTINFO_0_TRANSACTIONID'] . '&amt='. $response['PAYMENTINFO_0_AMT'] . '">CAPTURE AS APP</a><br/>';
    

    4) DoCapture 成功进行 MassPayment 到第二个帐户

    $request_params = array(
    
        'L_EMAIL0' => $obj['RECEIVERHOST'],
        'L_AMT0' => $obj['AMT'],
        'L_NOTE0' => "transaction complete",
        'CURRENCYCODE' => $obj['CURRENCY']
    );
    
    $response = $obj['PAYPAL']->request('MassPay', $request_params);
    
    echo '<b> MASSPAY</b><br />';
    echo '<pre>';
    print_r($response);
    echo '<br/>';
    print_r($obj);
    echo '</pre>';
    echo '<br/>';
    

    【讨论】:

    • 是的,这是一种可行且合理的模式,也是进行“衍生”或“链式”支付的好方法,例如给网络中参与的卖家或内容提供商。
    【解决方案2】:

    感谢@geewiz 解决了这个问题。

    1) 我正在使用“paymentaction = order”向两家商店并行付款。

    2) 用户接受并行付款后,我得到一个令牌,我用它向两个 paypal 商店执行 DoExpressCheckoutPayment。 paymentaction 保持正常。

    3) 然后我得到一个链接,我用它来执行 DoCapture,它会释放资金并将其转移到我的帐户。

    次要问题 -

    第二个店主(因为我有并行付款)如何获得他的付款份额?

    使用他的事务 ID 调用相同的函数会引发“您无权进行此 API 调用”错误,因为 php 脚本的签名是我的商店的。

    【讨论】:

    • 您的后续问题令人困惑。 Express Checkout 不支持并行或连锁付款。您是否尝试使用自适应支付功能?如果您创建一个新问题并提供更多背景信息,您可能会得到更好的帮助。
    • 我基本上是在尝试授权对两个帐户进行并行(或链式)付款,这可以在以后(24 小时内)捕获。我将看看自适应支付。我有和这里完全相同的问题:stackoverflow.com/questions/17112570/…(也没有解决)
    • 其他作者有两个问题;第一个被诊断并修复,即他传递了一个order_id并将其称为authorization_id。第二个从未被诊断出来,但“您无权进行此调用”错误几乎总是意味着通过了无效或不适当的身份验证(帐户/密码/密钥);例如他们试图实时使用沙盒凭据,或者传递的帐户凭据不是交易的适当方(例如,发送帐户不能调用捕获 API,只能调用接收帐户)。
    【解决方案3】:

    引用问题的发帖人和您在理解 PayPal 概念时都犯了同样的错误。

    令牌和授权根本不是一回事。代币是一种将用户协议与即将进行的金融交易联系起来的机制;将其视为 Web 会话的扩展或一部分。令牌描述了一个正在进行的操作,可用于生成金融交易,但它本身不是金融交易。

    授权是可以从该令牌/会话生成的一种金融交易。授权从买方保留资金,从而向卖方/收款人保证在一定时期内可以从买方获得资金。它实际上并没有转移资金;仅当(如果)参考授权执行第二次金融交易时才会发生这种情况:“捕获”。简而言之,授权和捕获将“销售”分为两部分:一个确保交易可以发生,第二个实际使其发生。

    您应该在用户返回后立即使用“授权”的付款操作执行 DoExpressCheckout(嗯,可能在您网站上的另一页或两页之后......但不是几天后)。然后你扔掉EC令牌,只保留授权#。您应该在几天后执行的唯一操作应该是捕获,它只需要授权 #。

    我猜想以某种方式(无论是数字方式还是物理方式)履行客户的订单是导致捕获前延迟的原因。

    如果您想避免在客户账户中持有资金,并愿意承担一些风险,即当您去捕获资金将因此不存在时,您还可以使用“订单”的支付操作来执行相当于买方互动时的非约束性授权。

    如果您有更复杂的情况,例如金额在用户交互会话时是未知的,那么您需要使用不同的 PayPal 产品而不是使用授权,例如参考交易/计费协议/未来付款,这些产品允许用户授予您一个更开放的允许在未来向他们收费。

    【讨论】:

    • 谢谢!我正在做一个DoExpressCheckoutpayment,将payerID、令牌和授权作为paymentAction。但随后交易正在完成(即资金正在转移,如我的沙箱中所见)。我可以保存 TransactionID 并稍后进行 CAPTURE,但是任何线索如何不进行交易?
    • 如果您有paymentaction=authorization,则不会转账。买方账户将显示“授权”类型的交易,该交易要求资金(尽管如果授权被取消或过期,资金将被释放),但收款账户将没有资金进入其余额,直到有一个捕获。如果您看到资金流动,那么您不仅做了授权。
    猜你喜欢
    • 2013-06-18
    • 2020-07-06
    • 2018-01-17
    • 2017-11-15
    • 2013-11-09
    • 2017-03-25
    • 2017-08-17
    • 2018-01-20
    • 1970-01-01
    相关资源
    最近更新 更多