当前位置: 首页 > news >正文

网站建设中html网页天河做网站系统

网站建设中html网页,天河做网站系统,北京米兰广告设计有限公司,网站开发的软 硬件环境标准Stripe是一家美国科技公司#xff0c;成立于2010年#xff0c;由爱尔兰兄弟Patrick Collison和John Collison共同创立。该公司致力于提供高效、简洁的互联网支付收款服务#xff0c;为开发者或商家提供支付API接口或代码#xff0c;使商家的网站、移动APP支持信用卡付款。S…Stripe是一家美国科技公司成立于2010年由爱尔兰兄弟Patrick Collison和John Collison共同创立。该公司致力于提供高效、简洁的互联网支付收款服务为开发者或商家提供支付API接口或代码使商家的网站、移动APP支持信用卡付款。Stripe被誉为“移动时代的PayPal”因其简便的支付方式而受到广泛欢迎。 Stripe 总共有三种支付方式 1、Stripe Checkoutpay links 创建支付链接 2、payment intent后端预下单返回秘钥前端确定订单 3、前端创建支付token 后端创建Charge返回支付结果链接 Stripe接口调用时序图 #mermaid-svg-mFD1vJgpQFFGsQ0L {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-mFD1vJgpQFFGsQ0L .error-icon{fill:#552222;}#mermaid-svg-mFD1vJgpQFFGsQ0L .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-mFD1vJgpQFFGsQ0L .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-mFD1vJgpQFFGsQ0L .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-mFD1vJgpQFFGsQ0L .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-mFD1vJgpQFFGsQ0L .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-mFD1vJgpQFFGsQ0L .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-mFD1vJgpQFFGsQ0L .marker{fill:#333333;stroke:#333333;}#mermaid-svg-mFD1vJgpQFFGsQ0L .marker.cross{stroke:#333333;}#mermaid-svg-mFD1vJgpQFFGsQ0L svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-mFD1vJgpQFFGsQ0L .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-mFD1vJgpQFFGsQ0L text.actortspan{fill:black;stroke:none;}#mermaid-svg-mFD1vJgpQFFGsQ0L .actor-line{stroke:grey;}#mermaid-svg-mFD1vJgpQFFGsQ0L .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-mFD1vJgpQFFGsQ0L .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-mFD1vJgpQFFGsQ0L #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-mFD1vJgpQFFGsQ0L .sequenceNumber{fill:white;}#mermaid-svg-mFD1vJgpQFFGsQ0L #sequencenumber{fill:#333;}#mermaid-svg-mFD1vJgpQFFGsQ0L #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-mFD1vJgpQFFGsQ0L .messageText{fill:#333;stroke:#333;}#mermaid-svg-mFD1vJgpQFFGsQ0L .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-mFD1vJgpQFFGsQ0L .labelText,#mermaid-svg-mFD1vJgpQFFGsQ0L .labelTexttspan{fill:black;stroke:none;}#mermaid-svg-mFD1vJgpQFFGsQ0L .loopText,#mermaid-svg-mFD1vJgpQFFGsQ0L .loopTexttspan{fill:black;stroke:none;}#mermaid-svg-mFD1vJgpQFFGsQ0L .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-mFD1vJgpQFFGsQ0L .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-mFD1vJgpQFFGsQ0L .noteText,#mermaid-svg-mFD1vJgpQFFGsQ0L .noteTexttspan{fill:black;stroke:none;}#mermaid-svg-mFD1vJgpQFFGsQ0L .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-mFD1vJgpQFFGsQ0L .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-mFD1vJgpQFFGsQ0L .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-mFD1vJgpQFFGsQ0L .actorPopupMenu{position:absolute;}#mermaid-svg-mFD1vJgpQFFGsQ0L .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-mFD1vJgpQFFGsQ0L .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-mFD1vJgpQFFGsQ0L .actor-man circle,#mermaid-svg-mFD1vJgpQFFGsQ0L line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-mFD1vJgpQFFGsQ0L :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 后台服务 Stripe 【初始化】客户端 StripeClient使用从Stripe平台获取的私钥 初始化成功创建 StripeClient 实例 【创建产品】 client.products().create() 创建产品成功返回产品信息 【创建产品价格】 client.prices().create()给产品创建指定币种的价格 创建产品价格成功返回价格信息 【下单】 client.checkout().sessions().create() 返回订单信息包含支付链接 session.getUrl() 和订单id 浏览器打开支付链接【完成支付】 支付完成跳转到完成页面 【支付完成回调】webhook请求 checkout.session.completed 事件返回 Session 【支付成功回调】webhook请求 charge.succeeded 事件返回 Charge 【查询订单】client.charges().retrieve(chargeId) 返回订单信息 【退款】client.refunds().create()传入 chargeId 返回退款订单信息退款ID refundId 【查询退款订单】 client.refunds().retrieve(refundId) 或 client.refunds().list() 返回退款订单信息 后台服务 Stripe 0、初始化客户端 StripeClient client StripeClient.builder().setConnectTimeout(30 * 1000).setReadTimeout(80 * 1000).setApiKey(sk_test_51PtO7DC6XhwanSnNvGezNPc4hsL2F****).build();1、产品 查询或创建新产品。 每次交易传入产品名称或描述自动查询是否已经存在如果存在则直接使用如果不存在则新建产品。 private Product getProduct(StripeOrder stripeOrder) throws StripeException {ProductSearchParams searchParams ProductSearchParams.builder().setQuery(active:true AND name: stripeOrder.getSubject() AND description: stripeOrder.getBody() ).setLimit(1L).build();StripeSearchResultProduct result client.products().search(searchParams);Product product;if (result ! null !result.getData().isEmpty()) {product result.getData().stream().findFirst().get();} else {//创建产品 https://stripe.com/docs/api/products/createProductCreateParams params ProductCreateParams.builder().setDescription(stripeOrder.getBody()).setName(stripeOrder.getSubject()).build();product client.products().create(params);}return product;}2、价格 根据产品ID创建对应币种的价格指定 lookupKey 价格币种产品ID作为价格关键字用于查询是否已经存在。如果价格存在则直接使用如果不存在则新增新的价格。 private Price getPrice(StripeOrder stripeOrder, String productId) throws StripeException {Long unitAmount Util.conversionCentAmount(stripeOrder.getPrice());String lookupKey unitAmount stripeOrder.getCurrencyCode() productId;PriceSearchParams params PriceSearchParams.builder().setQuery(active:true AND product: productId AND currency: stripeOrder.getCurrencyCode() AND lookup_key: lookupKey ).build();StripeSearchResultPrice result client.prices().search(params);Price price;if (result ! null !result.getData().isEmpty()) {price result.getData().stream().findFirst().get();} else {//创建价格 https://stripe.com/docs/api/prices/create // PriceCreateParams.Recurring recurring PriceCreateParams.Recurring.builder() // .setInterval(PriceCreateParams.Recurring.Interval.MONTH).build();PriceCreateParams priceCreateParams PriceCreateParams.builder().setCurrency(stripeOrder.getCurrencyCode()).setProduct(productId).setLookupKey(lookupKey).setUnitAmount(unitAmount) // .setRecurring(recurring).build();price client.prices().create(priceCreateParams);}return price; }3、创建支付 根据上次返回的价格信息创建新的支付对象这里指定银行卡支付也可以指定别的支付方式Stripe支持几十种支付方式可以根据不同国家选择具体可以在这里查看 下面通过 client.checkout().sessions().create() 创建支付取得支付链接在浏览器直接打开即可支付。 public MapString, Object orderInfo(PayOrder order) {StripeOrder stripeOrder (StripeOrder) order;try {Product product getProduct(stripeOrder);Price price getPrice(stripeOrder, product.getId());//创建支付信息 得到urlSessionCreateParams sessionCreateParams SessionCreateParams.builder().setMode(SessionCreateParams.Mode.PAYMENT).addPaymentMethodType(SessionCreateParams.PaymentMethodType.CARD) // .addPaymentMethodType(SessionCreateParams.PaymentMethodType.ALIPAY).setSuccessUrl(payConfigStorage.getReturnUrl()).setCancelUrl(payConfigStorage.getCancelUrl()).setCustomer(stripeOrder.getCustomer()).setClientReferenceId(stripeOrder.getClientReferenceId()).setCustomerEmail(stripeOrder.getCustomerEmail()).addLineItem(SessionCreateParams.LineItem.builder().setQuantity(1L).setPrice(price.getId()).build()).putMetadata(outTradeNo, stripeOrder.getOutTradeNo()).build();Session session client.checkout().sessions().create(sessionCreateParams);LOG.info(session:{}, JSON.toJSONString(session));return preOrderHandler(Collections.singletonMap(paymentLink, session.getUrl()), order);} catch (StripeException e) {throw new RuntimeException(e);} }4、打开支付链接完成支付 输入Stripe平台提供的测试卡信息完成支付 testexample.com 4242 4242 4242 4242 12/34 567 Zhang San United States 123455、支付订单查询 传入回调信息中得到的chargeId查询订单状态。在返回的json数据了包含支付平台receiptUrl public MapString, Object query(AssistOrder assistOrder) {try {Charge charge client.charges().retrieve(assistOrder.getTradeNo());// 使用Hutool的BeanUtil将User对象转换为Mapreturn BeanUtil.beanToMap(charge);} catch (Exception e) {throw new RuntimeException(e);} }支付凭证 6、退款 传入回调信息中得到的chargeId提交退款请求返回退款订单信息包含退款订单Id可用于查询退款订单 public RefundResult refund(RefundOrder refundOrder) {RefundCreateParams params RefundCreateParams.builder().setCharge(refundOrder.getTradeNo()).build();try {Refund refund client.refunds().create(params);LOG.info(refund:{}, JSON.toJSONString(refund));StripeRefundResult refundResult new StripeRefundResult(refund, refundOrder.getTradeNo());refundOrder.setRefundNo(refundResult.getRefundNo());return refundResult;} catch (StripeException e) {throw new RuntimeException(e);} }7、退款查询 传入回调信息中得到的chargeId查询退款订单也可以通过退款订单Id查询。 public MapString, Object refundquery(RefundOrder refundOrder) {RefundListParams params RefundListParams.builder().setCharge(refundOrder.getTradeNo()).build();try {StripeCollectionRefund result client.refunds().list(params);if (!result.getData().isEmpty()) {Refund refund result.getData().stream().findFirst().get();// 使用Hutool的BeanUtil将User对象转换为Mapreturn BeanUtil.beanToMap(refund);}} catch (StripeException e) {throw new RuntimeException(e);}return null; }8、回调通知 登录Stripe平台在https://dashboard.stripe.com/workbench/webhooks中配置Webhook菜单地址“开发人员-Webhook”。 Webhook回调代码示例 public class StripePayMessageHandler implements PayMessageHandlerPayMessage, StripePayService {private final Logger LOG LoggerFactory.getLogger(getClass());private final String endpointSecret whsec_HlzC2omyh4V4X3BCgMx5PScTCmwZpvAC;//webhook秘钥签名Overridepublic PayOutMessage handle(PayMessage payMessage, MapString, Object context, StripePayService payService) throws PayErrorException {MapString, Object message payMessage.getPayMessage();NoticeParams noticeParams (NoticeParams) context.get(noticeParams);try {String sigHeader noticeParams.getHeader(Stripe-Signature);Event event Webhook.constructEvent(noticeParams.getBodyStr(), sigHeader, endpointSecret);//验签并获取事件StripeObject eventObj event.getDataObjectDeserializer().getObject().get();LOG.info(EventType:{}, Event:{}, event.getType(), JSON.toJSONString(eventObj));PaymentIntent intent;Charge charge;String outTradeNo;String chargeId;String receiptUrl;switch (event.getType()) {case charge.succeeded://支付成功//TODO 支付成功处理业务逻辑charge (Charge) eventObj;// 取得 chargeId 在退款时使用chargeId charge.getId();receiptUrl charge.getReceiptUrl();message.put(trade_no, chargeId);LOG.info(支付成功 Charge, chargeId:{}, receiptUrl:{}, chargeId, receiptUrl);break;case checkout.session.completed:// 通过支付链接 支付完成//TODO 支付完成处理业务逻辑Session session (Session) eventObj;outTradeNo session.getMetadata().get(outTradeNo);//自定义订单号LOG.info(支付完成 Session 订单号为{}, outTradeNo);message.put(out_trade_no, outTradeNo);break;case charge.refunded://退款成功charge (Charge) eventObj;if (charge.getStatus().equals(succeeded)) {//TODO 退款成功处理业务逻辑chargeId charge.getId();receiptUrl charge.getReceiptUrl();message.put(trade_no, chargeId);LOG.info(退款成功, chargeId:{}, receiptUrl:{}, chargeId, receiptUrl);}break;case checkout.session.expired://过期break;case payment_intent.created://创建订单 这里事件就是图二选着的事件break;case payment_intent.canceled://取消订单break;case payment_intent.succeeded://支付成功intent (PaymentIntent) eventObj;MapString, String metaData intent.getMetadata();//自定义传入的参数outTradeNo metaData.get(outTradeNo);//自定义订单号message.put(out_trade_no, outTradeNo);LOG.info(支付成功 payment_intent 订单号为{}, outTradeNo);//*********** 根据订单号从数据库中找到订单并将状态置为成功 *********//*break;case payment_intent.payment_failed://支付失败intent (PaymentIntent) eventObj;LOG.info(Failed: intent.getId());break;default:break;}} catch (Exception e) {LOG.error(stripe异步通知webhook事件, e);}// TODO 支付确认逻辑处理return payService.successPayOutMessage(payMessage);} }参考 https://docs.stripe.com/apihttps://docs.stripe.com/jshttps://docs.stripe.com/webhookshttps://docs.stripe.com/search#query-fields-for-products
http://www.dnsts.com.cn/news/6435.html

