Stripe - 致命错误 - 未提供 API 密钥 - PHP
Stripe - Fatal Error - No API key provided - PHP
我在提交 charge.php 条纹支付页面时收到以下错误。我也没有使用作曲家。我不确定为什么会出现此错误。
Fatal error: Uncaught exception 'Stripe\Error\Authentication' with
message 'No API key provided. (HINT: set your API key using
"Stripe::setApiKey()". You can generate API keys from the
Stripe web interface. See https://stripe.com/api for details, or email
support@stripe.com if you have any questions.' in
/home/site/html/test/stripe/lib/ApiRequestor.php:132 Stack trace: #0
/home/site/html/test/stripe/lib/ApiRequestor.php(64):
Stripe\ApiRequestor->_requestRaw('post', '/v1/customers', Array,
Array) #1 /home/site/html/test/stripe/lib/ApiResource.php(120):
Stripe\ApiRequestor->request('post', '/v1/customers', Array, Array) #2
/home/site/html/test/stripe/lib/ApiResource.php(160):
Stripe\ApiResource::_staticRequest('post', '/v1/customers', Array,
NULL) #3 /home/site/html/test/stripe/lib/Customer.php(59):
Stripe\ApiResource::_create(Array, NULL) #4
/home/site/html/test/charge.php(9): Stripe\Customer::create(Array) #5
{main} thrown in /home/site/html/test/stripe/lib/ApiRequestor.php on
line 132
这是我正在处理的文件:
config.php
<?php
require_once('stripe/init.php');
$stripe = array(
"secret_key" => "foobar" /* Actual secret key redacted */,
"publishable_key" => "foobar" /* Actual publishable_key redacted */
);
\Stripe\Stripe::setApiKey($stripe['secret_key']);
?>
形式:
<?php require_once('config.php'); ?>
<form action="charge.php" method="post">
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<?php echo $stripe['publishable_key']; ?>"
data-description="Access for a year"
data-amount="5000"
data-locale="auto"></script>
</form>
charge.php
<?php
require_once('config.php');
$token = $_POST['stripeToken'];
$customer = \Stripe\Customer::create(array(
'email' => 'customer@example.com',
'source' => $token
));
$charge = \Stripe\Charge::create(array(
'customer' => $customer->id,
'amount' => 5000,
'currency' => 'usd'
));
echo '<h1>Successfully charged .00!</h1>';
?>
这里还有一个 ApiRequestor.php 函数似乎导致了一个问题:
private function _requestRaw($method, $url, $params, $headers)
{
$myApiKey = $this->_apiKey;
if (!$myApiKey) {
$myApiKey = Stripe::$apiKey;
}
if (!$myApiKey) {
$msg = 'No API key provided. (HINT: set your API key using '
. '"Stripe::setApiKey(<API-KEY>)". You can generate API keys from '
. 'the Stripe web interface. See https://stripe.com/api for '
. 'details, or email support@stripe.com if you have any questions.';
throw new Error\Authentication($msg);
}
$absUrl = $this->_apiBase.$url;
$params = self::_encodeObjects($params);
$langVersion = phpversion();
$uname = php_uname();
$ua = array(
'bindings_version' => Stripe::VERSION,
'lang' => 'php',
'lang_version' => $langVersion,
'publisher' => 'stripe',
'uname' => $uname,
);
$defaultHeaders = array(
'X-Stripe-Client-User-Agent' => json_encode($ua),
'User-Agent' => 'Stripe/v1 PhpBindings/' . Stripe::VERSION,
'Authorization' => 'Bearer ' . $myApiKey,
);
if (Stripe::$apiVersion) {
$defaultHeaders['Stripe-Version'] = Stripe::$apiVersion;
}
if (Stripe::$accountId) {
$defaultHeaders['Stripe-Account'] = Stripe::$accountId;
}
$hasFile = false;
$hasCurlFile = class_exists('\CURLFile', false);
foreach ($params as $k => $v) {
if (is_resource($v)) {
$hasFile = true;
$params[$k] = self::_processResourceParam($v, $hasCurlFile);
} elseif ($hasCurlFile && $v instanceof \CURLFile) {
$hasFile = true;
}
}
if ($hasFile) {
$defaultHeaders['Content-Type'] = 'multipart/form-data';
} else {
$defaultHeaders['Content-Type'] = 'application/x-www-form-urlencoded';
}
$combinedHeaders = array_merge($defaultHeaders, $headers);
$rawHeaders = array();
foreach ($combinedHeaders as $header => $value) {
$rawHeaders[] = $header . ': ' . $value;
}
list($rbody, $rcode, $rheaders) = $this->httpClient()->request(
$method,
$absUrl,
$rawHeaders,
$params,
$hasFile
);
return array($rbody, $rcode, $rheaders, $myApiKey);
}
Composer 或手动安装应该不会在这里起作用,似乎由于某种原因您的密钥设置不正确!我建议做一些测试。
当您在表单上查看源代码时,那里设置了可发布密钥吗?
如果您将 config.php
包含在 php 文件中,然后执行 echo $stripe['secret_key'];
它是否如您期望的那样显示密钥?
尝试在您的 charge.php
中手动添加 \Stripe\Stripe::setApiKey($stripe['secret_key']);
--- 请求是否有效?如果这不起作用,请尝试添加 \Stripe\Stripe::setApiKey("sk_test_xxxyyyyyzzz");
,这样可行吗?
我在提交 charge.php 条纹支付页面时收到以下错误。我也没有使用作曲家。我不确定为什么会出现此错误。
Fatal error: Uncaught exception 'Stripe\Error\Authentication' with message 'No API key provided. (HINT: set your API key using "Stripe::setApiKey()". You can generate API keys from the Stripe web interface. See https://stripe.com/api for details, or email support@stripe.com if you have any questions.' in /home/site/html/test/stripe/lib/ApiRequestor.php:132 Stack trace: #0 /home/site/html/test/stripe/lib/ApiRequestor.php(64): Stripe\ApiRequestor->_requestRaw('post', '/v1/customers', Array, Array) #1 /home/site/html/test/stripe/lib/ApiResource.php(120): Stripe\ApiRequestor->request('post', '/v1/customers', Array, Array) #2 /home/site/html/test/stripe/lib/ApiResource.php(160): Stripe\ApiResource::_staticRequest('post', '/v1/customers', Array, NULL) #3 /home/site/html/test/stripe/lib/Customer.php(59): Stripe\ApiResource::_create(Array, NULL) #4 /home/site/html/test/charge.php(9): Stripe\Customer::create(Array) #5 {main} thrown in /home/site/html/test/stripe/lib/ApiRequestor.php on line 132
这是我正在处理的文件:
config.php
<?php
require_once('stripe/init.php');
$stripe = array(
"secret_key" => "foobar" /* Actual secret key redacted */,
"publishable_key" => "foobar" /* Actual publishable_key redacted */
);
\Stripe\Stripe::setApiKey($stripe['secret_key']);
?>
形式:
<?php require_once('config.php'); ?>
<form action="charge.php" method="post">
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<?php echo $stripe['publishable_key']; ?>"
data-description="Access for a year"
data-amount="5000"
data-locale="auto"></script>
</form>
charge.php
<?php
require_once('config.php');
$token = $_POST['stripeToken'];
$customer = \Stripe\Customer::create(array(
'email' => 'customer@example.com',
'source' => $token
));
$charge = \Stripe\Charge::create(array(
'customer' => $customer->id,
'amount' => 5000,
'currency' => 'usd'
));
echo '<h1>Successfully charged .00!</h1>';
?>
这里还有一个 ApiRequestor.php 函数似乎导致了一个问题:
private function _requestRaw($method, $url, $params, $headers)
{
$myApiKey = $this->_apiKey;
if (!$myApiKey) {
$myApiKey = Stripe::$apiKey;
}
if (!$myApiKey) {
$msg = 'No API key provided. (HINT: set your API key using '
. '"Stripe::setApiKey(<API-KEY>)". You can generate API keys from '
. 'the Stripe web interface. See https://stripe.com/api for '
. 'details, or email support@stripe.com if you have any questions.';
throw new Error\Authentication($msg);
}
$absUrl = $this->_apiBase.$url;
$params = self::_encodeObjects($params);
$langVersion = phpversion();
$uname = php_uname();
$ua = array(
'bindings_version' => Stripe::VERSION,
'lang' => 'php',
'lang_version' => $langVersion,
'publisher' => 'stripe',
'uname' => $uname,
);
$defaultHeaders = array(
'X-Stripe-Client-User-Agent' => json_encode($ua),
'User-Agent' => 'Stripe/v1 PhpBindings/' . Stripe::VERSION,
'Authorization' => 'Bearer ' . $myApiKey,
);
if (Stripe::$apiVersion) {
$defaultHeaders['Stripe-Version'] = Stripe::$apiVersion;
}
if (Stripe::$accountId) {
$defaultHeaders['Stripe-Account'] = Stripe::$accountId;
}
$hasFile = false;
$hasCurlFile = class_exists('\CURLFile', false);
foreach ($params as $k => $v) {
if (is_resource($v)) {
$hasFile = true;
$params[$k] = self::_processResourceParam($v, $hasCurlFile);
} elseif ($hasCurlFile && $v instanceof \CURLFile) {
$hasFile = true;
}
}
if ($hasFile) {
$defaultHeaders['Content-Type'] = 'multipart/form-data';
} else {
$defaultHeaders['Content-Type'] = 'application/x-www-form-urlencoded';
}
$combinedHeaders = array_merge($defaultHeaders, $headers);
$rawHeaders = array();
foreach ($combinedHeaders as $header => $value) {
$rawHeaders[] = $header . ': ' . $value;
}
list($rbody, $rcode, $rheaders) = $this->httpClient()->request(
$method,
$absUrl,
$rawHeaders,
$params,
$hasFile
);
return array($rbody, $rcode, $rheaders, $myApiKey);
}
Composer 或手动安装应该不会在这里起作用,似乎由于某种原因您的密钥设置不正确!我建议做一些测试。
当您在表单上查看源代码时,那里设置了可发布密钥吗?
如果您将
config.php
包含在 php 文件中,然后执行echo $stripe['secret_key'];
它是否如您期望的那样显示密钥?尝试在您的
charge.php
中手动添加\Stripe\Stripe::setApiKey($stripe['secret_key']);
--- 请求是否有效?如果这不起作用,请尝试添加\Stripe\Stripe::setApiKey("sk_test_xxxyyyyyzzz");
,这样可行吗?