我对Stripe有一个奇怪的问题(在Rails上,但Rails部分可能无关紧要).
当我在生产中使用语法上有效但非工作的卡号填写我的注册表单时(例如4242424242424242),当我尝试创建令牌时,我收到此响应:
sjsonp1389885476573({
"error": {
"message": "Your card was declined.",
"type": "card_error",
"code": "card_declined"
}
}
, 402)
Run Code Online (Sandbox Code Playgroud)
在开发中我使用"始终返回card_declined"卡号(4000000000000002),Stripe将其视为非常好:
sjsonp1389885473743({
"id": "tok_3JvncLYlEZ5NMF",
"livemode": false,
"created": 1389885584,
"used": false,
"object": "token",
"type": "card",
"card": {
"id": "card_3Jvnr4MtIxzzd5",
"object": "card",
"last4": "0002",
"type": "Visa",
"exp_month": 2,
"exp_year": 2020,
"fingerprint": "dWQBpXrSXnyqoOxe",
"customer": null,
"country": "US",
"name": null,
"address_line1": null,
"address_line2": null,
"address_city": null,
"address_state": null,
"address_zip": null,
"address_country": null,
"address_line1_check": null,
"address_zip_check": null,
"cvc_check": null
}
} …Run Code Online (Sandbox Code Playgroud) 我有以下代码使用Stripe处理用户信用卡上的费用.
// Create the charge on Stripe's servers - this will charge the user's card
try {
$charge = Stripe_Charge::create(array(
"amount" => $grandTotal, // amount in cents, again
"currency" => "usd",
"card" => $token,
"description" => "Candy Kingdom Order")
);
} catch(Stripe_CardError $e) {
// The card has been declined
}
Run Code Online (Sandbox Code Playgroud)
现在我希望能够显示订单确认页面上使用的卡的最后4位数字.但我想以一种不存储完整卡号的方式来做.只是最后的4.我不知道如何检索这些信息,如果它甚至可能的话.请帮忙吗?
完全是服务器端编程的新手,我想知道有关从Stripe Payments等服务收集信息的最佳实践.
对于某些情况 - 条形客户可以拥有多张支付卡,其中一张被视为默认支付卡.
现在假设客户端点击我的服务器并希望客户XX的默认支付卡.我的问题是:我应该维护自己的条带数据库信息,还是应该直接将该请求转发到条带?
一方面,在本地存储该信息意味着我不必依赖第二个网络请求来收集该信息 - 我可以直接发回我数据库中的内容.
另一方面,在本地存储该信息意味着我需要维护更多的代码,现在我不得不担心它会反映条带上的真实数据.这个问题是可以解决的,但这样做的成本是否超过额外API调用的负面影响?
有什么想法吗?我很想听到一些意见,因为这对我来说很新鲜:)
谢谢!
我在订阅时添加发票项目时遇到问题,目前正在敲打我的头.
我在条纹上创建了一个发票项目,我希望发票项目包含在定期付款中
这是我的代码,它在第一张发票上添加了发票项目,但在下一张发票上没有.
$new_customer = Stripe_Customer::create(array(
'card' => $card,
'email' => $email,)
);
Stripe_InvoiceItem::create(array(
'customer' => $new_customer['id'],
'amount' => $additiona_charges,
'currency' => 'gbp',
'description' => 'Addtional Cities'
));
$new_customer->updateSubscription(array('plan' => $selected_plan, 'prorate' => true));
Run Code Online (Sandbox Code Playgroud)
在我目前的设置.我根据订阅时的客户选择收取额外的自定义费用,这样我需要在定期付款时添加额外费用.
它是这样的
1 Cookie - 99GBP / Per month
2 Cookies - 199GBP / Per month
3 Cookies - 300GBP / Per month
Run Code Online (Sandbox Code Playgroud)
-With Candle - +20GBP // must be included on recurring payment.
-With Icecream - +26GBP // must be included …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Stripe的新结帐功能和自定义按钮,通过AJAX POST将令牌发送到php文件,然后执行收费.不幸的是,我在从POST变量中检索令牌时遇到了一些麻烦.我希望这里的某个人能告诉我我过度复杂的事情,以及是否有更简单的方法可以做到这一点.
在客户端,我有5个按钮,可能有不同的"捐赠".这是迄今为止为此编写的js(不包括html):
$(function() {
var donationAmt = '';
var handler = StripeCheckout.configure({
key: 'pk_test_3plF76arhkygGMgwCEerThpa',
image: '/square-image.png',
token: function(token, args) {
// Use the token to create the charge with a server-side script.
// You can access the token ID with `token.id`
console.log(token)
var chargeData = {
donationAmt: donationAmt,
token: token
}
$.ajax({
url: '/link/to/php/stripeDonate.php',
type: 'post',
data: {chargeData: chargeData},
success: function(data) {
if (data == 'success') {
console.log("Card successfully charged!")
}
else {
console.log("Success Error!")
}
},
error: function(data) …Run Code Online (Sandbox Code Playgroud) 目标:我有一个html页面,你可以购买两个不同的项目.一个是5美元,另一个是10美元.我正在使用条带来处理付款.当stripe创建一个支付令牌并将其提交给我的process_charge.php时,我想从POST提交的数据中提取费用.然后我可以用这个金额打电话Stripe_Charge::create().
问题:金额没有提交到我的PHP表单,我不知道如何获得它.
我的临时解决方案:我正在销售的每一件商品都有不同的php形式.然后为每个新项目提供一个新的PHP表单! 不理想
我目前正在使用此处列出的嵌入式表单方法:https://stripe.com/docs/tutorials/checkout
我的订单页面看起来像这样.
<div class="payment-options">
<form action="process_card.php" method="POST">
<script
src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="pk_test_PUBLIC_KEY_FOR_TESTING"
data-amount="1000"
data-name="Nice Lint"
data-description="High quality belly button lint."
data-image="images/nice-lint.svg"
data-panel-label="Checkout {{amount}}"
data-label="Pay with Credit Card"
data-billing-address="true"
data-shipping-address="true">
</script>
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
所以这很有效.它接收客户的信息,他们的运输/账单地址和他们的信用卡详细信息.然后它生成一个充电令牌并将其提交给process_card.php.在那里,我可以获取令牌并执行以下操作:
if ($_POST) {
Stripe::setApiKey("sk_test_SECRET_KEY_FOR_TESTING");
try {
if (!isset($_POST['stripeToken']))
throw new Exception("The Stripe Token was not generated correctly");
Stripe_Charge::create(array("amount" => '1000'],
"currency" => "usd",
"card" => $_POST['stripeToken']));
}
catch (Exception $e) {
$error = $e->getMessage(); …Run Code Online (Sandbox Code Playgroud) 我正在使用Stripe从CodeIgniter应用程序对假定的客户执行一些测试事务.出于某种原因,要在线重新创建具有相同旧ID和名称的Stripe> Plan,或者 通过API 将Stripe客户重新输入Stripe> Customers,我必须清除测试数据.当我清除测试数据时,它会清除除日志之外的测试数据.
现在当我重新创建Stripe> Plan时会发生什么,它会自动从日志中获取已删除的客户.由于我可能已更改其凭据,因此我不需要计划中的旧客户.
那么如何在测试环境中删除/清除条带上的日志?
我想使用Stripe作为支付提供商创建付款表单.
在Stripe.js参考中,使用jQuery(包括页面中的外部脚本)描述了创建表单组件的过程.如何将它包含在我的React组件中?什么是最好的方法?到目前为止,我有以下内容:
import React, { Component } from 'react';
class PaymentForm extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
Stripe.setPublishableKey('THE-PUBLIC-KEY');
}
handleSubmit(e) {
e.preventDefault();
Stripe.card.createToken(e.currentTarget, (status, response) => {
console.log( status, response );
});
}
render() {
//THE PAYMENT FORM
}
}
Run Code Online (Sandbox Code Playgroud)
注1:我不想使用ReactScriptLoader,因为它没有主动更新.
注2:还看到危险的SetInnerHTML解决方案,我不认为这是一个好习惯.
如何将条带检出模式框中的文本从PAY更改为其他内容.
我知道我可以在弹出模态的按钮上做自定义文本.
description: 'ADD CARD',
label:'ADD CARD',
Run Code Online (Sandbox Code Playgroud)
但在实际的模态窗口.它仍然只是按下PAY.我想要它说ADD CARD.
我正在尝试将Stripe集成到我的购物车项目中.我无法提交结帐表单.我不断收到此错误消息:"必须提供来源或客户." 要么我没有正确设置我的Stripe帐户,要么我在我的javascript中缺少一些参数.我花了好几个小时才解决这个问题,但仍然无法理解.
这是来自Stripe的日志:
Parsed Request POST Body
{
"amount": "21000",
"currency": "usd",
"description": "Test Charge"
}
Run Code Online (Sandbox Code Playgroud)
响应机构
{
"error": {
"type": "invalid_request_error",
"message": "Must provide source or customer."
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的app.js.
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var expressHbs = require('express-handlebars');
var mongoose = require('mongoose');
var session = require('express-session');
var passport = require('passport');
var flash = require('connect-flash');
var validator = require('express-validator');
var …Run Code Online (Sandbox Code Playgroud) stripe-payments ×10
javascript ×4
php ×3
ajax ×1
credit-card ×1
html ×1
jquery ×1
mongodb ×1
node.js ×1
reactjs ×1
rest ×1
webhooks ×1