【问题标题】:Stripe - Fatal Error - No API key provided - PHPStripe - 致命错误 - 未提供 API 密钥 - PHP
【发布时间】:2017-01-18 17:49:08
【问题描述】:

我在提交charge.php 条带支付页面时遇到以下错误。我也没有使用作曲家。我不确定为什么会发生此错误。

致命错误:未捕获的异常“Stripe\Error\Authentication”与 message '未提供 API 密钥。 (提示:使用设置您的 API 密钥 “条纹::setApiKey()”。您可以从 条纹网络界面。有关详细信息,请参阅https://stripe.com/api,或发送电子邮件 如果您有任何问题,请支持@stripe.com。在 /home/site/html/test/stripe/lib/ApiRequestor.php:132 堆栈跟踪:#0 /home/site/html/test/stripe/lib/ApiRequestor.php(64): Stripe\ApiRequestor->_requestRaw('post', '/v1/customers', 数组, 数组)#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', 数组, 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} 在 /home/site/html/test/stripe/lib/ApiRequestor.php 上抛出 第 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 $50.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);
}

【问题讨论】:

    标签: php api namespaces stripe-payments


    【解决方案1】:

    Composer 或手动安装在这里应该不起作用,似乎由于某种原因您的密钥设置不正确!我建议做一些测试。

    1. 当您在表单上查看源代码时,是否在此处设置了可发布密钥?

    2. 如果您在 php 文件中包含 config.php,然后执行 echo $stripe['secret_key'];,它会按您的预期显示密钥吗?

    3. 尝试在您的charge.php 中手动添加\Stripe\Stripe::setApiKey($stripe['secret_key']); --- 请求是否有效?如果这不起作用,请尝试添加\Stripe\Stripe::setApiKey("sk_test_xxxyyyyyzzz");,这样会起作用吗?

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 2015-11-23
      • 1970-01-01
      • 2015-11-16
      • 2014-06-23
      • 2015-12-09
      • 2017-05-31
      • 2020-07-19
      • 2020-12-10
      相关资源
      最近更新 更多