Плата за подключение Stripe возвращает ошибку (PHP)

Я разрабатываю веб-приложение, которое использует платежный шлюз. Мне нужно взимать 5 долларов за каждую транзакцию с моей страйп-учетной записи, а остальные переводить на страйп-аккаунт поставщика.

Я сделал следующие шаги.

1). для подключения пользователей я поделился этим URL
https://connect.stripe.com/oauth/authorize?response_type=code&client_id=ca_5slZHMozXs9B7rrgh6MDIFcdTvYqSdfz&scope=read_write

2). Настройте URL-адрес перенаправления для моего приложения и выполните следующие коды для обработки запроса.

if (isset($_GET['code'])) { // Redirect w/ code
          $code = $_GET['code'];

          $token_request_body = array(
            'grant_type' => 'authorization_code',
            'client_id' => 'ca_5slZHMozXs9B7rrgh6MDIFcdTvYqSdfz',
            'code' => $code,
            'client_secret' => 'sk_test_WcXfM3Tsb0IlkSKmbZTYnq5d'
          );

          $req = curl_init("https://connect.stripe.com/oauth/token");
          curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($req, CURLOPT_POST, true );
          curl_setopt($req, CURLOPT_POSTFIELDS, http_build_query($token_request_body));
          curl_setopt($req, CURLOPT_SSL_VERIFYPEER, FALSE);
          //curl_setopt($req, CURLOPT_CAINFO, "assets/cacert.pem");

          // TODO: Additional error handling
          $respCode = curl_getinfo($req, CURLINFO_HTTP_CODE);
          $resp = json_decode(curl_exec($req), true);
          curl_close($req);

          echo $resp['access_token'];
                echo "<br/>";
          echo  $resp['stripe_publishable_key'];
                echo "<br/>";
          echo $resp['stripe_user_id'];

        } else if (isset($_GET['error'])) { // Error
          echo $_GET['error_description'];
        } else { // Show OAuth link
          $authorize_request_body = array(
            'response_type' => 'code',
            'scope' => 'read_write',
            'client_id' => 'ca_5slZHMozXs9B7rrgh6MDIFcdTvYqSdfz'
          );

          $url = AUTHORIZE_URI . '?' . http_build_query($authorize_request_body);
          echo "<a href='$url'>Connect with Stripe</a>";
        }  

Я получил следующий ответ

sk_test_iLSNjRezyNiOiRpQk83UwQ6q
pk_test_0WXzhiA6xehlaZnmPZqP5VBi
acct_15iIu1I4jMsDTdhX

2). Затем я использовал следующий код в html-файле, чтобы получить данные кредитной карты. Поместите публикуемый ключ, как указано выше, вернул публикуемый ключ.

<script src="https://checkout.stripe.com/v2/checkout.js" class="stripe-button"
              data-key="pk_test_0WXzhiA6xehlaZnmPZqP5VBi"
              data-email= "<?php echo $usremail; ?>"
              data-amount="<?php echo $valCoursefee*100; ?>" data-description="Pay & Enroll">
            </script>  

3). Затем я сделал следующее кодирование для получения токена и оплаты с карты. Используемый выше возвращал stripe_user_id для параметра Stripe-Account.

// Get the credit card details submitted by the form
        $token = $_POST['stripeToken'];
        // Stripe_Stripe::setApiKey("sk_test_WcXfM3Tsb0IlkSKmbZTYnq5d");
        // Create the charge on Stripe's servers - this will charge the user's card
        $charge = Stripe_Charge::create(
          array(
            "amount" => 1000, // amount in cents
            "currency" => "usd",
            "source" => $token,
            "description" => "[email protected]",
            "application_fee" => 5 // amount in cents
          ),
          array("Stripe-Account" => "acct_15iIu1I4jMsDTdhX")
        );

Но он возвращает мне следующую ошибку

Fatal error: Uncaught exception 'Stripe_InvalidRequestError' with message 'There is no token with ID tok_15lW5jI4jMsDTdhXhG9vfnjk.' in C:\wamp2\www\NEW\application\libraries\payment_gateway\lib\Stripe\ApiRequestor.php on line 147

Не могли бы вы посоветовать мне, если я делаю что-то неправильно здесь


person mahedhanu    schedule 29.03.2015    source источник


Ответы (4)


Обработка платежа непосредственно в подключенной учетной записи требует аутентификации, которую лучше всего достигается путем предоставления секретного ключа учетной записи платформы.

Поэтому, если вы хотите списать с карты плату за подачу заявки в размере 5 долларов, вам необходимо аутентифицировать свое веб-приложение с помощью Strip API. Какой токен возврата, а затем вы должны передать этот токен для платежной карты. Может быть, эта ссылка поможет вам больше. https://stripe.com/docs/connect/payments-fees

person Piyush    schedule 01.04.2015

Я решил эту ошибку, поставив токен доступа напрямую.

// Get the credit card details submitted by the form
    $token = $_POST['stripeToken'];
    // Stripe_Stripe::setApiKey("sk_test_WcXfM3Tsb0IlkSKmbZTYnq5d");
    // Create the charge on Stripe's servers - this will charge the user's card
    $charge = Stripe_Charge::create(
      array(
        "amount" => 1000, // amount in cents
        "currency" => "usd",
        "source" => $token,
        "description" => "[email protected]",
        "application_fee" => 5 // amount in cents
      ),
       ACCESS_TOKEN
    );
