使用Jquery AJAX进行Stripe付款? (仅限Javascript)

时间:2016-08-07 23:27:22

标签: javascript jquery ajax stripe-payments

我正在尝试为Stripe创建自定义付款表单,我想手动调用Stripe的AJAX。 (而不是提交事件)

然而,首先,我很确定我将它发布到了错误的地方。但我无法弄清楚我应该向此发布请求的网址。

如果我使用的是正确的网址。我收到405 not allowed回复。没有关于我的请求有什么问题的信息。

这是我得到的:

Stripe.setPublishableKey('pk_test_12345');
    Stripe.card.createToken({
      number: ccNum,
      cvc: ccCVC,
      exp_month: ccMonth,
      exp_year: ccYear
    }, stripeResponseHandler);

这部分工作正常,给我一个200 OK状态,我从服务器回来了一个令牌。

function stripeResponseHandler(status, response) {
      console.log('card status: ', status);
      console.log('token: ', response.id);
      $.ajax({
        type: 'POST',
        url: 'https://checkout.stripe.com/checkout.js',
        headers: {
          stripeToken: response.id
        },
        data: {
          number: ccNum,
          cvc: ccCVC,
          exp_month: ccMonth,
          exp_year: ccYear
        },
        success: (response) => {
          console.log('successful payment: ', response);
        },
        error: (response) => {
          console.log('error payment: ', response);
        }
      })
    }

然而,这给了我405不允许。对我来说,端点是一个.js文件似乎有点奇怪。这就是为什么我假设我的网址错误。

任何人都可以帮我弄清楚如何为Stripe付款提出手动发布请求吗?

2 个答案:

答案 0 :(得分:3)

您需要POST$.ajax()函数中的PHP文件:

  $.ajax({
    type: 'POST',
    url: './stripe-payment.php',
    headers: {
      stripeToken: response.id
    },
    data: {
      number: ccNum,
      cvc: ccCVC,
      exp_month: ccMonth,
      exp_year: ccYear
    },
    success: (response) => {
      console.log('successful payment: ', response);
    },
    error: (response) => {
      console.log('error payment: ', response);
    }
  })

你的PHP应该像Stripe PHP bindings require() d那样使用Stripe支付API,而且PHP文件看起来应该是这样的,来自this SO question

<?php

require_once('Stripe.php');

// Set your secret key: remember to change this to your live secret key in production
// See your keys here https://manage.stripe.com/account
Stripe::setApiKey("sk_test_APIKEYREDACTED");

// Get the credit card details submitted by the form
$token = json_decode($_POST['chargeData']);
$tokenid = $token['id'];

// Create the charge on Stripe's servers - this will charge the user's card
try {
$charge = Stripe_Charge::create(array(
  "amount" => 2000, // amount in cents, again
  "currency" => "usd",
  "card" => $tokenid,
  "description" => "payinguser@example.com")
);
echo 'success';
} catch(Stripe_CardError $e) {
  // The card has been declined
    echo $tokenid;
}

?>

请参阅Github的README以获取更多信息,以及Stripe documentation

答案 1 :(得分:2)

免责声明:这是有效的,但它是可怕的做法。不要将它用于实际项目。我需要它才能用于前端测试环境。正如本页上的其他用户指出的那样,您应该在后端执行此操作!

我终于在https://stripe.com/docs/api#create_charge

找到了一些有用的文档

我怀疑我使用的网址是错误的。

获取正确的URL后,以下ajax调用有效:

希望这对其他人也有帮助!大多数答案都是PHP或其他后端语言。

$.ajax({
        type: 'POST',
        url: 'https://api.stripe.com/v1/charges',
        headers: {
          Authorization: 'Bearer sk_test_YourSecretKeyHere'
        },
        data: {
          amount: 3000,
          currency: 'usd',
          source: response.id,
          description: "Charge for madison.garcia@example.com"
        },
        success: (response) => {
          console.log('successful payment: ', response);
        },
        error: (response) => {
          console.log('error payment: ', response);
        }
      })