我在试着让PHP Hello示例开始工作。我从authorize.net站点下载了代码,并使用Composer和给定的composer.json文件。
当我运行命令composer update时,会收到一条警告消息:
包goetas/xsd2php已经放弃,您应该避免使用它。改用goetas-webservices/xsd2php。 包goetas/xsd-reader被放弃了,您应该避免使用它。改用goetas-webservices/xsd-reader。
尽管发出了警告,我还是尝试运行charge-credit-card.php程序,但我得到了以下错误:
致命错误:第82行的'Goetas\Xsd\XsdToPhp\Jms\Handler\BaseTypesHandler‘类在/var/www/public/newsite/vendor/authorizenet/authorizenet/lib/net/authorize/api/controller/base/ApiOperationBase.php中找不到
我试着纠正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>";
?>以下是运行composer安装的控制台输出
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发布于 2016-11-11 00:16:26
您正在安装的Authorize.Net PHP版本对过时组件有几个依赖项,以及在运行“收费-信用卡”脚本时所看到的一些与命名空间相关的问题。Authorize.Net PHP的最新版本(1.9.0)解决了这些问题。
因此,最大的问题是"Hello“页面上的示例composer.json没有安装更新的版本,而是安装了一个不再工作的旧版本的SDK。
将"Hello“页面上的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“页面上改变这一点。
发布于 2016-11-09 19:58:16
为了解决这个问题,我想我应该看看有没有人报告过,所以我在GitHub里搜索了一下。这揭示了这个错误报告,这听起来完全正确:
GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\BaseTypesHandler不再存在了吗?
对此,作者指出到本文档使用Composer解决了不满意的依赖关系。因此,我修改了composer.json以添加缺少的行(并通过格式化者运行它):
{
"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].在通俗的英语中,这意味着:
由于我们只真正控制自己的需求,所以我想知道我们是否可以将自己对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演示脚本中的运行时失败,但至少安装现在将运行。然而,不幸的是,也显示了相同的运行时错误:
'Goetas\Xsd\XsdToPhp\Jms\Handler\BaseTypesHandler‘致命错误:在第82行的/home/jon/Development/Personal/authorize.net/vendor/authorizenet/authorizenet/lib/net/authorize/api/controller/base/ApiOperationBase.php中找不到类/home/jon/Development/Personal/authorize.net/vendor/authorizenet/authorizenet/lib/net/authorize/api/controller/base/ApiOperationBase.php
我想知道这是否是自毁,所以让我们来看看。我们需要Goetas\Xsd\XsdToPhp\Jms\Handler\BaseTypesHandler,但是如果我们查看新的依赖类,结果是名称空间被更改为GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\BaseTypesHandler。通常,我们只需将版本0.2.2更改为早期版本,但如果您查看在发行历史上,最早的版本是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问题,请在那里创建一个问题并指出这个答案。希望他们也能交换掉这两个被抛弃的包,如果他们真的很好的话,他们将建立一个持续的集成系统,如果这种依赖问题在将来再次出现的话,这个系统就会崩溃。
发布于 2017-07-25 19:16:48
我最近已经开始在php中使用thie,它安装在composer中,下面是我的authorize.net,它运行Hello示例
{
"require": {
"symfony/console": "^3.3",
"authorizenet/authorizenet": ">=1.9.3"
}
}https://stackoverflow.com/questions/40457035
复制相似问题