mahedhanu mahedhanu - 3 months ago 30
PHP Question

Stripe connect charging fee returning an error (PHP)

I am developing a web application which is using stripe payment gateway. I need to charge $5 from every transaction to my stripe account and transfer the rest for the supplier's stripe account.

I did following steps.

1). to connect users I shared this url

https://connect.stripe.com/oauth/authorize?response_type=code&client_id=ca_5slZHMozXs9B7rrgh6MDIFcdTvYqSdfz&scope=read_write

2). Set up redirect url to my application and did following codes to handle request

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>";
}


I received following response

sk_test_iLSNjRezyNiOiRpQk83UwQ6q

pk_test_0WXzhiA6xehlaZnmPZqP5VBi

acct_15iIu1I4jMsDTdhX

2). Then I used following code in the html file to grab credit card details.put publishable key as above returned publishable key.

<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). Then I did following coding to recieve the token and charge from the card.Used above returned stripe_user_id for Stripe-Account parameter

// 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" => "testm@example.com",
"application_fee" => 5 // amount in cents
),
array("Stripe-Account" => "acct_15iIu1I4jMsDTdhX")
);


But it returns me following error

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


Can you please advice me if I am doing wrong thing here

Answer

I resolved this error by putting access token directly.

// 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" => "testm@example.com",
        "application_fee" => 5 // amount in cents
      ),
       ACCESS_TOKEN
    );