簡體   English   中英

PHP PayPal SDK V2 GetExpressCheckoutDetails等效項

[英]PHP PayPal SDK V2 GetExpressCheckoutDetails Equivalent

我正在嘗試將我們的Paypal PHP集成轉移到利用最新的SDK v2。

我們當前的NVP設置僅需要2個貝寶方法

  • SetExpressCheckOut
    • 返回交易令牌(EC-825147XXXXXXXXXXX)
  • GetExpressCheckoutDetails
    • 返回令牌和PayerID(付款人ID:MYT3NHXXXXXX)

我設法更新了第一個方法“ SetExpressCheckout”方法,現在看起來像這樣。

$token = $paypal->SetExpressCheckOut($products, $charges);
echo json_encode( array('token'=>$token ) );

只有2行,這花了我們一系列的產品以及任何其他運輸/手續費並返回了交易令牌,但是新方法很瘋狂,它只返回相同的交易ID。

$payer = new \PayPal\Api\Payer();
$payer->setPaymentMethod('paypal');

$amount = new \PayPal\Api\Amount();
$amount->setTotal($cartTotal);
$amount->setCurrency('GBP');

$transaction = new \PayPal\Api\Transaction();
$transaction->setAmount($amount);

$redirectUrls = new \PayPal\Api\RedirectUrls();
$redirectUrls->setReturnUrl("https://www.paypal.com/checkoutnow/error")
                     ->setCancelUrl("https://www.paypal.com/checkoutnow/error");

$payment = new \PayPal\Api\Payment();
$payment->setIntent('authorize')
            ->setPayer($payer)
            ->setTransactions(array($transaction))
            ->setRedirectUrls($redirectUrls);

try {
        // $apiContext, set within our bootstrap file
        $payment->create($apiContext); 

        // need to dig through the response 'approval_url'
        // Locate token in links array, 
        // object "rel" == "approval_url":
        /*
        {
              "href": "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXXXXXXXXXXXX",
              "rel": "approval_url",
              "method": "REDIRECT"
        }
        */
        // looking for token: EC-XXXXXXXXXXXXXXXXX
        $res_data = json_decode($payment, true);
        $urlInfo  = parse_url($res_data['links'][1]['href']);
        parse_str($urlInfo['query'], $queryParams);

        // PASS THE TOKEN BACK TO JS FILE
        echo json_encode( 
                array(
                    'token'=>$queryParams['token'], 
                    'id' => $res_data['id'] 
                ) 
            );              
}
catch (\PayPal\Exception\PayPalConnectionException $ex) {
    // Print detailed information on the exception.
    // HELPFUL FOR DEBUGGING
    echo $ex->getData();
}

但是嘗試復制舊的GetExpressCheckoutDetails以返回payerID確實有問題。

我以前的GetExpressCheckoutDetails方法看起來像這樣。

$cartTotal = Context::getContext()->cart->getOrderTotal(true);              
echo json_encode($paypal->GetExpressCheckoutDetails($cartTotal));
/*
return(
   'res'     => 'Success'
   'token'   => 'EC-XXXXXXXXXXXX',
   'payerID' => 'MYT3NHXXXXXX'
)
*/

2行代碼並完成!..

但是我嘗試了各種組合,試圖獲得相同的返回值,但均未成功,並四處尋找這種舊方法的合適替代方法。

貝寶其余API仍然缺少等效的getexpresscheckout詳細信息

貝寶-REST-API-SDK-V2

如果有人能在獲得付款后就如何返回payerID有所了解,那就太好了!

非常感謝

馬蒂

讓我嘗試簡化一下,付款后,以下方法將稱為返回網址

public function paypal_success(){

    $payment = Payment::get($_REQUEST['paymentId'], $this->_api_context);
    $paymentExecution = new \PayPal\Api\PaymentExecution();

    $paymentExecution->setPayerId($_REQUEST['PayerID']);
    $payment->execute($paymentExecution, $this->_api_context);

    //var_dump($_REQUEST);
    echo '<pre>';
    var_dump($payment);
    exit;
}

它將使用兩類PayPal SDK:

  1. 付款對象
  2. 付款執行

最終它將提供有關付款人的所有詳細信息。 $this->_api_context的定義是:

$this->_api_context = new \PayPal\Rest\ApiContext(
        new \PayPal\Auth\OAuthTokenCredential("CLIENT_ID", "SECRET")
    );

如果您需要任何進一步的說明,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM