2016-08-07 11 views
0

私はStripeのカスタム支払いフォームを作成しようとしていて、AJAXをStripeに手動で呼びたいと思っています。 (提出イベントの代わりに)Jquery AJAXでストライプを支払うには? (Javascriptのみ)

しかし、最初は私が間違った場所に投稿していると確信しています。しかし、私はこのURLへの投稿要求をするためにどのURLを使用するのか分かりません。

私は正しいURLを使用しています。私は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 Not Allowedを与えます。エンドポイントが.jsファイルになるのは少し奇妙なようです。だから私は間違ったURLを持っていると仮定している。

誰でも私がストライプ支払いの手動投稿要求を行う方法を理解できますか?

+0

こんにちは、ストライプドキュメントを確認してください。 https://stripe.com/docs/checkout#integration-customおよびhttps://checkout.stripe.com/checkout.jsは、HTMLスクリプトタグを使用してページにロードされるはずのjavascriptファイルです。 – user2267175

答えて

1

免責事項:これは機能しますが、これは厳しい習慣です。実際のプロジェクトにはこれを使わないでください。私は、フロントエンドのみのテスト環境に必要でした。このページの他のユーザーが指摘しているように、バックエンドでこれを行う必要があります!

私は最終的にいくつかの有用な文書が見つかりました:私は、私が使用したURLが間違っていた疑いがあるとして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 [email protected]" 
     }, 
     success: (response) => { 
      console.log('successful payment: ', response); 
     }, 
     error: (response) => { 
      console.log('error payment: ', response); 
     } 
     }) 
+0

ああ、それは良い方法かもしれない! –

+1

@MLyck:フロントエンドコードから直接APIに投稿すると、あなたの秘密鍵が誰にでも見えるようになります。トークンをバックエンドに送信し、バックエンドコードから請求作成要求を送信する必要があります(他の回答が示唆するように)。 – Ywain

+1

@Ywainは非常に正しい - 私は最初のコメントがより良い方法かもしれないとは言えません。リクエスト**はバックエンドで**作成されています –

2

あなたの$.ajax()機能でPHPファイルにPOSTする必要があります。

$.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は、ストライプ支払いAPIを使用するには、Stripe PHP bindingsrequire() Dのようなものを持っている必要があり、その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" => "[email protected]") 
); 
echo 'success'; 
} catch(Stripe_CardError $e) { 
    // The card has been declined 
    echo $tokenid; 
} 

?> 

Stripe documentationとしてだけでなく、より多くのためにそれのGithubのREADMEを参照してください。

+0

オーバーキル。そのAPIを使用してください:https://stripe.com/docs/api/curl#create_charge – TemporaryName

+0

@TemporaryName:これは過度なことではありません。正しい方法です。トークンは、販売者のバックエンドサーバーに送信する必要があります。ここで、トークンは請求作成要求で使用されます。フロントエンドリクエストから直接トークンをAPIに送信すると、秘密のAPIキーが明らかになります。 – Ywain

+0

@TemporaryNameはい、実際にこれをもう一度見て、これはまさにあなたがリンクしているAPIが何をしているかを示しています... –

関連する問題