2016-11-07 47 views
0

我试图让PHP Hello World example工作。我从authorize.net网站下载了代码,并使用Composer和给定的composer.json文件。authorize.net PHP Hello World bug

当我运行命令作曲家更新,我得到一个警告消息:

Package goetas/xsd2php is abandoned, you should avoid using it. Use goetas-webservices/xsd2php instead.

Package goetas/xsd-reader is abandoned, you should avoid using it. Use goetas-webservices/xsd-reader instead.

我试图不顾警告的运行充电信贷card.php程序,但我得到这个错误:

Fatal error: Class 'Goetas\Xsd\XsdToPhp\Jms\Handler\BaseTypesHandler' not found in /var/www/public/newsite/vendor/authorizenet/authorizenet/lib/net/authorize/api/controller/base/ApiOperationBase.php on line 82

我想我的手在纠正composer.json文件,以摆脱错误的,但我只挖自己更深的一个洞。

这里是composer.json文件供参考。

{ 
"require": 
     { "php": ">=5.2.0", 
      "ext-curl": "*", 
      "authorizenet/authorizenet": "1.8.8", 
      "jms/serializer": "xsd2php-dev as 0.18.0"}, 
"require-dev": 
      { 
        "goetas/xsd2php": "2.*@dev", 
        "goetas/xsd-reader": "2.*@dev"}, 
"repositories": 
      [{  
        "type": "vcs",  
        "url": "https://github.com/goetas/serializer.git"  
}]} 

而这里的我运行PHP程序...

<?php 
require 'vendor/autoload.php'; 
use net\authorize\api\contract\v1 as AnetAPI; 
use net\authorize\api\controller as AnetController; 
define("AUTHORIZENET_LOG_FILE","phplog"); 

// Common setup for API credentials 
$merchantAuthentication = new AnetAPI\MerchantAuthenticationType(); 
$merchantAuthentication->setName("123456789"); 
$merchantAuthentication->setTransactionKey("abcdefghijklmnop"); 
$refId = 'ref' . time(); 

// Create the payment data for a credit card 
$creditCard = new AnetAPI\CreditCardType(); 
$creditCard->setCardNumber("4111111111111111"); 
$creditCard->setExpirationDate("2038-12"); 
$paymentOne = new AnetAPI\PaymentType(); 
$paymentOne->setCreditCard($creditCard); 

// Create a transaction 
$transactionRequestType = new AnetAPI\TransactionRequestType(); 
$transactionRequestType->setTransactionType("authCaptureTransaction"); 
$transactionRequestType->setAmount(151.51); 
$transactionRequestType->setPayment($paymentOne); 
$request = new AnetAPI\CreateTransactionRequest(); 
$request->setMerchantAuthentication($merchantAuthentication); 
$request->setRefId($refId); 
$request->setTransactionRequest($transactionRequestType); 
// if I comment out the line below, no error occurs 
$controller = new AnetController\CreateTransactionController($request); 
// $response = $controller->executeWithApiResponse(\net\authorize\api\constants\ANetEnvironment::SANDBOX); 

echo "<p>Hello there 10. The reference id is " . $refId . "</p>"; 
?> 

以下是运行作曲家输出控制台安装

Loading composer repositories with package information 
Reading composer.json of jms/serializer (0.16.0)  
Reading composer.json of jms/serializer (0.15.0) 
Reading composer.json of jms/serializer (0.14.0) 
Reading composer.json of jms/serializer (0.13.0) 
Reading composer.json of jms/serializer (0.12.0) 
Reading composer.json of jms/serializer (0.11.0) 
Reading composer.json of jms/serializer (event-sdispatcher) 
Reading composer.json of jms/serializer (graph-refactor) 
Reading composer.json of jms/serializer (master)   
Reading composer.json of jms/serializer (ok-for-lignano) 
Reading composer.json of jms/serializer (patch-1)  
Reading composer.json of jms/serializer (psr4) 
Reading composer.json of jms/serializer (remove-hndl) 
Reading composer.json of jms/serializer (serializer-master) 
Reading composer.json of jms/serializer (xsd2php) 

