Stripe实现信用卡支付

不做介绍stripe支付介绍,就讲讲逻辑和实现和代码,要看stripe介绍自己百度一大堆。
ssm三层架构实现。小白还望指教,谢谢大佬们。

屁话少说 逻辑

1.讲讲逻辑: 点击商品然后下单创建订单,把订单号封装成自定义参数传给stripe在调起支付,所有东西都有stripe实现。最后使用webhook挂钩实现回调操作拿到自定义参数处理你的业务逻辑;

实现

2.前端实现:初始化页面,找到官网案例图(https://stripe.com/docs/payments/integration-builder)根据下面图下载。这是stripe测试的,如果想调起支付就得把自己key和秘钥换上去。 stripe 官网都实现了前端,样式根据自己需求去调,这里我讲讲js实现。

// 直贴关键代码
var stripe_pk = "pk_livex9FxxxxhI9Yj2";//这是你的pk_key ,去开发模块里面找key和秘钥
var stripe = Stripe(stripe_pk);//初始化stripe  //这个不是调起支付 而是初始化这个页面 ,也可以说你可以不用管调起支付, stripe会帮你调起,用户只要输入卡号就行
fetch("/create-payment-intent", {//打开html 页面就会去请求 你的‘/create-payment-intent’后台 method: "POST",headers: {"Content-Type": "application/json"},
//传过去的参数 price 价格最低0.5美元 单位分 , 邮箱 ,订单号 ,其他body: JSON.stringify({"price":money,"order_no":order_no,"email":email,"title":title})
})
//支付成功后调取 自己根据需求改
var orderComplete = function(paymentIntentId) {loading(false);document.querySelector(".result-message a").setAttribute("href","./order?paymentIntentId=" + paymentIntentId //成功调取地址 );document.querySelector(".result-message").classList.remove("hidden");document.querySelector("button").disabled = true;
};


3.后端实现:初始化页面

 //xml 包 // 控制层@ResponseBody@RequestMapping(value = {"/create-payment-intent"}, method = RequestMethod.POST)public String paymentOrder(@RequestBody Map<String, String> map,HttpServletRequest request, HttpServletResponse response) throws StripeException {return service.payments(map,request,response);}//service业务处理public String payments(Map<String, String> map,HttpServletRequest request, HttpServletResponse response) throws StripeException {staticFiles.externalLocation(Paths.get("").toAbsolutePath().toString());Stripe.apiKey = "sk_live_51HZCAR00sBFiQi4h";//自己sk_key 开发里面有自己找PaymentIntentCreateParams createParams = new PaymentIntentCreateParams.Builder().setAmount(Long.decode(map.get("price")))//设置金额.setCurrency("twd")//设置货币.setDescription("购买"+map.get("title")+",订单号:"+ map.get("order_no"))//描述.putMetadata("order_id", map.get("order_no"))//自定义参数.putMetadata("money", map.get("price"))//自定义参数.addPaymentMethodType("card").setReceiptEmail(map.get("email"))//通知这个邮箱.build();//还有很多参数 自己看中文文档去PaymentIntent intent = PaymentIntent.create(createParams);CreatePaymentResponse paymentResponse = new CreatePaymentResponse(intent.getClientSecret());return gson.toJson(paymentResponse);}

4.webhook挂钩回调
首先你要在stripe找到开发者下面webhook 配置你的回调地址
我这里已经加过了还是给你们添加端点。看图二
保存后点击去里面有个密钥签名点击显示复制回调要用到。

 //控制层 回调不用返回 能走得通就是成功@ResponseBody@RequestMapping(value = {"/stripe_events"}, method = RequestMethod.POST)public void stripe_events(HttpServletRequest request, HttpServletResponse response) {service.stripe_events(request,response);}//servicepublic void stripe_events(HttpServletRequest request, HttpServletResponse response) {try {String endpointSecret = "whsec_xxxgx92OjXdBf1lc2c";//webhook秘钥签名InputStream inputStream = request.getInputStream();ByteArrayOutputStream output = new ByteArrayOutputStream();byte[] buffer = new byte[1024*4];int n = 0;while (-1 != (n = inputStream.read(buffer))) {output.write(buffer, 0, n);}byte[] bytes = output.toByteArray();String payload = new String(bytes, "UTF-8");String sigHeader = request.getHeader("Stripe-Signature");Event event = Webhook.constructEvent(payload, sigHeader, endpointSecret);//验签,并获取事件PaymentIntent intent = (PaymentIntent) event.getDataObjectDeserializer().getObject().get();switch(event.getType()) {case "payment_intent.created"://创建订单 这里事件就是图二选着的事件break;case "payment_intent.canceled"://取消订单break;case "payment_intent.succeeded"://支付成功if(intent.getStatus().equals("succeeded")) {Map<String,String> metaData = intent.getMetadata();//自定义传入的参数String order_id = metaData.get("order_id");//自定义订单号/*********** 根据订单号从数据库中找到订单,并将状态置为成功 *********/}break;case "payment_intent.payment_failed"://支付失败System.out.println("Failed: " + intent.getId());break;default:break;}} catch (Exception e) {System.out.println("stripe异步通知(webhook事件)"+e);}}

stripe 我也是头次接触也不太懂,错了还望大家指出错误。

最后讲讲:遇到的bug
1.stripe 需要安全支付,就是如果你用域名或者发布到线上,必须是https否则报错调不起来当时我也找了半天。无赖把改成http改成https,在配置完https安全证书的访问一直访问不了,也不是访问不行,讲域名和证书不匹配,我又找半天,心态爆炸。最后发现是sdn多配置 了点东西,比如 xxx.cn,被解析成 xxx.cn.tw.com这样,把这个删掉就ok。
2.回调那一块犯了个不小心错误:我是找错了回调事件,如果配置了多个回调地址,别的回调地址也会走你的回调地址,所以当时还以为自定义的参数会变,当场懵逼,最后发现找错事件 害。
3.java 案例demo地址:https://pan.baidu.com/s/11iXLX1sR3hVn1Jd1-XkrPw 提取:ynpy
demo案例切勿商用,仅供参考。切记!切记!切记!

java实现Stripe信用卡支付相关推荐

  1. Stripe 银行卡支付功能初步指南(Java)

    Stripe 国外银行卡支付功能指南(Java) 简介 编写这篇文章的目的就是~~没有什么目的.网上关于stripe银行卡支付代码很多,有写得很好的,但是太多太杂了,不系统.所以我就结合项目中实际应用 ...

  2. Stripe 银行卡支付(Java)

    Stripe 银行卡支付(Java) 一:概述 参考博客:https://blog.csdn.net/Sunshine_Moon/article/details/113867159?utm_mediu ...

  3. JAVA接入STRIPE支付教程(测试环境),STRIPE支付的调用以及STRIPE WEBHOOK回调

    一.环境准备 1.注册 2.密钥 3.WEBHOOK回调 二.核心代码 1.配置API.key以及webhook.key 2.支付demo 3.WEBHOOK回调 一.环境准备 1.注册 STRIPE ...

  4. 如何快速对接Stripe国际支付系统

    Stripe国际支付介绍 Stripe是由20多岁的两兄弟Patrick Collison和John Collison创办的Stripe为公司提供网上支付的解决方案.Stripe向服务的公司收取每笔交 ...

  5. MFCard:易用的信用卡支付集成类库

    原文链接:https://github.com/MobileFirstInc/MFCard MFCard:易用的信用卡支付集成类库.# 为开源点赞# -- 由 SwiftLanguage 分享 MFC ...

  6. stripe国际支付(对接支付宝、微信)

    前言:stripe国际支付现在网上资料很少,且不支持中国,所以如果要用需要去支持的国家注册商户,官网的java demo是用的spark框架,我这里用的spring,验签需要手动验签,且不能用官网的方 ...

  7. Java中的微信支付(2):API V3 微信平台证书的获取与刷新

    1. 前言 在Java 中的微信支付(1):API V3 版本签名详解一文中胖哥讲解了微信支付 V3 版本 API 的签名,当我方(你自己的服务器)请求微信支付服务器时需要根据我方的API 证书对参数 ...

  8. 微信APP支付(基于Java实现微信APP支付)

    步骤: 导入maven依赖 <!--微信支付--><dependency><groupId>com.github.wxpay</groupId>< ...

  9. asp.net paypal信用卡支付功能

    前段时间有个客户网站需要用到信用卡支付功能,客户有个Website Payments Pro的帐号,第一次做这东西花了很多时间在上面,已做好运行了一段日子, 现在总结一下: 1. 先注册一个paypa ...

最新文章

  1. 逆变器的技术创新 让光伏电站更具发展前景
  2. 深入浅出Java垃圾回收机制
  3. 43、Java动态代理一——动态类Proxy的使用
  4. 当Project xCloud落地移动终端,云游戏靠手游撑起“当打之年”?
  5. vue 3.0 正式版_Vuejs 3 Release:One Piece. Vuejs 3.0 正式版发布!代号:海贼王
  6. c++指针总结(易混淆)
  7. OpenStack运维(二):OpenStack计算节点的故障和维护
  8. 调用模块里的action_初级测试人员进阶必备Python编码模块,看过的都说好
  9. Spring入门(三)
  10. html关于圣诞节主题的网页,灵感: 8个以圣诞节为主题的网站欣赏
  11. EA(enterprise architect)左侧工作空间隐藏,如何打开
  12. 干货分享!简单的python爬取网站数据。
  13. 常微分方程数值解——差商、欧拉公式详细推导及代码实现
  14. 《c语言程序设计》实验报告,C语言程序设计实验实验报告_wenkub
  15. 写给大家看的机器学习书【Part3】直观易懂的感知机学习算法PLA
  16. GB编码,汉字在编译器中数值
  17. cocos2d-x使用第三方的TTF字体库
  18. 在Unity中获得一个物体的所有子物体包括孙物体。
  19. WebAdmin管理平台首发
  20. 传统医药厂家如何进行社交电商+新零售+私域流量,附方案讲解

热门文章

  1. MEX and Increments-(先拿一些的贪心思维)
  2. 10019---mybatis的缓存机制(一级缓存二级缓存和刷新缓存)
  3. C|倒三角(trangle)
  4. 安卓桌面壁纸_教你一分钟定制你的个性锁屏桌面壁纸(安卓+ios)
  5. Java成长第五集--面向对象设计的五大原则
  6. 支付宝、微信、QQ 收款二维码三合一
  7. 3.8编写程序 ,要求用户从键盘输入一个年份,程序输出改年出生的人的生肖。中国生肖基于12年一个周期,Java
  8. pyCharm最新2018激活码
  9. 解决Powershell前面没有base,无法激活虚拟环境问题
  10. Gnome桌面的录屏插件easyscreencast