相关文章:

  • 起名网站是怎么做的免费下载个人简历表格
  • 北京网站如何制作课程网站的设计
  • 上海网站制作商如何自己做公众号
  • 深圳网站建制作如何分析百度指数
  • 园林古建设计网站移动端app下载
  • 天津网站优化步骤crm管理系统排名
  • 简易手机站山东网络建站推广
  • 津南网站建设潍坊市建设厅网站
  • 怎么有自己的网站wordpress 角色权限表
  • 网站建设哪家强注册一个域名需要多少钱
  • 免费网站注册申请买国外的东西在哪个平台
  • 四川省省建设厅网站中文绿色环保网站模板
  • 怎么进行网站设计和改版网页设计网站名称
  • 北京网站备案拍照地址鼓楼yzipi主题wordpress
  • 网站服务商查询怎么制作购物网站
  • 江苏常州建设局网站网站建设汽车后市场解决方案
  • 营口建网站的公司wordpress宾馆
  • 一个人做商城网站网站设计分析报告
  • 做网站哪个公司可以做微商城手机网站设计
  • 阿里云服务器上做淘宝客网站wordpress 开源地图插件
  • 微网站开发软件p2p网贷网站建设哪家好
  • 一个网站域名多少钱移动端软件开发
  • 刚建设的网站如何推广网站系统开发毕业设计
  • 俄语网站制作四川城乡与住房建设部网站
  • 网站开发制作公司中建二局官网
  • 泉州网站建设托管广告优化师怎么学
  • 深圳营销型网站建设公司选择哪家好学校网站页面设计
  • 网站建设验收单小说网站开发的实际意义
  • 绵竹移动网站建设wordpress邮箱修改
  • 门户移动网站建设网站公司做销售怎么样