前言:stripe国际支付现在网上资料很少,且不支持中国,所以如果要用需要去支持的国家注册商户,官网的java demo是用的spark框架,我这里用的spring,验签需要手动验签,且不能用官网的方法
正文:
支付宝文档地址:
做了个简单的时序图
关于配置:
回调地址配置,可以每个触发事件都配置不一样的url,也可以都配置一个,我只配置了一个
获得source时候发送请求用到的公匙:
代码:
<!-- stripe支付官方包 -->
<dependency>
<groupId>com.stripe</groupId>
<artifactId>stripe-java</artifactId>
<version>7.26.0</version>
</dependency>
其实只有三个接口:
1.给前端准备数据
2.授权完回调地址
3.回调接口
回调接口:
常量类:
service:
h5页面:
createSource:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--官方js--> <script src="https://js.stripe.com/v3/"></script> <script type="text/javascript" src="/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function () { var amount = $("#amount").val(); var returnUrl = $("#returnUrl").val(); var currency = $("#currency").val(); var type = $("#type").val(); var userId = $("#userId").val(); var orderNum = $("#orderNum").val(); var stripe = Stripe($(#stripe).val()); stripe.createSource({ type: type, amount: amount, currency: currency, statement_descriptor : orderNum, owner: { name: userId, }, redirect: { return_url: returnUrl }, }).then(function (result) { // handle result.error or result.source if (result.source != null) { if(result.source.type == "wechat"){ window.location.href=result.source.wechat.qr_code_url; }else { window.location.href=result.source.redirect.url; } } else { alert(result.error.message); } }); }); </script> </head> </head> <body> <h1>跳转授权页面中。。。。</h1> <input type="hidden" id="stripe" th:value="${stripe}"> <input type="hidden" id="type" th:value="${dto.type}"> <input type="hidden" id="amount" th:value="${dto.amount}"> <input type="hidden" id="returnUrl" th:value="${dto.returnUrl}"> <input type="hidden" id="currency" th:value="${dto.currency}"> <input type="hidden" id="userId" th:value="${dto.userId}"> <input type="hidden" id="orderNum" th:value="${dto.orderNum}"> </body> </html>
temp.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="/jquery.min.js"></script> </head> <body> <h1>您的订单授权已受理,正在等待第三方处理,请稍后查询订单状态</h1> </body> </html>
这里遇到一个特别坑的地方:就是验签的时候官网给的demo是:
用到spark,以为引入spark pom就行了,结果一直不行,后来联系他们客服,然后给了我个irc的地址让我跟他们技术人员谈,聊了好久才知道,原来他们用的是spark框架不能和spring拼凑使用,聊天内容:
聊天知道了几个重要内容:
如果不响应会持续回调72小时,时间递增的回调
验签获取payload 的获取关键代码:
InputStream inputStream = request.getInputStream();
byte[] bytes = IOUtils.toByteArray(inputStream);
String payload = new String(bytes, "UTF-8");
如果有什么不懂欢迎留言!