Updating dependencies (including require-dev) 

    - Installing doctrine/lexer (v1.0.1) 
    Loading from cache 

    - Installing doctrine/annotations (v1.3.0) 
    Loading from cache 

    - Installing phpoption/phpoption (1.5.0) 
    Loading from cache 

    - Installing phpcollection/phpcollection (0.5.0) 
    Loading from cache 

    - Installing jms/parser-lib (1.0.0) 
    Loading from cache 

    - Installing jms/metadata (1.5.1) 
    Loading from cache 

    - Installing jms/serializer (dev-xsd2php f339d96) 
    Cloning f339d96f7e359e2837ed8b752348cc84823a9966 

    - Installing goetas-webservices/xsd-reader (v0.1.2) 
    Loading from cache 

    - Installing zendframework/zend-eventmanager (3.0.1) 
    Loading from cache 

    - Installing zendframework/zend-code (2.6.3) 
    Loading from cache 

    - Installing doctrine/inflector (v1.1.0) 
    Loading from cache 

    - Installing symfony/yaml (v3.1.6) 
    Loading from cache 

    - Installing psr/log (1.0.2) 
    Loading from cache 

    - Installing symfony/debug (v3.1.6) 
    Loading from cache 

    - Installing symfony/polyfill-mbstring (v1.2.0) 
    Loading from cache 

    - Installing symfony/console (v3.1.6) 
    Loading from cache 

    - Installing goetas/xsd2php (dev-master 7e1ab0a) 
    Cloning 7e1ab0a2d007991b0c6d326e9f67ec90c020b5e5 

    - Installing goetas/xsd-reader (dev-master c5bcc02) 
    Cloning c5bcc02d1a07f26533991e7b0d6c51a98d78c02c 

    - Installing authorizenet/authorizenet (1.8.8) 
    Loading from cache 

    zendframework/zend-eventmanager suggests installing container-interop/container-interop (^1.1.0, to use the lazy listeners feature) 

    zendframework/zend-eventmanager suggests installing zendframework/zend-stdlib (^2.7.3 || ^3.0, to use the FilterChain feature) 

    zendframework/zend-code suggests installing zendframework/zend-stdlib (Zend\Stdlib component) 

    symfony/console suggests installing symfony/event-dispatcher() 

    symfony/console suggests installing symfony/process() 

    authorizenet/authorizenet suggests installing phpdocumentor/phpdocumentor (For generating API documentation) 

    Package goetas/xsd2php is abandoned, you should avoid using it. Use goetas-webservices/xsd2php instead. 

    Package goetas/xsd-reader is abandoned, you should avoid using it. Use goetas-webservices/xsd-reader instead. 

    Writing lock file 

    Generating autoload files 
+0

的'..'是,一般来说,这是一个有效的构造 - 它在目录树的一个层次上。在你的情况下,解析为'/ var/www/public/newsite/vendor/authorizenet/authorizenet/lib/net/authorize/api/contract/v1/MerchantAuthenticationType.php。你会在服务器上检查你的项目,看看那个路径不存在的地方,让我们知道吗? – halfer

+1

这可能是你的'composer update'没有正确运行。在项目文件夹中,使用'rm -rf vendor'销毁供应商文件夹并再次运行Composer命令,并将整个输出粘贴到问题中。 – halfer

+0

@halfer谢谢你,你在这里正确的轨道上。我没有注意到,这个路径在授权网络中崩溃,这个授权网络不在供应商之下,无处可寻。正如你所说,这可能是一个作曲家的问题。我实际上尝试了两个不同的composer.json文件,今天我看到了第三个看起来更简单的文件。我会尝试一个,让你知道它是如何工作的。 – Chuck

回答

0

您正在安装的Authorize.Net PHP SDK的版本对过期的组件有一些依赖关系,以及一旦您运行“charge-credit- card.php“脚本。最新版本的Authorize.Net PHP SDK(1.9.0)修复了这些问题。

所以,最大的问题就是“Hello World”页面上的示例composer.json没有安装新版本,而是安装了旧版本的SDK,该版本不再适用。

用的“Hello World”页上的更换composer.json样品下面应该使一切工作只是罚款:

{ 
    "require": { 
      "authorizenet/authorizenet": "1.9.0", 
      "jms/serializer": "dev-serializer-master as 1.0" 
    }, 
     "repositories": [ 
     { 
      "type": "vcs", 
      "url": "https://github.com/goetas/serializer.git" 
     } 
    ] 
} 

只需更换composer.json,做composer update或删除“供应商”目录,然后重做composer install

我们希望很快能够在“Hello World”页面中对此进行更改。

1

为了解决这个问题,我认为我会d看看是否有其他人报告过它,so I had a search about in GitHub。这表明this bug report这听起来完全正确:

GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\BaseTypesHandler does not exist any more?

针对此,笔者点to this documentation使用作曲解决不满意的依赖。所以我修改了composer.json添加缺少的行(并运行它通过a formatter):

