首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP PayPal SDK V2 GetExpressCheckoutDetails等效物

PHP PayPal SDK V2 GetExpressCheckoutDetails等效物
EN

Stack Overflow用户
提问于 2019-06-27 18:59:35
回答 1查看 165关注 0票数 1

我正在尝试将我们的Paypal PHP集成到使用最新的SDK v2。

我们目前的NVP设置只需要2个paypal方法

  • SetExpressCheckOut
    • 退货交易令牌(EC-825147XXXXXXXXXXXXX

  • GetExpressCheckoutDetails )

  • return token & PayerID ( PayerID: MYT3NHXXXXXX令牌

我已经设法更新了第一个方法"SetExpressCheckout“方法,它现在看起来像这样。

代码语言:javascript
复制
$token = $paypal->SetExpressCheckOut($products, $charges);
echo json_encode( array('token'=>$token ) );

只有两行代码接受了我们的产品数组&任何其他运费/手续费,并返回了交易令牌,但新方法非常疯狂,它只返回相同的交易ID。

代码语言:javascript
复制
$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方法看起来是这样的。

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

两行代码&完成了!..

但我尝试了各种组合,试图获得相同的返回值,但都没有成功&我到处寻找这个旧方法的合适替代品。

paypal-rest-api-still-lacking-an-equivalent-of-getexpresscheckoutdetails

paypal-rest-api-sdk-v2

如果有人能阐明如何在付款被捕获后返回payerID将是很好的!

非常感谢

马蒂

EN

回答 1

Stack Overflow用户

发布于 2019-08-08 03:22:11

让我试着让它变得简单,下面的方法将在付款后作为返回url调用

代码语言:javascript
复制
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. Payment Object
  2. Payment Execution

它最终会给出关于payer的所有细节。$this->_api_context的定义是:

代码语言:javascript
复制
$this->_api_context = new \PayPal\Rest\ApiContext(
        new \PayPal\Auth\OAuthTokenCredential("CLIENT_ID", "SECRET")
    );

如果您需要进一步的解释,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56789542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档