我正试着提交一份脱衣舞表演。没有ajax的php,但我遇到以下错误:
致命错误:未捕获的异常条纹\错误\InvalidRequest消息无效的源对象:必须是字典或非空字符串。
我相信这与令牌没有附加到输入有关。我尝试了几种不同的方法都没有成功。
最小标记
<form action="charge.php" method="POST" id="payment-form">
//rest of the form
<input id="stripeToken" type="hidden" name="stripeToken" value="">
<input type="submit" class="submit" value="Submit Payment">
</form>
JavaScript
Stripe.setPublishableKey('pk_test_PUBLISHABLE'); //publishable key
var $form = $('#payment-form'); // declare form variable
$(function() {
$form.submit(function(event) {
// Disable the submit button to prevent repeated clicks:
$form.find('.submit').prop('disabled', true);
// Request a token from Stripe:
Stripe.card.createToken($form, stripeResponseHandler);
// Prevent the form from being submitted:
return false;
});
});
function stripeResponseHandler(status, response) {
if (response.error) {
// display errors in form
} else {
// Get the token
var token = response.id;
// Insert the token in the form:
document.getElementById('stripeToken').value=token;
// $form.append($('<input type="hidden" name="stripeToken">').val(token));
// Submit the form:
$form.get(0).submit();
}
};
要价php
require_once('config.php');
\Stripe\Stripe::setApiKey($mysk_key);
$stripeToken=$_POST['stripeToken'];//line of the error
$customer = \Stripe\Customer::create(array(
'email' => $email,
'source' =>$stripeToken, //line of the error
'plan' => $myplan
));
更新配置。php
<?php
require_once('vendor/init.php');
$test_sk="sk_test_xxx";
$live_sk="sk_live_xxx";
$mykey_sk=$test_sk;
$test_pk="pk_test_xxx";
$live_pk="pk_live_xxx";
$mykey_pk=$test_pk;
$stripe = array(
"secret_key" =>$mykey_sk,
"publishable_key" =>$mykey_pk
);
\Stripe\Stripe::setApiKey($stripe['secret_key']);
?>
确保你已经包括像这里描述的条纹
这是创建的测试文件。您可以根据需要进行修改。我用ajax处理付款。
index.php
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>Stripe Test</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<style>
* {
font-family: "Helvetica Neue", Helvetica;
font-size: 15px;
font-variant: normal;
padding: 0;
margin: 0;
}
html {
height: 100%;
}
body {
background: #E6EBF1;
align-items: center;
min-height: 100%;
display: flex;
width: 100%;
}
form {
width: 480px;
margin: 20px auto;
}
.group {
background: white;
box-shadow: 0 7px 14px 0 rgba(49,49,93,0.10),
0 3px 6px 0 rgba(0,0,0,0.08);
border-radius: 4px;
margin-bottom: 20px;
}
label {
position: relative;
color: #8898AA;
font-weight: 300;
height: 40px;
line-height: 40px;
margin-left: 20px;
display: block;
}
.group label:not(:last-child) {
border-bottom: 1px solid #F0F5FA;
}
label > span {
width: 20%;
text-align: right;
float: left;
}
.field {
background: transparent;
font-weight: 300;
border: 0;
color: #31325F;
outline: none;
padding-right: 10px;
padding-left: 10px;
cursor: text;
width: 70%;
height: 40px;
float: right;
}
.field::-webkit-input-placeholder { color: #CFD7E0; }
.field::-moz-placeholder { color: #CFD7E0; }
.field:-ms-input-placeholder { color: #CFD7E0; }
button {
float: left;
display: block;
background: #666EE8;
color: white;
box-shadow: 0 7px 14px 0 rgba(49,49,93,0.10),
0 3px 6px 0 rgba(0,0,0,0.08);
border-radius: 4px;
border: 0;
margin-top: 20px;
font-size: 15px;
font-weight: 400;
width: 100%;
height: 40px;
line-height: 38px;
outline: none;
}
button:focus {
background: #555ABF;
}
button:active {
background: #43458B;
}
.outcome {
float: left;
width: 100%;
padding-top: 8px;
min-height: 24px;
text-align: center;
}
.success, .error {
display: none;
font-size: 13px;
}
.success.visible, .error.visible {
display: inline;
}
.error {
color: #E4584C;
}
.success {
color: #666EE8;
}
.success .token {
font-weight: 500;
font-size: 13px;
}
</style>
<script src="https://js.stripe.com/v3/"></script>
<form>
<div class="group">
<label>
<span>Name</span>
<input id="name" name="name" class="field" placeholder="" />
</label>
<label>
<span>Email</span>
<input name="email" id="email" class="field" placeholder="" />
</label>
<label>
<span>Phone</span>
<input class="field" placeholder="(123) 456-7890" id="phone" type="phone" />
</label>
</div>
<div class="group">
<label>
<span>Card</span>
<div id="card-element" class="field"></div>
</label>
</div>
<button type="submit">Pay $25</button>
<div class="outcome">
<div class="error" role="alert"></div>
<div class="success">
Success! Your Stripe token is <span class="token"></span>
</div>
</div>
</form>
<script type="text/javascript">
var stripe = Stripe('YOUR-STRIPE-TOKEN');
var elements = stripe.elements();
var card = elements.create('card', {
hidePostalCode:true,
style: {
base: {
iconColor: '#666EE8',
color: '#31325F',
lineHeight: '40px',
fontWeight: 300,
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
fontSize: '15px',
'::placeholder': {
color: '#CFD7E0',
},
},
}
});
card.mount('#card-element');
function setOutcome(result) {
var successElement = document.querySelector('.success');
var errorElement = document.querySelector('.error');
successElement.classList.remove('visible');
errorElement.classList.remove('visible');
if (result.token) {
// Use the token to create a charge or a customer
// https://stripe.com/docs/charges
var stripe_token = result.token.id;
successElement.querySelector('.token').textContent = stripe_token;
successElement.classList.add('visible');
// AJAX
$.post( "do_payment.php", { stripeToken: stripe_token, name: $('#name').val(), "email":$('#email').val(), "phone": $('#phone').val() })
.done(function( data ) {
console.log(data);
});
} else if (result.error) {
errorElement.textContent = result.error.message;
errorElement.classList.add('visible');
}
}
card.on('change', function(event) {
setOutcome(event);
});
document.querySelector('form').addEventListener('submit', function(e) {
e.preventDefault();
var form = document.querySelector('form');
var extraDetails = {
name: form.querySelector('input[name=name]').value,
};
stripe.createToken(card, extraDetails).then(setOutcome);
});
</script>
</body>
</html>
对于ajax进程,创建一个php文件do\u payment。php
<?php
require_once('vendor/init.php');
$stripe = array(
"secret_key" => "YOUR STRIPE SECRET KEY",
"publishable_key" => "YOUR STRIPE PUBLISHABLE KEY"
);
\Stripe\Stripe::setApiKey($stripe['secret_key']);
$token = $_POST['stripeToken'];
$customer = \Stripe\Customer::create(array(
'email' => 'customer@example.com',
'source' => $token
));
try {
$charge = \Stripe\Charge::create(array(
'customer' => $customer->id,
'amount' => 2500, //Charge $25 See https://stripe.com/docs/currencies#zero-decimal
'currency' => 'usd'
));
} catch (RateLimit $e) {
$body = $e->getJsonBody();
return ['status' => 'failed', 'res' => $body['error']];
} catch (InvalidRequest $e) {
$body = $e->getJsonBody();
return ['status' => 'failed', 'res' => $body['error']];
} catch (Authentication $e) {
$body = $e->getJsonBody();
return ['status' => 'failed', 'res' => $body['error']];
} catch (ApiConnection $e) {
$body = $e->getJsonBody();
return ['status' => 'failed', 'res' => $body['error']];
} catch (Base $e) {
$body = $e->getJsonBody();
return ['status' => 'failed', 'res' => $body['error']];
} catch (Exception $e) {
return ['status' => 'failed', 'res' => json_encode($e->getMessage())];
}
echo '<h1>Successfully charged $50.00!</h1>';
?>
有关获取测试凭据的信息,请参阅本文档
您应该查看有关如何从Stripe获得令牌的文档:
https://stripe.com/docs/stripe.js/v2#card-createToken
您可以将表单元素传递给createToken,但所有表单字段都需要数据条带属性,而数据条带属性的值是它们所期望的键之一。否则,您需要传入卡参数,例如:
{
number: $('.card-number').val(),
cvc: $('.card-cvc').val(),
exp_month: $('.card-expiry-month').val(),
exp_year: $('.card-expiry-year').val(),
address_zip: $('.address_zip').val()
}
由于您没有向我们显示表单的其余部分,因此我们必须假设您具有数据条带属性,如:
<input type="text" data-stripe="number" id="number" />
<input type="text" data-stripe="cvc" id="cvc" />
<input type="text" data-stripe="exp_month" id="exp_month" />
<!-- and so on ... ->
然后createToken将尝试获取令牌,并使用您提供的响应处理程序。你应该检查一下反应。该处理程序中的错误:
stripeResponseHandler: function( status, response ){
if( response.error ){
alert('ERROR');
}else{
// Go ahead and post to the server ...
// Or just output to the console to verify the response ...
console.log( response );
}
}
我想是这样的反应。id是可以接受的,但在我的特定代码(正在工作)中,我使用response['id']来获取条带标记值。
我使用AJAX将支付处理发布到服务器,但我认为您这样做是可行的。只需确保验证$\u POST的内容即可。
您已经在使用jQuery了,因此您可以提取令牌并使用jQuery将其分配给输入。
确保您的回复。id不为null,然后使用jQuery编辑该值。
$('#stripeToken').val(token);
如果传递的是空字符串,stripe api将发出抱怨,因此确保您的响应非常重要。id不是空字符串。
尝试在我的stripe帐户上提交测试付款时,我遇到以下错误: 致命错误:未捕获错误:在/home/dh#u y3rvc7/vvnow.dreamhosters.com/wp-content/plugins/wp-Stripe-integration/includes/process payment.php:25堆栈跟踪:#0/home/dh#uy3rvc7/vvnow.dreamhosters.c
问题内容: 我在Eclipse中(在控制台中)遇到了一个极其严重的错误: 日志下载 我对此一无所知,因为即使Eclipse也不显示任何错误(在代码编辑器中)…这是一个真正的生产力杀手,因为它阻止了所有进度。如果有人对如何解决此问题有任何想法,请回答此问题。 真的非常感谢你, 直到 问题答案: 我有同样的问题,然后(如杰夫·舒尔茨说,在这里)我想: 这可能不是您的问题,但是我可以通过运行方式-> A
我想这可能是由于虚拟卡的详细信息,但我注入了我的真实卡的详细信息,但仍然相同的错误。 谁能帮我查一下,让我知道我在这里遗漏了什么吗?
我在进行git克隆时遇到此错误 错误:- 尝试重新安装git(最新) 还是相同的错误 操作系统:-Windows
问题内容: 我收到一个错误: 致命错误:常量表达式在第214行的config.php中包含无效操作 那行是: 我是否在报价中犯了任何错误?或者别的地方? 我对错误消息的搜索仅显示了不同的原因(函数定义中的动态默认值)。 问题答案: 从 官方的PHP文档: 像任何其他PHP静态变量一样,静态属性只能在PHP 5.6之前使用文字或常量进行初始化。不允许使用表达式。在PHP 5.6和更高版本中,相同的规
问题内容: 当我注意到我的一个模组给我这个错误时,我将要打开我的网站: 致命错误:无法在第303行的/var/www/vbsubscribetouser.php中将mysqli_result类型的对象用作数组 我去了303行,这就是我发现的内容: 这是从第303行开始的所有代码: 我不是php编码方面的专家,因此在打开网站之前会有所帮助。任何帮助/建议吗? 非常感谢你! 问题答案: 无法将类型为m