当前位置: 首页 > 知识库问答 >
问题:

PHP PayPal SDK V2 GetExpressCheckoutDetails等效版

史朗
2023-03-14
    null
    null
$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();
}

但是试图复制旧的getExpressicheckoutDetails以返回payerID是有问题的。

我的旧GetExpressCheckoutDetails方法如下所示。

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

如果有人能提供一些关于如何返回付款后的付款ID捕获将是伟大的…

多谢

马蒂

共有1个答案

胡飞舟
2023-03-14

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

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 = new \PayPal\Rest\ApiContext(
        new \PayPal\Auth\OAuthTokenCredential("CLIENT_ID", "SECRET")
    );
 类似资料:
  • 问题内容: 我正在从xml配置转移到注释。我想转换一个会话范围的bean是 可以通过注释完成此操作吗?如果没有,我该怎么做才能使该声明继续工作? 问题答案: 在spring上下文xml中,执行以下操作: 请注意,尽管如此,你将需要为该包中的所有类编写接口。

  • 我目前使用PostGIS作为我在python脚本中执行的许多空间功能的主干。特别是取几个shapefile几何图形,看看它们是否相交,然后将它们分类到不同的目录中。我使用shp2pgsql上传shapefiles,然后使用ST_Intersects关联它们,然后使用脚本中的os/shutil函数对它们进行排序。 我的问题是,我们的一个团队只在政府网络上工作,无法获得系统管理员的postgres/p

  • 问题内容: 我正在尝试做这样的事情: 但是,Python不允许这样做,这显然是有充分理由的。 有没有人有一个简单的解决方法? 问题答案: 该解决方案位于您在问题中提供的链接: 完整示例: 输出:

  • 问题内容: 该表示法是: 实际上不哈希对象;它实际上只是转换为字符串(通过它是一个对象,还是其他各种原始类型的内置转换),然后在“ ”中查找该字符串,而不对其进行哈希处理。也不会检查对象是否相等-如果两个不同的对象具有相同的字符串转换,则它们将彼此覆盖。 鉴于此-在JavaScript中是否有任何有效的hashmap实现?(例如,第二个Google结果产生的实现对任何操作都是O(n)。其他各种结果

  • 问题内容: 我正在尝试从Swift的iTu​​nesU中的“开发适用于iPhone和iPad的ios7应用程序”中复制斯坦福Matchismo游戏。 在第3讲幻灯片的第77页上,它显示了使用,这不是Swift上的选项。Swift文档示例显示了一个具有数组的示例,但是我不知道如何使Interface Builder将多个插座连接到同一个/ Array。 有人知道如何做到这一点吗? 我知道我可以创建1

  • 我正在尝试编写一个以便比较一些RDBMS、NewSQL和NoSQL。这个脚本只是执行查询并测量执行时间。 但是在mongodb-php中,函数返回一个 和是否等价(时间/数据成本)?游标不加载数据,我必须迭代游标才能加载数据…为什么在MySQL和mongoDB之间执行查询的时间如此不同或者仅仅是mongoDB的岩石... 我想知道将我的代码更改为:

  • 问题内容: 我是一名普通的C#开发人员,但有时我会使用Java开发应用程序。我想知道是否有Java等效于C#async / await?简单来说,java相当于什么: 问题答案: 不,在Java中-甚至在v5之前的C#中,都没有等效的异步/等待方式。 在后台构建状态机是一项相当复杂的语言功能。 Java中对异步/并发的 语言 支持相对较少,但是该软件包包含许多与此相关的有用 类 。(不完全等同于任

  • 问题内容: 我正在开发Java程序,我确实需要能够以一定的频率和持续时间播放声音,类似于c#方法System.Beep,我知道如何在C#中使用它,但是我找不到用Java做到这一点的一种方法。是否有等效的方法或另一种方法? 问题答案: 我认为没有办法在便携式2 Java 中用“哔”声播放音乐1。您将需要使用我认为的API …除非找到可以为您简化事情的第三方库。 如果您想走这条路,那么此页面可能会给您