person mahedhanu    schedule 02.04.2015

В зависимости от обновлений версии синтаксис имеет тенденцию немного меняться, и иногда мы смешиваем разные синтаксисы. Попробуйте использовать более позднюю версию Stripe.

И замените свой код следующим кодом:

$token = $_POST['stripeToken'];
$charge = \Stripe\Charge::create(
array(
  "amount" => 1000, // amount in cents
  "currency" => "usd",
  "source" => $token,
  "description" => "Example charge",
  "application_fee" => 123 // amount in cents
),
ACCESS_TOKEN

);

person Ankit Jindal    schedule 17.04.2015

Наконец-то мне удалось все установить и успешно списать деньги с клиента.

ШАГ 1: Подключите клиента к вашей платформе, используя следующий код:

define('AUTHORIZE_URI', 'https://connect.stripe.com/oauth/authorize');

if (isset($_GET['code'])) { // Перенаправление с кодом $code = $_GET['code'];

  $token_request_body = array(
    'grant_type' => 'authorization_code',
    'client_id' => ' ca_xxxxxxxxxxxxxxxxxxxxxxxxx',
    'code' => $code,
    'client_secret' => 'sk_live_xxxxxxxxxxxxxxxxxxxxx'
  );

  $req = curl_init("https://connect.stripe.com/oauth/token");
  curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($req, CURLOPT_POST, true );
  curl_setopt($req, CURLOPT_POSTFIELDS, http_build_query($token_request_body));
  curl_setopt($req, CURLOPT_SSL_VERIFYPEER, FALSE);
  //curl_setopt($req, CURLOPT_CAINFO, "assets/cacert.pem");

  // TODO: Additional error handling
  $respCode = curl_getinfo($req, CURLINFO_HTTP_CODE);
  $resp = json_decode(curl_exec($req), true);
  curl_close($req);

  echo $resp['access_token'];
        echo "<br/>";
  echo  $resp['stripe_publishable_key'];
        echo "<br/>";
  echo $resp['stripe_user_id'];

} else if (isset($_GET['error'])) { // Error
  echo $_GET['error_description'];
} else { // Show OAuth link
  $authorize_request_body = array(
    'response_type' => 'code',
    'scope' => 'read_write',
    'client_id' => 'ca_xxxxxxxxxxxxxxxxxxxxxx'
  );

  $url = AUTHORIZE_URI . '?' . http_build_query($authorize_request_body);
  echo "<a href='$url'>Connect with Stripe</a>";
}  

После того, как клиент подключит вашу учетную запись, URL-адрес перенаправления вернет идентификатор подключенной учетной записи (acc_xxxxxxxxxxxxxxxxxxxxx)

ШАГ 2: Создайте форму для оплаты следующим образом:

<form action="confirmed.php" method="POST" class="form" >
<input type="hidden" name="pay" value="pay" />
<script
    src="https://checkout.stripe.com/v2/checkout.js" class="stripe-button"
    data-key="<?php echo $publishable_key; ?>"
    data-image="http://www.domain.co.uk/pay/img/stripe.png"
    data-name="<?php echo $company_name; ?>"
    data-currency="gbp"
    data-email="<?php echo $email; ?>"
    data-description="<?php echo $payment_description; ?>t"
    data-label = "Confirm Payment of <?php echo currency($amount); ?>"
    data-billingAddress="false"
    data-amount="<?php echo $stripe_amount; ?>">
</script>

<input type="hidden" name="stripe_amount" value="<?php echo $stripe_amount; ?>">
<input type="hidden" name="email" value="<?php echo $email; ?>">
<input type="hidden" name="amount" value="<?php echo $amount; ?>">

I am assuming you know what to write for the php variables. This form will go to confirmed.php.

ШАГ 3:

Добавьте следующий код в подтвержденный.php.

<?php
                    if (isset($_POST['pay']))     { 
                        $stripe_amount = $_POST['stripe_amount'];
                        $amount = $stripe_amount / 100;
                        $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);

                        // Set your secret key: remember to change this to your live secret key in production
                        // See your keys here: https://dashboard.stripe.com/account/apikeys
                        \Stripe\Stripe::setApiKey($secret_key);

                        // Get the credit card details submitted by the form
                        $token = $_POST['stripeToken'];

                        // Create the charge with Stripe
                        $charge = \Stripe\Charge::create(
                          array(
                            "amount" => $stripe_amount, // amount in cents
                            "currency" => $currency,
                            "source" => $token,
                            "description" => "Example charge",
                            "application_fee" => $stripe_amount * 0.01 //charging %1 of the total amount
                          ),
                          array("stripe_account" => 'acct_xxxxxxxxxxxxxxx')
                        );

                        if ($charge){
                        //do something like sending email or updating database

                        echo '
                        <div class="col-md-12">
                            <div class="alert alert-success ">
                                <i class="icon fa fa-check"></i> Payment of <b>&pound;'.$amount.'</b> has been completed.
                            </div>
                        </div>
                        <a href="index.php">Make another payment</a>
                        ';

                        }

                        else {echo 'Something went wrong. Your payment may not have been confirmed. Please contact administrator.';}


                    } 

                ?>

Это сработало для меня, поэтому любой вопрос приветствуется. Надеюсь, это поможет кому-то

person Vurkac    schedule 24.08.2016