Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中执行Curl以执行条带订阅_Php_Curl_Stripe Payments - Fatal编程技术网

在PHP中执行Curl以执行条带订阅

在PHP中执行Curl以执行条带订阅,php,curl,stripe-payments,Php,Curl,Stripe Payments,stripeapi允许进行Curl调用。例如,命令: curl https://api.stripe.com//v1/customers/cus_5ucsCmNxF3jsSY/subscriptions -u sk_test_REDACTED: 返回客户cus_5ucsCmNxF3jsSY的订阅 如何使用PHP调用这个curl命令(我试图避免使用PHP条带库) 我正在尝试以下方法: <?php // create curl resource $c

stripeapi允许进行Curl调用。例如,命令:

curl https://api.stripe.com//v1/customers/cus_5ucsCmNxF3jsSY/subscriptions    -u sk_test_REDACTED:
返回客户cus_5ucsCmNxF3jsSY的订阅


如何使用PHP调用这个curl命令(我试图避免使用PHP条带库)

我正在尝试以下方法:

<?php 
        // create curl resource 
        $ch = curl_init(); 

        // set url 
        curl_setopt($ch, CURLOPT_URL, "https://api.stripe.com//v1/customers/cus_5ucsCmNxF3jsSY/subscriptions    -u sk_test_REDACTED:"); 

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

如何将-u sk_test\u REDACTED:参数传递给curl调用?

我遇到了同样的问题。我想使用PHP的CURL函数,而不是使用官方的StripeAPI,因为单例让我恶心

我编写了自己的非常简单的Stripe类,它通过PHP和CURL利用它们的API

class Stripe {
    public $headers;
    public $url = 'https://api.stripe.com/v1/';
    public $method = null;
    public $fields = array();
    
    function __construct () {
        $this->headers = array('Authorization: Bearer '.STRIPE_API_KEY); // STRIPE_API_KEY = your stripe api key
    }
    
    function call () {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);

        switch ($this->method){
           case "POST":
              curl_setopt($ch, CURLOPT_POST, 1);
              if ($this->fields)
                 curl_setopt($ch, CURLOPT_POSTFIELDS, $this->fields);
              break;
           case "PUT":
              curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
              if ($this->fields)
                 curl_setopt($ch, CURLOPT_POSTFIELDS, $this->fields);
              break;
           default:
              if ($this->fields)
                 $this->url = sprintf("%s?%s", $this->url, http_build_query($this->fields));
        }

        curl_setopt($ch, CURLOPT_URL, $this->url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $output = curl_exec($ch);
        curl_close($ch);

        return json_decode($output, true); // return php array with api response
    }
}

// create customer and use email to identify them in stripe
$s = new Stripe();
$s->url .= 'customers';
$s->method = "POST";
$s->fields['email'] = $_POST['email'];
$customer = $s->call();

// create customer subscription with credit card and plan
$s = new Stripe();
$s->url .= 'customers/'.$customer['id'].'/subscriptions';
$s->method = "POST";
$s->fields['plan'] = $_POST['plan']; // name of the stripe plan i.e. my_stripe_plan
// credit card details
$s->fields['source'] = array(
    'object' => 'card',
    'exp_month' => $_POST['card_exp_month'],
    'exp_year' => $_POST['card_exp_year'],
    'number' => $_POST['card_number'],
    'cvc' => $_POST['card_cvc']
);
$subscription = $s->call();

如果您想进一步操作数据,可以通过
print\r
转储$customer和$subscription以查看响应数组。

“我试图避免使用PHP条带库”为什么?使用他们经过测试的、可靠的、维护良好的库,并忘掉它。此外,您可能应该从您的选项中删除您的密钥,即使它是您的测试密钥,您也不想让它可见。尽管它已经将近4年了,我非常高兴有人问这个问题。它帮助我回答了自己的问题。网络上到处都有大量的代码示例,但似乎没有一个示例考虑到客户通过处理器取消付款、资金不足、信用卡取消等问题。大多数示例都希望用户在网站上单击“取消”。对于curl请求可以做的事情来说,使用一个完整的库是过分的。你的问题不知不觉地帮我解决了问题:)太好了!谢谢@daygloink您的类很棒@daygloink,我用一个公共变量$method来提升它。您还可以将其与GET和POST一起使用。
class Stripe {
    public $headers;
    public $url = 'https://api.stripe.com/v1/';
    public $method = null;
    public $fields = array();
    
    function __construct () {
        $this->headers = array('Authorization: Bearer '.STRIPE_API_KEY); // STRIPE_API_KEY = your stripe api key
    }
    
    function call () {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);

        switch ($this->method){
           case "POST":
              curl_setopt($ch, CURLOPT_POST, 1);
              if ($this->fields)
                 curl_setopt($ch, CURLOPT_POSTFIELDS, $this->fields);
              break;
           case "PUT":
              curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
              if ($this->fields)
                 curl_setopt($ch, CURLOPT_POSTFIELDS, $this->fields);
              break;
           default:
              if ($this->fields)
                 $this->url = sprintf("%s?%s", $this->url, http_build_query($this->fields));
        }

        curl_setopt($ch, CURLOPT_URL, $this->url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $output = curl_exec($ch);
        curl_close($ch);

        return json_decode($output, true); // return php array with api response
    }
}

// create customer and use email to identify them in stripe
$s = new Stripe();
$s->url .= 'customers';
$s->method = "POST";
$s->fields['email'] = $_POST['email'];
$customer = $s->call();

// create customer subscription with credit card and plan
$s = new Stripe();
$s->url .= 'customers/'.$customer['id'].'/subscriptions';
$s->method = "POST";
$s->fields['plan'] = $_POST['plan']; // name of the stripe plan i.e. my_stripe_plan
// credit card details
$s->fields['source'] = array(
    'object' => 'card',
    'exp_month' => $_POST['card_exp_month'],
    'exp_year' => $_POST['card_exp_year'],
    'number' => $_POST['card_number'],
    'cvc' => $_POST['card_cvc']
);
$subscription = $s->call();