【问题标题】:PHP - PayPal RESTful API SDKPHP - 贝宝 RESTful API SDK
【发布时间】:2017-03-09 04:39:20
【问题描述】:

我正在努力在我的网站上允许使用 PayPal 直接信用卡付款。我已经从这里https://github.com/paypal/PayPal-PHP-SDK/releases 下载了 PayPal PHP RESTful SDK,我正在按照说明从这里设置直接信用卡支付...https://devtools-paypal.com/guide/pay_creditcard/php?interactive=ON&env=sandbox

我被难住了。 SDK 的文件夹结构如下:

composer->subfolders...
paypal->subfolders...
psr->subfolders...
autoload.php

所以我在我的 PHP 脚本中包含 autoload.php 文件,当我尝试执行教程中的第一步时,它是以下代码

$paypal = new OAuthTokenCredential($clientId, $clientSecret, $sdkConfig);

我收到Fatal error: Class 'OAuthTokenCredential' not found

但是,如果我改为使用以下代码...

$paypal = new \PayPal\Auth\OAuthTokenCredential($clientId, $clientSecret, $sdkConfig);

我得到一个如下所示的对象:

PayPal\Auth\OAuthTokenCredential Object
(
    [clientId:PayPal\Auth\OAuthTokenCredential:private] => CLIENT_ID
    [clientSecret:PayPal\Auth\OAuthTokenCredential:private] => CLIENT_SECRET
    [accessToken:PayPal\Auth\OAuthTokenCredential:private] => 
    [tokenExpiresIn:PayPal\Auth\OAuthTokenCredential:private] => 
    [tokenCreateTime:PayPal\Auth\OAuthTokenCredential:private] => 
    [cipher:PayPal\Auth\OAuthTokenCredential:private] => PayPal\Security\Cipher Object
        (
            [secretKey:PayPal\Security\Cipher:private] => CLIENT_SECRET
        )

    [_propMap:PayPal\Common\PayPalModel:private] => Array
        (
        )

)

但是我在教程中的第 2 步需要的 accessToken 是空的。 我到底做错了什么?任何人都可以为此提供直接的分步指南吗?有没有我没找到的?

谢谢!

【问题讨论】:

    标签: php paypal-rest-sdk paypal


    【解决方案1】:

    您链接到的教程说它适用于 PHP,但实际上并非如此。 This one on PayPal's PHP SDK github is more directly for PHP. 以下是该页面的代码,以防它消失:

    <?php
    // 1. Autoload the SDK Package. This will include all the files
    // and classes to your autoloader
    // Used for composer based installation
    require __DIR__  . '/vendor/autoload.php';
    // Use below for direct download installation
    // require __DIR__  . '/PayPal-PHP-SDK/autoload.php';
    
    $apiContext = new \PayPal\Rest\ApiContext(
      new \PayPal\Auth\OAuthTokenCredential(
        'AYSq3RDGsmBLJE-otTkBtM-jBRd1TCQwFf9RGfwddNXWz0uFU9ztymylOhRS',     // ClientID
        'EGnHDxD_qRPdaLdZz8iCr8N7_MzF-YHPTkjs6NKYQvQSBngp4PTTVWkPZRbL'      // ClientSecret
      )
    );
    
    // Save Credit Card to vault and then read it back
    $creditCard = new \PayPal\Api\CreditCard();
    $creditCard->setType("visa")
      ->setNumber("4417119669820331")
      ->setExpireMonth("11")
      ->setExpireYear("2019")
      ->setCvv2("012")
      ->setFirstName("Joe")
      ->setLastName("Shopper");
    
    try {
      $creditCard->create($apiContext);
      echo $creditCard;
    }
    catch (\PayPal\Exception\PayPalConnectionException $ex) {
      // This will print the detailed information on the exception. 
      //REALLY HELPFUL FOR DEBUGGING
      echo $ex->getData();
    }
    

    【讨论】:

    • 感谢您提供此代码。我已经更新以使用它,但是我仍然没有在 $apiContext 对象中为 accessToken、tokenExpiresIn 和 tokenCreateTime 取回任何值。此外,$creditCard->create($apiContext) 调用失败并显示错误说明 error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
    • 看起来我得到的错误是由于 TLS 1.2 要求造成的。我在 PHP 5.4.7 - 升级到 5.6 看看是否能解决问题。谢谢!
    • 啊,是的,这听起来像个问题。很高兴为您提供帮助。
    猜你喜欢
    • 2019-08-08
    • 2018-06-12
    • 2019-08-08
    • 1970-01-01
    • 2013-10-04
    • 2013-10-24
    • 2011-10-08
    • 2014-09-06
    • 2015-04-29
    相关资源
    最近更新 更多