【问题标题】:paypal API doExpressCheckoutPayment status Pendingpaypal API doExpressCheckoutPayment 状态 待定
【发布时间】:2012-03-14 02:23:01
【问题描述】:

我正在测试定期付款。在 doExpressCheckoutPayment 操作之后,我在我的沙盒贝宝帐户中收到状态待定。为什么状态没有完成?设置状态完成需要多少时间?或者可能需要在沙箱中设置一些参数。我使用默认设置。付款审核 - 已禁用。 谢谢!)

UPD 1: 这是我的请求代码:

public function setPayment($plan){
        $params = array(
            'PAYMENTREQUEST_0_AMT' => '10.00',
            'RETURNURL' => $this->base_url.'/paypal/response',
            'CANCELURL' => $this->base_url.'/paypal/paypal',
            'PAYMENTREQUEST_0_PAYMENTACTION' => 'Authorization',
            'PAYMENTREQUEST_0_CURRENCYCODE' => 'GBP',
            'PAYMENTREQUEST_0_DESC' => 'Testing PayPal recurring',
            'PAYMENTREQUEST_0_NOTIFYURL' => 'http://barton.netai.net/ipn.php',
            'L_BILLINGTYPE0' => 'RecurringPayments',
            'L_BILLINGAGREEMENTDESCRIPTION0' => 'SamePayments'
        );
    $this->_paypal->addFields($params);
    $response = $this->_paypal->request('SetExpressCheckout');
    if (strtoupper($response['ACK'])=='SUCCESS'){
        $token=$response['TOKEN'];
        header('Location: '.$this->_paypal->getPaypalUrl().'?cmd=_express-checkout&token='.$token);
        return true;
    } else {
        return false;
    }
}

public function responseAction(){
    if (isset($_GET['token']) && isset($_GET['PayerID'])){
        $this->_paypal->addFields(array('TOKEN'=>$_GET['token']));
        $response=$this->_paypal->request('GetExpressCheckoutDetails');
        if ($response['ACK']=='Success'){
            $response=array();
            $this->_paypal->addFields(array(
                                          'TOKEN' => $_GET['token'],
                                          'PAYMENTREQUEST_0_PAYMENTACTION' => 'Authorization',
                                          'PAYERID' => $_GET['PayerID'],
                                          'L_BILLINGTYPE0' => 'RecurringPayments',
                                          'L_BILLINGAGREEMENTDESCRIPTION0' => 'SamePayments',
                                          'PAYMENTREQUEST_0_AMT' => '10.00',
                                          'PAYMENTREQUEST_0_CURRENCYCODE' => 'GBP'
                                      ));
            $response=$this->_paypal->request('DoExpressCheckoutPayment');
            show($response); exit;
        }
    }
}

SetExpressCheckout 响应:

    Array
(
    [TOKEN] => EC-01C99915Y11155245
    [TIMESTAMP] => 2012-02-24T10:23:32Z
    [CORRELATIONID] => 69e91a5abc347
    [ACK] => Success
    [VERSION] => 84
    [BUILD] => 2571254
)

doExpressCheckoutPayment 响应:

 Array
(
    [TOKEN] => EC-2FR88291S31672645
    [SUCCESSPAGEREDIRECTREQUESTED] => false
    [TIMESTAMP] => 2012-02-24T10:26:08Z
    [CORRELATIONID] => a95c7a9bb64b3
    [ACK] => Success
    [VERSION] => 84
    [BUILD] => 2571254
    [INSURANCEOPTIONSELECTED] => false
    [SHIPPINGOPTIONISDEFAULT] => false
    [PAYMENTINFO_0_TRANSACTIONID] => 2RN165632T770592L
    [PAYMENTINFO_0_TRANSACTIONTYPE] => expresscheckout
    [PAYMENTINFO_0_PAYMENTTYPE] => instant
    [PAYMENTINFO_0_ORDERTIME] => 2012-02-24T10:26:06Z
    [PAYMENTINFO_0_AMT] => 10.00
    [PAYMENTINFO_0_TAXAMT] => 0.00
    [PAYMENTINFO_0_CURRENCYCODE] => GBP
    [PAYMENTINFO_0_PAYMENTSTATUS] => Pending
    [PAYMENTINFO_0_PENDINGREASON] => authorization
    [PAYMENTINFO_0_REASONCODE] => None
    [PAYMENTINFO_0_PROTECTIONELIGIBILITY] => Eligible
    [PAYMENTINFO_0_PROTECTIONELIGIBILITYTYPE] => ItemNotReceivedEligible,UnauthorizedPaymentEligible
    [PAYMENTINFO_0_SECUREMERCHANTACCOUNTID] => WLC8CZSP2C5L8
    [PAYMENTINFO_0_ERRORCODE] => 0
    [PAYMENTINFO_0_ACK] => Success
)

在我之前的question 中,您建议我安装 PAYMENTREQUEST_0_PAYMENTACTION 以进行销售, 也许这有助于我决定这个问题?

【问题讨论】:

  • 请包含完整的 SetExpressCheckout 和 DoExpressCheckoutPayment API 请求和响应。另外,您在完成交易时选择了哪些资金来源?
  • 我添加了请求和响应,参见 UPD1
  • @YuriyNedostup 当您像这样提供 PAYMENTREQUEST_0_NOTIFYURL 时,您是否可以正常工作?我的意思是它应该只在 DoExpressCheckoutPayment 中提供并在 SetExpressCheckout 中被忽略时才有效(根据:developer.paypal.com/docs/classic/api/merchant/…)。

标签: php paypal paypal-sandbox


【解决方案1】:

在另一个问题中提到,替换;

'PAYMENTREQUEST_0_PAYMENTACTION' => 'Authorization',

'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',

【讨论】:

  • 似乎 PayPal api 带有错误的 ExpressCheckout 示例
  • 并非如此。如果您打算使用 Authorization & Capture,那么 Authorization 也是一个完全有效的值。
  • @PayPal_Robert 你能帮我解决这个问题吗stackoverflow.com/questions/16835944/…
【解决方案2】:

当您将 PAYMENTREQUEST_0_PAYMENTACTION 设置为“授权”时,意味着您要求 PayPal 检查资金是否可用,如果可用,则暂停在他们身上72小时。您最多有 29 天的时间来获得授权,而当您这样做时,资金只会被冻结三天。 29 天期限的前 72 小时称为“承兑期”,这意味着 PayPal 保证资金可用。

  • 在大多数情况下会发生三天的暂停,具体取决于 发卡银行,或 ACH 交易中的银行本身,例如 借记卡。在某些情况下,三天的持有被放弃,而在 在其他情况下,卡可能会被扣留长达 30 天或 直到下一个计费周期。
  • 如果您决定在最后三天内提取资金 29 天期限,这些资金将持有至第 29 天结束 而不是通常的三天。
  • 您可以捕获少于原始授权金额,完整 金额,或高达原始授权的 115% 或 75 美元, 以较少者为准。

当您将 PAYMENTREQUEST_0_PAYMENTACTION 设置为 'Sale' 时,将在不保留资金的情况下处理付款。资金会立即从买家的资金来源转入您的 PayPal 账户余额。

  • 您可以对已交付的商品使用“销售”选项 快速,例如数字商品或您一发货的产品 收到订单。
  • 资金立即从买方的资金来源中提取,并且 发送到您的 PayPal 帐户余额。

【讨论】:

    猜你喜欢
    • 2013-04-17
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 2013-08-04
    • 2016-04-29
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多