首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >authorize.net

authorize.net
EN

Stack Overflow用户
提问于 2016-11-07 02:39:34
回答 3查看 851关注 0票数 0

我在试着让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文件。

代码语言:javascript
复制
{  
"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程序。

代码语言:javascript
复制
<?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安装的控制台输出

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-11 00:16:26

您正在安装的Authorize.Net PHP版本对过时组件有几个依赖项,以及在运行“收费-信用卡”脚本时所看到的一些与命名空间相关的问题。Authorize.Net PHP的最新版本(1.9.0)解决了这些问题。

因此,最大的问题是"Hello“页面上的示例composer.json没有安装更新的版本,而是安装了一个不再工作的旧版本的SDK。

将"Hello“页面上的composer.json示例替换为以下内容可以使一切正常工作:

代码语言:javascript
复制
{
    "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“页面上改变这一点。

票数 0
EN

Stack Overflow用户

发布于 2016-11-09 19:58:16

为了解决这个问题,我想我应该看看有没有人报告过,所以我在GitHub里搜索了一下。这揭示了这个错误报告,这听起来完全正确:

GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\BaseTypesHandler不再存在了吗?

对此,作者指出到本文档使用Composer解决了不满意的依赖关系。因此,我修改了composer.json以添加缺少的行(并通过格式化者运行它):

代码语言:javascript
复制
{
  "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会导致依赖关系冲突:

代码语言:javascript
复制
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-运行时希望序列化程序位于1.2
  • 我们要求串行化程序为0.18.0

由于我们只真正控制自己的需求,所以我想知道我们是否可以将自己对serializer的请求提高到1.2,因此:

代码语言:javascript
复制
{
  "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中的修复是微不足道的。

更改这些行:

代码语言:javascript
复制
use Goetas\Xsd\XsdToPhp\Jms\Handler\BaseTypesHandler;
use Goetas\Xsd\XsdToPhp\Jms\Handler\XmlSchemaDateHandler;

对于这些人:

代码语言:javascript
复制
use GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\BaseTypesHandler;
use GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler\XmlSchemaDateHandler;

现在,该程序将运行:

代码语言:javascript
复制
$ php pay.php 
<p>Hello there 10. The reference id is ref1478722350</p>

我建议您联系Authorize.net并记录一个bug;如果他们使用GitHub问题,请在那里创建一个问题并指出这个答案。希望他们也能交换掉这两个被抛弃的包,如果他们真的很好的话,他们将建立一个持续的集成系统,如果这种依赖问题在将来再次出现的话,这个系统就会崩溃。

票数 1
EN

Stack Overflow用户

发布于 2017-07-25 19:16:48

我最近已经开始在php中使用thie,它安装在composer中,下面是我的authorize.net,它运行Hello示例

代码语言:javascript
复制
{
"require": {
    "symfony/console": "^3.3",
    "authorizenet/authorizenet": ">=1.9.3"    
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40457035

复制
相关文章

相似问题

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