Stripe Payments和Codeigniter |获得返回值

时间:2014-03-23 02:28:01

标签: php codeigniter stripe-payments

好的,所以在我的codeigniter应用程序中,我正在使用Stripe Checkout。我正在使用带有以下代码的自定义选项:

<script>
  var handler = StripeCheckout.configure({
    key: 'pk_test_qzoaU1JTxL7DHF0i4aq3o3Q8',
    image: 'https://candykingdom.org/assets/img/logo/ck_castle.png',
    token: function(token, args) {
      var token = token.id;
      var cost = $('#prices').html();
      var total = cost.replace('.', '');
      var price = total.replace('$', '');
      var price = $.trim(price);
      dataString = 'token=' + token + '&amount=' + price;
      //alert(dataString); return false;
      $.ajax({
        type: "POST",
        url: "/checkout/doCharge",
        data: dataString,
        success: function(data) {
            alert(data);
        }
      });
    }
  });

  document.getElementById('customButton').addEventListener('click', function(e) {
      var price = $('#prices').html();
      var total = price.replace('.', '');
      var price = total.replace('$', '');
      // Open Checkout with further options
      handler.open({
        name: 'Candy Kingdom',
        description: 'On-line Purchase',
        amount: price,
        allowRememberMe: false,

      });
      e.preventDefault();
  });
</script>

这会创建结帐并处理所有这些。


然后我安装了codeigniter Stripe库,在/checkout/doCharge/我有以下代码:

public function doCharge()
{
    $this->load->library('stripe');

    $amount = $_POST['amount'];

    $card = $_POST['token'];

    $desc = 'Candy Kingdom On-line Order';

    $response = $this->stripe->charge_card($amount, $card, $desc);

    echo $response;
}

我想知道的是,在上面的功能中,我如何设法判断卡是否被批准/拒绝。如果被拒绝,我如何从条带中获取失败消息?

我知道条纹returns this when you charge a card,我只是不确定哪个变量解释了批准/拒绝和失败的消息以及如何从json return from stripe.

正确地提取它们

当我运行测试卡时,我在echo $ response中收到以下内容;

enter image description here

2 个答案:

答案 0 :(得分:0)

根据Stripe API,您只需检查HTTP响应代码即可。 “通常,2xx范围内的代码表示成功,4xx范围内的代码表示由提供的信息导致的错误(例如,缺少所需参数,充电失败等),并且5xx范围内的代码表示Stripe的服务器出错。“

我在您的代码中看到的更大问题是您信任客户端向您发送正确的总数。如果我在提交费用之前编辑客户端上的总变量,那么您将收取我编辑变量以显示的任何内容。您应该在服务器上存储和/或计算总金额,而不是信任客户端向您发送正确的总金额。

答案 1 :(得分:0)

使用此代码:

public function doCharge() {
    $this->load->library('stripe');

    $amount = $_POST['amount'];

    $card = $_POST['token'];

    $desc = 'Candy Kingdom On-line Order';

    if ((int)$amount < $_SESSION["amount"]) {
        echo "Incorrect amount";
    } else {
        $response = json_decode($this->stripe->charge_card($amount, $card, $desc));

        if ($response->paid) {
            echo "Success";
        } else {
            echo "Failed";
        }
    }
}

首先我们确保金额与我们想要的数量相同或更大,然后我们进行支付并解码Stripe的JSON响应并检查它是否成功。