{ 
    "require": { 
    "php": ">=5.2.0", 
    "ext-curl": "*", 
    "authorizenet/authorizenet": "1.8.8", 
    "jms/serializer": "xsd2php-dev as 0.18.0", 
    "goetas-webservices/xsd2php-runtime":"^0.2.2" 
    }, 
    "require-dev": { 
    "goetas/xsd2php": "2.*@dev", 
    "goetas/xsd-reader": "2.*@dev" 
    }, 
    "repositories": [ 
    { 
     "type": "vcs", 
     "url": "https://github.com/goetas/serializer.git" 
    } 
    ] 
} 

不幸的是运行composer install导致依赖冲突:

Updating dependencies (including require-dev)    
Your requirements could not be resolved to an installable set of packages. 

    Problem 1 
    - Installation request for jms/serializer xsd2php-dev as 0.18.0 -> satisfiable by jms/serializer[dev-xsd2php]. 
    - goetas-webservices/xsd2php-runtime v0.2.2 requires jms/serializer ^1.2 -> satisfiable by jms/serializer[1.4.x-dev]. 
    - Can only install one of: jms/serializer[1.4.x-dev, dev-xsd2php]. 
    - Installation request for goetas-webservices/xsd2php-runtime ^0.2.2 -> satisfiable by goetas-webservices/xsd2php-runtime[v0.2.2]. 

用简单的英语,这意味着:

  • xsd2php-runtime希望序列化器位于1.2
  • We ha VE要求串行在0.18.0

因为我们只有真正掌握自己的要求,我想知道,如果我们能碰到了自己的请求serializer至1.2,即:

{ 
    "require": { 
    "php": ">=5.2.0", 
    "ext-curl": "*", 
    "authorizenet/authorizenet": "1.8.8", 
    "jms/serializer": "xsd2php-dev as 1.2", 
    "goetas-webservices/xsd2php-runtime":"^0.2.2" 
    }, 
    "require-dev": { 
    "goetas/xsd2php": "2.*@dev", 
    "goetas/xsd-reader": "2.*@dev" 
    }, 
    "repositories": [ 
    { 
     "type": "vcs", 
     "url": "https://github.com/goetas/serializer.git" 
    } 
    ] 
} 

这是一个有点因为我们不知道这是否会在Authorize.net演示脚本中导致运行时失败,但至少现在可以运行安装。然而不幸的是在显示出相同的运行时错误:

PHP Fatal error: Class 'Goetas\Xsd\XsdToPhp\Jms\Handler\BaseTypesHandler' not found in /home/jon/Development/Personal/authorize.net/vendor/authorizenet/authorizenet/lib/net/authorize/api/controller/base/ApiOperationBase.php on line 82

我想知道,如果这是一个自动加载失败,所以让我们看看。我们想要Goetas\Xsd\XsdToPhp\Jms\Handler\BaseTypesHandler,但是如果我们看看我们的新的依赖类,事实证明名称空间已更改为GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\BaseTypesHandler。通常我们只会改变版本0.2。2升级到早期版本,但如果你看at the release history,最早的版本是0.1.0,它是在命名空间更改之后推送的。

因此,我们必须在这一点上两个选项:

  • 添加goetas-webservices/xsd2php-runtime为VCS的依赖,并指定一个Git提交哈希在退房(这将导致在一个过时的和不支持的大概库);
  • 修改authorizenet依赖关系中所需的库,然后让Authorise.net人员对其进行上游修改(更好,但需要他们的合作,这可能会阻碍您的进展)。

我的意见是,这本应该是“快速入门”的指南,已经被Authorize.net放弃了,我不会感到惊讶,如果一个小搜索引擎侦探工作揭示了其他人同样的困境。我个人很喜欢第二种选择,因为ApiOperationBase中的修复是微不足道的。

更改这些行:

use Goetas\Xsd\XsdToPhp\Jms\Handler\BaseTypesHandler; 
use Goetas\Xsd\XsdToPhp\Jms\Handler\XmlSchemaDateHandler; 

这些:

use GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\BaseTypesHandler; 
use GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\XmlSchemaDateHandler; 

现在,程序会运行:

$ php pay.php 
<p>Hello there 10. The reference id is ref1478722350</p> 

我会建议您联系Authorize.net和日志的bug;如果他们使用GitHub问题,请在那里创建一个问题并将其指向此答案。希望他们能够将两个被遗弃的软件包交换出来,如果他们真的很好,他们将建立一个持续的集成系统,如果将来再次出现这种依赖性问题,它将会中断。

0

我最近开始在PHP thie authorize.net API,与作曲家安装工作,这是我composer.json,它运行Hello World示例细

{ 
"require": { 
    "symfony/console": "^3.3", 
    "authorizenet/authorizenet": ">=1.9.3"  
} 
}