Php 在Laravel 5.3中导入Quickbook库时出错
我正在将quickbooks与我的laravel应用程序集成。集成后我得到了这个错误 PHP警告:require_once(../QuickBooks.PHP):无法打开流: 中没有这样的文件或目录 /第2行的home/vipin/projects/development/Quickbook/config/app.php PHP致命错误:require_once():无法打开所需的“../QuickBooks.PHP” (包括路径='。:/usr/share/php:/home/ubuntu/projects/development/Quickbook/vendor/consolibyte/quickbooks') 在/home/ubuntu/projects/development/Quickbook/config/app.php联机中 二, 这是我的控制器Quickbook.phpPhp 在Laravel 5.3中导入Quickbook库时出错,php,laravel,quickbooks,Php,Laravel,Quickbooks,我正在将quickbooks与我的laravel应用程序集成。集成后我得到了这个错误 PHP警告:require_once(../QuickBooks.PHP):无法打开流: 中没有这样的文件或目录 /第2行的home/vipin/projects/development/Quickbook/config/app.php PHP致命错误:require_once():无法打开所需的“../QuickBooks.PHP” (包括路径='。:/usr/share/php:/home/ubuntu/p
namespace App\Http\Controllers;
use Illuminate\Http\Request;
// require_once '../QuickBooks.php';
use App\Http\Requests;
class QuickBooksController extends Controller
{
private $IntuitAnywhere;
private $context;
private $realm;
public function __construct(){
if (!\QuickBooks_Utilities::initialized(env('QBO_DSN'))) {
// Initialize creates the neccessary database schema for queueing up requests and logging
\QuickBooks_Utilities::initialize(env('QBO_DSN'));
}
$this->IntuitAnywhere = new \QuickBooks_IPP_IntuitAnywhere(env('QBO_DSN'), env('QBO_ENCRYPTION_KEY'), env('QBO_OAUTH_CONSUMER_KEY'), env('QBO_CONSUMER_SECRET'), env('QBO_OAUTH_URL'), env('QBO_SUCCESS_URL'));
}
public function qboConnect(){
if ($this->IntuitAnywhere->check(env('QBO_USERNAME'), env('QBO_TENANT')) && $this->IntuitAnywhere->test(env('QBO_USERNAME'), env('QBO_TENANT'))) {
// Set up the IPP instance
$IPP = new \QuickBooks_IPP(env('QBO_DSN'));
// Get our OAuth credentials from the database
$creds = $this->IntuitAnywhere->load(env('QBO_USERNAME'), env('QBO_TENANT'));
// Tell the framework to load some data from the OAuth store
$IPP->authMode(
\QuickBooks_IPP::AUTHMODE_OAUTH,
env('QBO_USERNAME'),
$creds);
if (env('QBO_SANDBOX')) {
// Turn on sandbox mode/URLs
$IPP->sandbox(true);
}
// This is our current realm
$this->realm = $creds['qb_realm'];
// Load the OAuth information from the database
$this->context = $IPP->context();
return true;
} else {
return false;
}
}
public function qboOauth(){
if ($this->IntuitAnywhere->handle(env('QBO_USERNAME'), env('QBO_TENANT')))
{
; // The user has been connected, and will be redirected to QBO_SUCCESS_URL automatically.
}
else
{
// If this happens, something went wrong with the OAuth handshake
die('Oh no, something bad happened: ' . $this->IntuitAnywhere->errorNumber() . ': ' . $this->IntuitAnywhere->errorMessage());
}
}
public function qboSuccess(){
return view('qbo_success');
}
public function qboDisconnect(){
$this->IntuitAnywhere->disconnect(env('QBO_USERNAME'), env('QBO_TENANT'),true);
return redirect()->intended("/yourpath");// afer disconnect redirect where you want
}
public function createCustomer(){
$CustomerService = new \QuickBooks_IPP_Service_Customer();
$Customer = new \QuickBooks_IPP_Object_Customer();
$Customer->setTitle('Ms');
$Customer->setGivenName('Shannon');
$Customer->setMiddleName('B');
$Customer->setFamilyName('Palmer');
$Customer->setDisplayName('Shannon B Palmer ' . mt_rand(0, 1000));
// Terms (e.g. Net 30, etc.)
$Customer->setSalesTermRef(4);
// Phone #
$PrimaryPhone = new \QuickBooks_IPP_Object_PrimaryPhone();
$PrimaryPhone->setFreeFormNumber('860-532-0089');
$Customer->setPrimaryPhone($PrimaryPhone);
// Mobile #
$Mobile = new \QuickBooks_IPP_Object_Mobile();
$Mobile->setFreeFormNumber('860-532-0089');
$Customer->setMobile($Mobile);
// Fax #
$Fax = new \QuickBooks_IPP_Object_Fax();
$Fax->setFreeFormNumber('860-532-0089');
$Customer->setFax($Fax);
// Bill address
$BillAddr = new \QuickBooks_IPP_Object_BillAddr();
$BillAddr->setLine1('72 E Blue Grass Road');
$BillAddr->setLine2('Suite D');
$BillAddr->setCity('Mt Pleasant');
$BillAddr->setCountrySubDivisionCode('MI');
$BillAddr->setPostalCode('48858');
$Customer->setBillAddr($BillAddr);
// Email
$PrimaryEmailAddr = new \QuickBooks_IPP_Object_PrimaryEmailAddr();
$PrimaryEmailAddr->setAddress('support@consolibyte.com');
$Customer->setPrimaryEmailAddr($PrimaryEmailAddr);
if ($resp = $CustomerService->add($this->context, $this->realm, $Customer))
{
//print('Our new customer ID is: [' . $resp . '] (name "' . $Customer->getDisplayName() . '")');
//return $resp;
//echo $resp;exit;
//$resp = str_replace('{','',$resp);
//$resp = str_replace('}','',$resp);
//$resp = abs($resp);
return $this->getId($resp);
}
else
{
//echo 'Not Added qbo';
print($CustomerService->lastError($this->context));
}
}
public function addItem(){
$ItemService = new \QuickBooks_IPP_Service_Item();
$Item = new \QuickBooks_IPP_Object_Item();
$Item->setName('My Item');
$Item->setType('Inventory');
$Item->setIncomeAccountRef('53');
if ($resp = $ItemService->add($this->context, $this->realm, $Item))
{
return $this->getId($resp);
}
else
{
print($ItemService->lastError($this->context));
}
}
public function addInvoice($invoiceArray,$itemArray,$customerRef){
$InvoiceService = new \QuickBooks_IPP_Service_Invoice();
$Invoice = new \QuickBooks_IPP_Object_Invoice();
$Invoice = new QuickBooks_IPP_Object_Invoice();
$Invoice->setDocNumber('WEB' . mt_rand(0, 10000));
$Invoice->setTxnDate('2013-10-11');
$Line = new QuickBooks_IPP_Object_Line();
$Line->setDetailType('SalesItemLineDetail');
$Line->setAmount(12.95 * 2);
$Line->setDescription('Test description goes here.');
$SalesItemLineDetail = new QuickBooks_IPP_Object_SalesItemLineDetail();
$SalesItemLineDetail->setItemRef('8');
$SalesItemLineDetail->setUnitPrice(12.95);
$SalesItemLineDetail->setQty(2);
$Line->addSalesItemLineDetail($SalesItemLineDetail);
$Invoice->addLine($Line);
$Invoice->setCustomerRef('67');
if ($resp = $InvoiceService->add($this->context, $this->realm, $Invoice))
{
return $this->getId($resp);
}
else
{
print($InvoiceService->lastError());
}
}
public function getId($resp){
$resp = str_replace('{','',$resp);
$resp = str_replace('}','',$resp);
$resp = abs($resp);
return $resp;
}
}
Config/app.php
<?php
require_once '../QuickBooks.php';
return [
'qbo_token' => env('QUICKBOOK_TOKEN'),
'qbo_consumer_key' => env('QBO_OAUTH_CONSUMER_KEY'),
'qbo_consumer_secret' => env('QBO_CONSUMER_SECRET'),
'qbo_sandbox' => env('QBO_SANDBOX'),
'qbo_encryption_key' => env('QBO_ENCRYPTION_KEY'),
'qbo_username' => env('QBO_USERNAME'),
'qbo_tenant' => env('QBO_TENANT'),
'qbo_auth_url' => 'http://app.localhost:8000/qbo/oauth',
'qbo_success_url' => 'http://app.localhost:8000/qbo/success',
'qbo_mysql_connection' => 'mysqli://'. env('DB_USERNAME') .':'. env('DB_PASSWORD') .'@'. env('DB_HOST') .'/'. env('DB_DATABASE'),
使用require
而不是autoloader在现代框架中(通常在现代PHP中)是一种不好的做法。我强烈建议使用包管理器(例如composer)将模块正确地添加到项目中
例如,要使用composer将quickbooks库添加到项目中,只需运行一个命令:
composer require consolibyte/quickbooks
在现代框架中(通常在现代PHP中),使用require
而不是autoloader是一种糟糕的做法。我强烈建议使用包管理器(例如composer)将模块正确地添加到项目中
例如,要使用composer将quickbooks库添加到项目中,只需运行一个命令:
composer require consolibyte/quickbooks
使用给定的代码和方法,这里有几个方面需要改进
因此,您不应该直接要求任何quickbooks库文件。如果您已通过Composer加载此文件,则会自动加载这些文件,因为Composer自动加载程序将从供应商加载QuickBooks文件。这对于Laravel以及基于Composer的一般应用程序都是正确的-与Laravel的唯一区别在于没有为该SDK编写特定的Laravel包ServiceProvider
,但这并不重要
QuickBooks库尝试自动加载以“QuickBooks”开头的任何类,因此最好为控制器类创建一个QuickBooks
文件夹。这更像是一个“抓到你了”的问题,而且已经被解决了
出现Driver/.php
错误的原因是您没有指定QBO\u DSN
,或者没有正确指定–您传递给初始化的这个DSN环境变量正在SDK代码中运行,出现false
或null
并断开自动加载程序进行初始化。如果设置为正确的连接字符串(例如mysqli://username:password@主机:端口/数据库
,请注意,端口
必须是一个数字,否则将被视为格式不正确),它将正确处理DSN并继续加载页面。请注意,初始化将尝试解析和获取主机的网络地址,因此您不能只在其中放入一个伪值,并期望它工作—这需要首先存在
您混合了环境变量和应用程序配置,而没有正确使用它们。如果您希望在应用程序配置设置QBO\u-mysql\u-connection
中以特定的方式构造DB连接字符串(也称为QBO\u-DSN
),那么您应该在尝试初始化/加载/etc时这样做。而不是使用env('QBO\u-DSN')
,您应该使用config('app.QBO\u-mysql\u-connection'))
从应用程序设置加载构造的版本。通常情况下,您根本不会将这么多的环境变量加载到一个控制器中——这些变量应该由应用程序处理,然后由控制器调用应用程序配置,因此不知道它们是如何定义的
从应用程序配置文件中要求任何内容-该文件仅用于设置配置变量
use
-ing)类的方法,但是在文件顶部使用use
子句仍然是一种很好的做法(例如使用QuickBooks\u实用程序;
)因此,您可以使用这些类,而不用担心忘记前面的反斜杠(即不再使用\QuickBooks\u Utilities
,只使用QuickBooks\u Utilities
)——给定代码中有几个实例忘记了这一点,并且将不起作用,因为Laravel应用程序具有名称空间,并且将在App\Http\Controllers
名称空间中查找这些类(例如,“找不到类App\Http\Controllers\QuickBooks\u实用程序
”)使用给定的代码和方法,这里有几个方面需要改进
ServiceProvider
,但这并不重要QuickBooks
文件夹。这更像是一个“抓到你了”的问题,而且已经被解决了Driver/.php
错误的原因是,您没有指定QBO\u DSN
,或者没有正确地指定,这是您正在使用的DSN环境变量