Php Laravel 4.2包在Authorize.net SKD上的开发-常量变量放在哪里?
我正在workbench中开发我的第一个Laravel包,以解决业务需求,即为我们的系统计费事务集成Authorize.net SDK 我的大部分代码现在都在工作,我可以通过自定义外观调用SDK函数,如so AuthorizeMe::authorizeAndCapture();我的问题是Authroize.net SDK需要使用已定义的变量。它们的示例用法如下:Php Laravel 4.2包在Authorize.net SKD上的开发-常量变量放在哪里?,php,laravel,Php,Laravel,我正在workbench中开发我的第一个Laravel包,以解决业务需求,即为我们的系统计费事务集成Authorize.net SDK 我的大部分代码现在都在工作,我可以通过自定义外观调用SDK函数,如so AuthorizeMe::authorizeAndCapture();我的问题是Authroize.net SDK需要使用已定义的变量。它们的示例用法如下: define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN"); define("AUTHORIZE
define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
define("AUTHORIZENET_SANDBOX", true);
$sale = new AuthorizeNetAIM;
$sale->amount = "5.99";
$sale->card_num = '6011000000000012';
$sale->exp_date = '04/15';
$response = $sale->authorizeAndCapture();
if ($response->approved) {
$transaction_id = $response->transaction_id;
}
return array(
/*
|--------------------------------------------------------------------------
| Define credentials
|--------------------------------------------------------------------------
|
| Your credentials for both live environment and sandbox
|
*/
// Live environment
'LIVE_LOGIN_ID' => 'YOUR ID',
'LIVE_TRANSACTION_KEY' => 'YOUR KEY',
// Sandbox evnironment
'SANDBOX_LOGIN_ID' => 'YOUR SANDBOX ID',
'SANDBOX_TRANSACTION_KEY' => 'YOUR SANDBOX KEY',
/*
|--------------------------------------------------------------------------
| Define environment
|--------------------------------------------------------------------------
|
| Dictates if we're in sandbox mode or live mode
|
*/
'SANDBOX' => true,
);
我想1)将定义的变量存储在packages config.php文件中,2)我想这样做如果我发布了包,其他用户只需将配置文件发布到他们的app/config/packages文件夹中,这样他们就可以简单地输入他们唯一的api信息
我尝试将API变量存储在config.php数组中,如下所示:
define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
define("AUTHORIZENET_SANDBOX", true);
$sale = new AuthorizeNetAIM;
$sale->amount = "5.99";
$sale->card_num = '6011000000000012';
$sale->exp_date = '04/15';
$response = $sale->authorizeAndCapture();
if ($response->approved) {
$transaction_id = $response->transaction_id;
}
return array(
/*
|--------------------------------------------------------------------------
| Define credentials
|--------------------------------------------------------------------------
|
| Your credentials for both live environment and sandbox
|
*/
// Live environment
'LIVE_LOGIN_ID' => 'YOUR ID',
'LIVE_TRANSACTION_KEY' => 'YOUR KEY',
// Sandbox evnironment
'SANDBOX_LOGIN_ID' => 'YOUR SANDBOX ID',
'SANDBOX_TRANSACTION_KEY' => 'YOUR SANDBOX KEY',
/*
|--------------------------------------------------------------------------
| Define environment
|--------------------------------------------------------------------------
|
| Dictates if we're in sandbox mode or live mode
|
*/
'SANDBOX' => true,
);
我不相信定义的变量可以在类中设置,所以我不确定如何使用配置文件来满足我的需要
例如,类似这样的东西似乎不起作用:
class MyClass {
public function __construct($app=null)
{
$this->app = $app ?: app();
}
public function billClient()
{
define("LIVE_LOGIN_ID", $this->app['config']->get('LIVE_LOGIN_ID'));
}
}
最后,我不想为了简单地使用我的实现而重新编写供应商软件包,因为我觉得确保我的软件包包装器位于顶部非常重要,这样它就可以在将来进行任何更新。存储静态数据,这些数据可以根据软件在服务器内部运行的服务器进行更改。我建议这样做也是为了避免API密钥被提交到源代码管理中(这可能会造成损害)。您还可以利用它在不同的环境中具有不同的配置值。从链接到手动输入的引用: 对于“真正的”应用程序,建议将所有敏感配置保留在配置文件之外。数据库密码、条带API密钥和加密密钥等内容应尽可能远离配置文件
一般做法是在名为
.env.{environment name}.php
的配置文件中定义这些内容,该文件不会签入到源代码管理中。如果对您来说效果更好,您还可以在站点的虚拟主机中指定它们,例如使用Apache的SetEnv
指令。谢谢您提供的信息。你是对的-这个例子应该使用define而不是defined,我已经更新了我的帖子。我快速浏览了一下类,它看起来像是他们试图获取这些常量的任何地方,他们也通过构造函数或方法传递这些值。我相信你不用在你的应用程序中定义任何东西,也不用让你的包装器通过环境变量来处理所有这些。这非常有帮助,你的建议让我几乎明白了-我现在最大的问题是我希望能够在某个地方定义一次api值,这样我就不必在每个方法(如billClient)中定义api值,然后再在ReturnClient中定义api值。有什么建议吗?而不是使用$this->app['config']我接受了您之前的建议,使用这些值定义了一个.env.local.php文件,并成功地在define函数中使用了$_env['VARIABLE']。谢谢。我还更新了上面的示例,以反映$this->app。。。是从哪里来的