2016-08-07 2 views
0

Я пытаюсь создать пользовательскую форму оплаты для Stripe, и я хочу, чтобы вызов AJAX выполнялся вручную. (вместо события отправки)Сделать оплату с помощью JQuery AJAX? (ТОЛЬКО Javascript)

Однако, во-первых, я уверен, что размещаю его не туда. Но я не могу понять, на какой 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 статус ОК, и я получил маркер от сервера.

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. Вот почему я предполагаю, что у меня неправильный URL.

Может ли кто-нибудь помочь мне разобраться, как сделать запрос на отправку по почте для оплаты по Стране?

+0

Привет, пожалуйста, проверьте документы. https://stripe.com/docs/checkout#integration-custom и https://checkout.stripe.com/checkout.js - это файл javascript, который должен быть загружен на вашу страницу с помощью тегов HTML-скриптов. – user2267175

ответ

1

Отказ от ответственности: Это работает, но это ТЕРРИБНАЯ практика. Не используйте это для реального проекта. Мне это было нужно для интерфейсной среды только для тестирования. Как указывали другие пользователи на этой странице, вы должны делать это на бэкэнде!

я, наконец, нашел какую-то полезную документацию по адресу: https://stripe.com/docs/api#create_charge

Как я подозревал, что URL я использую не так.

после получения правильного 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

Вы должны POST в PHP файл в вашей $.ajax() функции:

$.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 bindingsrequire() д, чтобы использовать нашивки оплаты 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" => "[email protected]") 
); 
echo 'success'; 
} catch(Stripe_CardError $e) { 
    // The card has been declined 
    echo $tokenid; 
} 

?> 

Обратитесь к README этого GitHub для более, а также Stripe documentation.

+0

Overkill. Просто используйте их API: https://stripe.com/docs/api/curl#create_charge – TemporaryName

+0

@TemporaryName: Это не перебор - это правильный способ сделать это. Маркер должен быть отправлен на серверный сервер торговца, где он будет использоваться в запросе на создание платы. Если вы отправляете токен в API напрямую из внешнего запроса, вы открываете секретный ключ API. – Ywain

+0

@TemporaryName Yup, на самом деле глядя на это снова, это именно то, к чему API, с которым вы связались, говорит ... –

Смежные вопросы