编程语言
首页 > 编程语言> > 使用自定义cURL和PHP代码进行Stripe Charge时出错

使用自定义cURL和PHP代码进行Stripe Charge时出错

作者:互联网

经过3天的扎实研究,并尽我最大的努力解决了问题,Ive变得不成功,不得不意识到也许这是我不应该尝试的事情!在我自己的个人尝试失败后,我不得不向您求助于在我的初学者学习阶段需要一些建议和帮助的专家.

我尝试使用stripe提供的PHP代码,但是由于我们在网站中使用了复杂的自定义表单,而且我们的网站访问量很多都来自内部,因此我们需要一种将付款发送给Stripe eiser的方法,而不是集成一个全新的php付款流程它也可以处理来自内部客户的付款,所以我认为我知道一些cURL,这是因为在网站流程中已经使用了多个cURL和PHP API调用.

我为条带尝试的cURL如下:

    $headers = array(
    'Authorization: Bearer sk_test_my_test_key_here',
);
$ch = curl_init("https://api.stripe.com/v1/charges -H Content-Type=application/x-www-form-urlencoded -u sk_test_my_test_key: -d source[object]=card -d source[number]=4242424242424242 -d source[exp_month]=08 -d source[exp_year]=18 -d source[cvc]=123 -d amount=250 -d currency=gbp -d description=Testing ");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
echo $response;
curl_close($ch);

{“错误”:{“类型”:“ invalid_request_error”,“消息”:“无法识别的请求网址(POST:/ v1 / charges -H Content-Type = application / x-www-form-urlencoded -u sk_test_keyP:-d source [object] = card -d source [number] = 4242424242424242 -d source [exp_month] = 08 -d source [exp_year] = 18 -d source [cvc] = 123 -d金额= 250 -d货币= gbp -d description = Testing).请参阅https://stripe.com/docs,否则我们可以在https://support.stripe.com/提供帮助.” }}

我已经尝试阅读文档,但是没有任何关于我得到的错误的解释,我认为问题的最大部分是我没有足够的经验来确切了解要研究的内容以及像您一样会想看的关键短语专家起来

我尝试了使用-H Content-Type和不使用-H Content-Type仍然遇到相同的问题,但是如果我要复制curl并将其粘贴到命令行中并使用以下命令从命令中执行

curl.exe https://...................

则消息成功,我得到响应,我想回说卡已收费.

also tried  `$string = rawurlencode($data) and then http_build_query` on the $string

这是我尝试过的足够的示例:

<?php
$headers = array(
    'Authorization: Bearer sk_test_removed_for_stackoverflow',
);

// create curl resource 
$ch = curl_init(); 

// set url 
curl_setopt($ch, CURLOPT_URL, "https://api.stripe.com/v1/charges -u sk_test_removed: -d source[object]=card -d source[number]=4242424242424242 -d source[exp_month]=08 -d source[exp_year]=18 -d source[cvc]=123 -d amount=250 -d currency=gbp -d description=Test "); 

也尝试这样:

// set url 
curl_setopt($ch, CURLOPT_URL, "https://api.stripe.com/v1/charges -u sk_test_removed: -d source[object]=$card -d source[number]=$number -d source[exp_month]=$expdate -d source[exp_year]=$expmonth -d source[cvc]=$ccv -d amount=$amount -d currency=gbp -d description=$sale "); 

// set headers
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

//return the transfer as a string 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

// $output contains the output string 
$output = curl_exec($ch); 
print($output);

// close curl resource to free up system resources 
curl_close($ch);
?>

老实说,我现在处在迷茫的境地,对于任何能够在这个问题上为我提供帮助和帮助的人,我都将非常高兴.经过三天的痛苦,我真的不知道该怎么办.

作为新手学习者,在进行问题重新搜索时,很难确切知道要搜索什么.我在Google上花了3天的时间,收到2条警告消息,说他们认为由于进行了多少次研究,我发送了自动查询信息!因此,任何建议和帮助都将在此方面大有帮助.

谢谢大家

解决方法:

使用Stripe PHP bindings不是可行的解决方案吗?这样会更简单:

\Stripe\Stripe::setApiKey("sk_test_...");

// Token creation. In production this should be done client-side via Stripe.js or Checkout.
$token = \Stripe\Token::create([
  "card" => array(
    "number" => "4242424242424242",
    "exp_month" => 8,
    "exp_year" => 18,
    "cvc" => "123"
  )
]);

// Charge creation
try {
    $charge = \Stripe\Charge::create([
      "amount" => 250,
      "currency" => "gbp",
      "source" => $token->id,
      "description" => "Testing"
    ]);
} catch(...) {
    // Handle possible failures. See https://stripe.com/docs/api/php#errors
}

如果您真的坚持使用curl,这应该可以工作:

$apiKey = 'sk_test_...';
$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => "https://api.stripe.com/v1/charges",
    CURLOPT_POST => 1,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . $apiKey
    ],
    CURLOPT_POSTFIELDS => http_build_query([
        "amount" => 250,
        "currency" => 'gbp',
        "source" => array(
            "object" => "card",
            "number" => "4242424242424242",
            "exp_month" => 8,
            "exp_year" => 18,
            "cvc" => "123"
        ),
        "description" => "Testing"
    ])
]);
$resp = curl_exec($curl);
curl_close($curl);

笔记:

>自行提供卡的详细信息,而无需通过Stripe.jsCheckout进行客户端令牌化,则会出现PCI compliance的问题,但是我想您已经意识到了这一点.
>使用绑定使通过异常处理电荷创建失败更加容易.有关更多信息,请参见the documentation.

标签:stripe-payments,curl,api,php
来源: https://codeday.me/bug/20191027/1948248.html