我使用 stripe.js 在 codeigniter 中使用 Stripe 支付网关。在 stripe 支付过程中,首先进行客户端验证,然后通过 stripe php 2.1.1 库进行服务器端验证。客户端验证已准备就绪,但服务器端验证出现错误。我将 stripe php 2.1.1 文件夹放在 codeigniter 库文件夹中。
我引用这个链接http://code.tutsplus.com/tutorials/how-to-accept-payments-with-stripe--pre-80957
代码:
<?php
$success = "";
$error = "";
require_once(APPPATH.'libraries/stripe/lib/Stripe.php');
if ($_POST) {
Stripe::setApiKey("dm_wsdst_yJQB5mrfjpfQX2uMQHf3CbD");
$error = '';
$success = '';
try {
if (!isset($_POST['stripeToken']))
throw new Exception("The Stripe Token was not generated correctly");
Stripe_Charge::create(array("amount" => 11,
"currency" => "usd",
"card" => $_POST['stripeToken']));
$success = 'Your payment was successful.';
}
catch (Exception $e) {
$error = $e->getMessage();
}
}
echo "sucess". isset($success) ? $success : "";
echo "error".isset($error) && $success ? $error : "";
?>
<script type="text/javascript" src="https://js.stripe.com/v2/"></script>
<script>
Stripe.setPublishableKey('es_iksl_l5li2xygPS9cJE5MMWE8GSr');
</script>
<div class="content_white register_wrapper">
<div class="content_40" style="margin-left:350px;">
<div class="content_gray" style="margin-top: 50px;">
<form method="post" name="payment_form" id="payment_form">
<div class="error" id="payment_error"></div>
<div class="box" style="padding: 15px 0;">
<label>Card Number</label>
<input type="text" class="text_box" placeholder="Card Number" data-stripe="number" id="card_number" name="card_number" style="height: 40px;" />
<div class="error" id="form_fname_error"></div>
</div>
<div class="box" style="padding: 15px 0;">
<label>Card CVC No</label>
<input type="text" class="text_box" placeholder="CVC Number" data-stripe="cvc" id="cvc_number" name="cvc_number" style="height: 40px;" />
<div class="error" id="form_lname_error"></div>
</div>
<br>
<div class="box" style="padding: 0px">
<label>Card Expiration Month/Year (MM/YYYY)</label>
</div>
<div class="box" style="padding: 15px 0; width: 30%;float: left;">
<input type="text" class="text_box" placeholder="Month-(MM)" data-stripe="exp-month" id="exp_month" name="exp_month" style="height: 40px;" />
<div class="error" id="email_error1"></div>
</div>
<div class="box" style="padding: 15px 0; width: 50%;float: left;" >
<input type="text" class="text_box" placeholder="Year-(YYYY)" data-stripe="exp-year" id="exp_year" name="exp_year" style="height: 40px;" />
<div class="error" id="form_password_error"></div>
</div>
<div class="clear"></div>
<div class="box" style="text-align:center;">
<div class="submit_btn">
<input type="submit" class="btn_blue" id="submit_btn" value="Pay $20"/>
</div>
</div>
<div class="clear"></div>
</form>
</div>
</div>
<div class="clear"></div>
</div>
<script>
$(document).ready(function(){
$('#payment_form').submit(function(event) {
console.log("start");
var $form = $(this);
// Disable the submit button to prevent repeated clicks
$form.find('#submit_btn').prop('disabled', true);
Stripe.createToken({
number: $('#card_number').val(),
cvc: $('#cvc_number').val(),
exp_month: $('#exp_month').val(),
exp_year: $('#exp_year').val()
}, stripeResponseHandler);
// Prevent the form from submitting with the default action
return false;
});
});
// Call back function for stripe response.
function stripeResponseHandler(status, response) {
console.log("ststus"+status);
if (response.error) {
// Re-enable the submit button
$('#submit_btn').removeAttr("disabled");
// Show the errors on the form
// stripeErrorDisplayHandler(response);
$('#payment_error').text(response.error.message);
// $('.subscribe_process').hide();
} else {
var form = $("#payment_form");
// Getting token from the response json.
$('<input>', {
'type': 'hidden',
'name': 'stripeToken',
'value': response.id
}).appendTo(form);
// Doing AJAX form submit to your server.
form.get(0).submit();
return false;
}
}
</script>
当我运行此文件时,然后运行准备就绪,当我单击付款按钮时,检查卡数据和到期月份和年份,如果可以,则返回 stripeToken,然后再次重新提交表单,然后它将返回错误
Fatal error: Class 'Stripe' not found in D:\xampp\htdocs\moviesaints\application\views\user\payment_precess.php on line 12
任何想法都可以给我解决方案。
最佳答案
@rubai 绝对正确。以下是发布表单时的操作方式,即您收集卡信息,然后在后期操作中您在 Controller 中的工作方式如下:
//代码
公共(public)函数 capture_ payment(){
require_once APPPATH."third_party/stripe/init.php";
\Stripe\Stripe::setApiKey("sk_test_bB6syzsfoOqdQ4R57m7zE5Sp");
$token = Stripe\Token::create(array(
"card" => array(
"number" => $this->input->post("credit_card_no"),
"exp_month" => $this->input->post("expiry_month"),
"exp_year" => $this->input->post("expiry_year"),
"cvc" => $this->input->post("cvv")
)
));
$customer = \Stripe\Customer::create(array(
"source" => $token,
"description" =>$this->session->userdata('doctor_name'))
);
// Charge the Customer instead of the card
$charge = \Stripe\Charge::create(array(
"amount" => 2000, // amount in cents, again
"currency" => "usd",
"customer" => $customer->id)
);
}
关于php - Codeigniter 中的 Stripe 支付网关集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28911918/