我正在尝试按照本教程集成Stripe的自定义支付流:https://stripe.com/docs/payments/integration-builder
// A reference to Stripe.js initialized with your real test publishable API key.
var stripe = Stripe("pk_test..");
var formData = {
'email': document.getElementById("email").value,
'cardholder-name': document.getElementById("cardholder-name").value,
'user_id': document.getElementById("user_id").value
};
// Disable the button until we have Stripe set up on the page
document.querySelector("button").disabled = true;
fetch("create.php", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(formData),
})
.then(function(result) {
return result.json();
})
.then(function(data) {
var elements = stripe.elements();
var style = {
base: {
color: "#32325d",
fontFamily: 'Arial, sans-serif',
fontSmoothing: "antialiased",
fontSize: "16px",
"::placeholder": {
color: "#32325d"
}
},
invalid: {
fontFamily: 'Arial, sans-serif',
color: "#fa755a",
iconColor: "#fa755a"
}
};
var card = elements.create("card", { style: style });
// Stripe injects an iframe into the DOM
card.mount("#card-element");
card.on("change", function (event) {
// Disable the Pay button if there are no card details in the Element
document.querySelector("button").disabled = event.empty;
document.querySelector("#card-error").textContent = event.error ? event.error.message : "";
});
var form = document.getElementById("payment-form");
form.addEventListener("submit", function(event) {
event.preventDefault();
// Complete payment when the submit button is clicked
payWithCard(stripe, card, data.clientSecret);
});
});
// Calls stripe.confirmCardPayment
// If the card requires authentication Stripe shows a pop-up modal to
// prompt the user to enter authentication details without leaving your page.
var payWithCard = function(stripe, card, clientSecret) {
loading(true);
stripe
.confirmCardPayment(clientSecret, {
payment_method: {
card: card
}
})
.then(function(result) {
if (result.error) {
// Show error to your customer
showError(result.error.message);
} else {
// The payment succeeded!
orderComplete(result.paymentIntent.id);
}
});
};
/* ------- UI helpers ------- */
// Shows a success message when the payment is complete
var orderComplete = function(paymentIntentId) {
loading(false);
document
.querySelector(".result-message a")
.setAttribute(
"href",
"https://dashboard.stripe.com/test/payments/" + paymentIntentId
);
document.querySelector(".result-message").classList.remove("hidden");
document.querySelector("button").disabled = true;
};
// Show the customer the error from Stripe if their card fails to charge
var showError = function(errorMsgText) {
loading(false);
var errorMsg = document.querySelector("#card-error");
errorMsg.textContent = errorMsgText;
setTimeout(function() {
errorMsg.textContent = "";
}, 4000);
};
// Show a spinner on payment submission
var loading = function(isLoading) {
if (isLoading) {
// Disable the button and show a spinner
document.querySelector("button").disabled = true;
document.querySelector("#spinner").classList.remove("hidden");
document.querySelector("#button-text").classList.add("hidden");
} else {
document.querySelector("button").disabled = false;
document.querySelector("#spinner").classList.add("hidden");
document.querySelector("#button-text").classList.remove("hidden");
}
};
<form id="payment-form">
<input type="hidden" id="user_id" value="<? echo $user_id; ?>">
<div class="form-group">
</div>
<label>
<input id="cardholder-name" class="field is-empty" placeholder="Cardholder Name" style="height: 50px;" />
</label>
<label>
<input class="field is-empty" type="email" name="email" id="email" placeholder="Your Email" style="height: 50px;" />
</label>
<label>
<div id="card-element" class="field form-control"><!--Stripe.js injects the Card Element--></div><br><br>
</label>
<button id="submit">
<div class="spinner hidden" id="spinner"></div>
<span id="button-text">Submit Payment</span>
</button>
<p id="card-error" role="alert"></p>
<p class="result-message hidden">
Payment succeeded, see the result in your
<a href="" target="_blank">Stripe dashboard.</a> Refresh the page to pay again.
</p>
</form>
require 'vendor/autoload.php';
\Stripe\Stripe::setApiKey('sk_test_...');
header('Content-Type: application/json');
try {
// retrieve JSON from POST body
$json_str = file_get_contents('php://input');
$json_obj = json_decode($json_str);
$email = $json_obj['email'];
$paymentIntent = \Stripe\PaymentIntent::create([
'amount' => 1000,
'currency' => 'gbp',
'description' => $user_id,
"receipt_email" => $email,
"payment_method_options" => [
"card" => [ "installments" => null,
"network" => null,
"request_three_d_secure" => "automatic" ]
],
"payment_method_types" => ["card"] ]);
$output = [
'clientSecret' => $paymentIntent->client_secret,
];
echo json_encode($output);
} catch (Error $e) {
http_response_code(500);
echo json_encode(['error' => $e->getMessage()]);
}
电子邮件和user_id仍然没有被传递,并且在Stripe Dashboard上返回为空。但是,正如我所说的,付款是成功的。但是,我需要将它链接到一个user_id,电子邮件。来使用它。请帮帮忙。提前道谢。
在您共享的片段中,$user_id
和$email
没有在任何地方定义,只在参数中提供。
假设您已经确认有效负载按照预期从客户端到达服务器,您是否打算设置以下内容:
$user_id = $json['user_id'];
$email = $json['email'];
我正在尝试使用PaymentIntent执行带区支付。我在stripe网站上读到了以下内容(链接) 在服务器上使用金额和货币创建PaymentIntent。始终要决定在服务器端(一个受信任的环境)而不是客户端收取多少费用。这就防止了恶意客户能够自行选择价格。 我不明白如何决定在服务器端收取多少费用。我的应用程序有一系列的项目要买,每一个项目都有价格应用程序是一个市场和价格清单在客户端,所以我决定多
我不清楚什么时候建立秩序,以下是我想到的两种方法: 第一种方法 用户输入订单详细信息并单击“下单”。 在数据库中创建带有布尔标志is_active的Order,并将orderId发送到UI。 用户将被重定向到带区支付页面。 用户输入卡的详细信息,我们将获得计费卡的条带令牌 将orderId发送到后端的令牌。 后端使用令牌向带区计费用户发送请求,如果计费成功,则将订单标记为活动,否则向用户报告失败。
wx.BaaS.pay(OBJECT) OBJECT 参数说明 参数 类型 必填 参数描述 totalCost Number Y 支付总额 merchandiseDescription String Y 微信支付凭证-商品详情的内容 merchandiseSchemaID Integer N 商品表 ID,可用于定位用户购买的物品 merchandiseRecordID String N 商品记录
下面的代码在javascript工作,它返回的响应的付款方式,例如'PM_1HZDPTHMQMK5H2YU0KAI****',我用这个付款方式收取付款,下面是条带的响应。 “提供的PaymentMethod以前与没有客户附件的PaymentIntent一起使用,与没有客户附件的连接帐户共享,或者与客户分离。它不能再次使用。若要多次使用PaymentMethod,必须先将其附加到客户”。 问题是,我
我正在使用条纹支付。我想把资金转给其他Stripe用户。我的帐户不在美国。 有没有办法,我可以代其他用户向我的客户收费?我必须在每一笔交易上传递应用程序API密钥,所有的付款都到应用程序帐户,但我想转移一个金额给用户,并扣除一些金额:即应用程序费用到我的应用程序帐户。
首先使用stripe验证信用卡,然后生成令牌并创建客户。我们将把代币而不是信用卡信息保存在数据库中,以后我们将根据代币或客户而不是信用卡信息向客户付款。 在javscript文件中,我们如何处理和? 因为我们已经使用 1-通过验证信用卡信息保存令牌,在这种情况下不涉及支付。金额/价格将为零(0)。 2-将此内标识保存在数据库中,但此内标识只使用一次,使用次数不多。如果以后再使用此内标识,将不起作用