简单集成Stripe总结
1.Maven依赖添加
<dependency>
<groupId>com.stripe</groupId>
<artifactId>stripe-java</artifactId>
<version>20.58.0</version>
</dependency>
2.Checkout托管
checkout托管相对来说简单一点,它的支付页是托管在Stripe的服务器上的,不需要额外的编写支付页。关键代码段(HTML):
<body>
<button id="checkout-button">支付</button>
<script src="https://js.stripe/v3/"></script>
<script type="text/javascript">
var stripe = Stripe(striep.apiKey);
var checkoutButton = document.getElementById('checkout-button');
checkoutButton.addEventListener('click', function() {
var data = ${order}
fetch('/create', {
method: 'POST',
body: JSON.stringify(data)
})
.then(function(response) {
return response.json();
})
.then(function(session) {
return stripe.redirectToCheckout({ sessionId: session.id });
})
.then(function(result) {
if (result.error) {
alert(result.error.message);
}
}).catch(function(error) {
console.error('Error:', error);
});
});
</script>
</body>
java服务端:
@RequestMapping(value = "/create", produces = "application/json")
@ResponseBody
// 单次支付
public String paySingle(HttpServletRequest request, HttpServletResponse response)throws StripeException {
Stripe.apiKey = StripeAPIKey;//查阅账号私密密匙
SessionCreateParams params = SessionCreateParams.builder()
.addPaymentMethodType(SessionCreateParams.PaymentMethodType.CARD)
.setMode(SessionCreateParams.Mode.PAYMENT)
.setSuccessUrl("successUrl") //支付成功返回页面
.setCancelUrl("CancelUrl")//支付取消返回页面
.addLineItem(SessionCreateParams.LineItem.builder().setQuantity(1L)
.setPriceData(SessionCreateParams.LineItem.PriceData.builder()
.setCurrency("usd")//货币类型
.setUnitAmount(199L)
.setProductData(SessionCreateParams.LineItem.PriceData.ProductData
.builder().setName(name).build())
.build())
.build())
.build();
Session session = Session.create(params);
Map<String, String> responseData = new HashMap<String, String>();
responseData.put("id", session.getId());
return gson.toJson(responseData);
}
效果图:
3.自定义支付
关键代码段(HTML):<body>
<div class="login layui-anim layui-anim-up">
<div class="message">支付详情</div>
<div id="darkbannerwrap"></div>
<form class="layui-form">
<input name="name" type="text" class="layui-input" value="商品名称:${order.name}"disabled>
<hr class="hr15">
<input name="mo" type="text" class="layui-input" value="金额:${order.amount}${order.type}" disabled>
<hr class="hr15">
</form>
<hr class="hr15">
<form id="payment-form">
<div id="card-element" >
</div>
<button id="submit" class="mbutton">支付</button>
</form>
</div>
<script type="text/javascript">
var stripe = Stripe('${pk}');//账号公开密匙
var elements = stripe.elements();
var style = {
base: {
color: "#32325D",
fontWeight: 500,
fontFamily: "Inter, Open Sans, Segoe UI, sans-serif",
fontSize: "16px",
fontSmoothing: "antialiased",
"::placeholder": {
color: "#CFD7DF"
}
},
invalid: {
color: "#E25950"
}
};
var card = elements.create("card",{ style: style }); //创建卡元素
card.mount("#card-element");
//实时验证卡完整性
card.on('change', function(event) {
var displayError = document.getElementById('card-errors');
if (event.error) {
} else {
}
});
//提交检测
var form = document.getElementById('payment-form');
var clientSecret = "${csecret}"; //客户端密匙由后端生成,提交支付验证
form.addEventListener('submit', function(ev) {
ev.preventDefault();
stripe.confirmCardPayment(clientSecret, {
payment_method: {
card: card,
billing_details: {
name: 'Jenny Rosen'
}
}
}).then(function(result) {
if (result.error) {
alert(result.error.message);
} else {
if (result.paymentIntent.status === 'succeeded') {
alert("成功!");
}
}
});
});
</script>
</body>
java服务端:
@RequestMapping(value = "/card")
public String cardH(HttpServletRequest request, HttpServletResponse response) throws StripeException {
Stripe.apiKey = StripeAPIKey;//查阅账户私密密匙
OrderE orderE = (OrderE) JSONObject.toBean(JSONObject.fromObject(request.getAttribute("order")), OrderE.class);
String type = orderE.getType();
Long amount = MoneyConvert.convert(orderE.getAmount(), type);
String order_id = orderE.getOrderNumber();
PaymentIntentCreateParams params = PaymentIntentCreateParams.builder().setCurrency(type)
.addPaymentMethodType("card").setAmount(amount)
.setSetupFutureUsage(PaymentIntentCreateParams.SetupFutureUsage.OFF_SESSION)
.putMetadata("order_id", order_id).build();
PaymentIntent intent = PaymentIntent.create(params);
// Map<String, String> responseData = new HashMap<String, String>();
String csecret = intent.getClientSecret();
System.out.println("sc:" + csecret);
request.setAttribute("csecret", csecret); //返回给前端的客户端密匙
request.setAttribute("order", orderE);
request.setAttribute("pk", StripeAPIKey);
return "/createCard";
}
效果图:
更多参考Stripe官网API
更多推荐
Stripe简单集成
发布评论