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

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

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

1). для подключения пользователей я поделился этим URL
https://connect.stripe.com/oauth/authorize?response_type=code&client_id = ca_5slZHMozXs9B7rrgh6MDIFcdTvYqSdfz&Объем = 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-файле, чтобы получить публикуемый ключ для кредитной карты details.put, как указано выше.

<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

Можете ли вы дать мне совет, если я делаю что-то не то здесь?

2

Решение

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

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

3

Другие решения

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

// 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
);
0

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

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

$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

);

0

Мне наконец-то удалось все настроить и успешно зарядить клиента.

ШАГ 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_xxxxxxxxxxxxxxxxxxx)

ШАГ 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; ?>">

Я предполагаю, что вы знаете, что написать для переменных php. Эта форма будет отправлена ​​на веб-сайт Verified.php.

ШАГ 3:

Добавьте следующий код в Verified.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.';}}

?>

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

0
По вопросам рекламы [email protected]