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

网站开发有关书籍做刷网站怎么赚钱

网站开发有关书籍,做刷网站怎么赚钱,有什么网站可以做设计兼职的,做网站买别人的服务器图片被吞了可以来这里看#xff1a;https://juejin.cn/post/7346388511338381364 1. 准备事项 Stripe 账号域名以及配套的网站Stripe 账号付款信息公钥和私钥 2. 配置产品以及价格 可以通过 API 或者 Stripe 管理后台来进行配置 产品#xff1a;就是商品#xff0c;只需…图片被吞了可以来这里看https://juejin.cn/post/7346388511338381364 1. 准备事项 Stripe 账号域名以及配套的网站Stripe 账号付款信息公钥和私钥 2. 配置产品以及价格 可以通过 API 或者 Stripe 管理后台来进行配置 产品就是商品只需要配置一个名称和一个类型用于计算税额 价格价格有定期和一次性两种收费方式定期其实就是订阅。价格实体非常灵活适合多种场景一般就使用固定费率的一次性付款和定期付款。 3. 设计一下流程 4. 代码集成 4.1 依赖导入 stripe/stripe-java: Java library for the Stripe API. (github.com) dependency groupIdcom.stripe/groupId artifactIdstripe-java/artifactId version23.3.0/version /dependency4.2 配置 # 公钥 stripe.keypk_test_51Nxxxx # 私钥 stripe.secretsk_test_51xxxx # webhook 密钥签名 stripe.endpoint_secretwhsec_TcxxxxData Configuration ConfigurationProperties(prefix stripe) public class StripeConfig { private String key;private String secret;private String endpointSecret;Bean public StripeClient stripeClient() {return new StripeClient(secret);} } 4.3 创建收银 Stripe 中有两种方式能进行收款Stripe-hosted page 和 Embedded form。 Stripe-hosted page指的是收费的时候跳转到 Stripe 提供的一个收银台页面进行付款。 Embedded form则是需要高度自定义页面的产品使用或者是客户端。 文档Stripe Checkout | Stripe 文档 Demo: docs.stripe.com/checkout/quickstart Web 端一般使用 Stripe-hosted page 来简化开发像 ChatGPT 也是使用这种方式。 后端创建收银台 public CheckoutCreateResult create(CheckoutCreateRequest request) {// 查询或者创建客户String customerId queryOrCreateCustomer();// 查询价格idString priceId queryPrice();// 构建成功URL和取消URLUriComponents successUrl UriComponentsBuilder.fromHttpUrl(request.getSuccessUrl()).queryParam(checkout_id, checkoutId).queryParam(receipt, {CHECKOUT_SESSION_ID}) // 模板变量 https://stripe.com/docs/payments/checkout/custom-success-page#modify-success-url.build();UriComponents cancelUrl UriComponentsBuilder.fromHttpUrl(request.getCancelUrl()).queryParam(checkout_id, checkoutId).build();// 创建checkout 收银台SessionCreateParams.Builder builder SessionCreateParams.builder().setSuccessUrl(successUrl.toUriString()).setCancelUrl(cancelUrl.toUriString())// 指定付款用户.setCustomer(customerId)// 自动扣税.setAutomaticTax(SessionCreateParams.AutomaticTax.builder().setEnabled(false).build())// 购买项目和订单明细类似.addLineItem(SessionCreateParams.LineItem.builder()// 数量.setQuantity(request.getCount().longValue())// 价格.setPrice(priceId).build())// 元数据额外附加的数据。 webhook 通知的时候可以取出来.putAllMetadata(ImmutableMap.of(MetaDataKey.CHECKOUT_ID, checkoutId,MetaDataKey.APP_ID, request.getAppId()))// 是否允许优惠码.setAllowPromotionCodes(Boolean.TRUE);if (productPrice.getPriceType() PriceTypeEnum.RECURRING) {// 定期价格最后会创建订阅对象。可以为付款成功后生成的订阅对象设置一些数据builder.setMode(SessionCreateParams.Mode.SUBSCRIPTION).setSubscriptionData(// 试用期SessionCreateParams.SubscriptionData.builder().putMetadata(MetaDataKey.APP_ID, request.getAppId()).build());} else {// 一次性价格最后会创建付款对象。可以为付款成功后生成的付款对象设置一些数据builder.setMode(SessionCreateParams.Mode.PAYMENT).setPaymentIntentData(SessionCreateParams.PaymentIntentData.builder().putMetadata(MetaDataKey.APP_ID, request.getAppId()).build());}SessionCreateParams params builder.build();/*.addDiscount( // 优惠券SessionCreateParams.Discount.builder().setCoupon(bBfCjIMt).build())*/Session session null;try {session stripeClient.checkout().sessions().create(params);} catch (StripeException e) {log.error(failed to create checkout session. {}, {}, {}, request, customerId, priceId, e);throw new RuntimeException(failed to create checkout session: e.getMessage());}return new CheckoutCreateThirdResult()// checkout session 的 id.setId(session.getId())// 可供用户进行付款的页面链接前端直接打开即可跳转到Stripe.setTokenThird(session.getUrl()); }4.4 完成收银 4.4.1 前端提交 用户付款完成后Stripe 会将页面重定向到创建 Checkout Session 时设置的 success_url。 页面可以从URL中获取到订单id和sessionId来进一步调用后端接口完成收银。 4.4.2 接收 Webhook 用户付款完成后Stripe 的后台还会将对应的事件通过 WebHook 的方式 POST 我们预先提供的接口。 第一步先提供一个 Webhook 回调接口 本地测试的方式不是很友好可以使用内网穿透工具将请求转到本地来进行调试 RestController Slf4j public class WebhookController {Resourceprivate StripeConfig stripeConfig;Resourceprivate ListWebhookHandler webhookHandlers;PostMapping(/webhook)public Object handle(RequestHeader(Stripe-Signature) String sigHeader, RequestBody String payload) {log.info(stripe webhook payload: {}, payload);return webhook(payload, sigHeader, stripeConfig.endpointSecret());}private Object webhook(String payload, String sigHeader, String endpointSecret) {Event event;try {event Webhook.constructEvent(payload, sigHeader, endpointSecret);StripeEventType stripeEventType StripeEventType.convert(event.getType());webhookHandlers.stream().filter(webhookHandler - webhookHandler.supports(stripeEventType)).findFirst().get().handle(event);} catch (Exception e) {log.error(failed to handle webhook event. {}, {}, sigHeader, payload, e);return ResponseEntity.status(500).body(e.getMessage());}return ResponseEntity.ok().body(OK);} }Stripe 事件枚举 public enum StripeEventType implements EnumBase { // 收银完成 CHECKOUT_SESSION_COMPLETED(checkout.session.completed), // 退款 CHARGE_REFUNDED(charge.refunded), IGNORED(); private final String message; StripeEventType(String message) { this.message message; } public static StripeEventType convert(String message) { for (StripeEventType value : StripeEventType.values()) { if (StringUtils.equals(value.message(), message)) { return value; } } return IGNORED; } Override public String message() { return this.message; } Override public Number value() { return null; } }Webhook 处理器 public interface WebhookHandler { boolean supports(StripeEventType stripeEventType); void handle(Event event) throws EventDataObjectDeserializationException; }public abstract class WebhookHandlerBaseT implements WebhookHandler { SuppressWarnings(unchecked) Override public void handle(Event event) throws EventDataObjectDeserializationException { EventDataObjectDeserializer dataObjectDeserializer event.getDataObjectDeserializer(); StripeObject stripeObject dataObjectDeserializer.deserializeUnsafe(); handle((T) stripeObject); } public abstract void handle(T stripeObject); }Component Slf4j public class WebhookHandlerDefaultImpl implements WebhookHandler { Override public boolean supports(StripeEventType stripeEventType) { return stripeEventType.equals(StripeEventType.IGNORED); } Override public void handle(Event event) { log.info(ignored event: {} {}, event.getType(), event.toJson()); } }Component Slf4j public class WebhookHandlerCheckoutSessionCompletedImpl extends WebhookHandlerBaseSession {Overridepublic boolean supports(StripeEventType stripeEventType) {return stripeEventType.equals(StripeEventType.CHECKOUT_SESSION_COMPLETED);}Overridepublic void handle(Session session) {// 完成收银} }Component Slf4j public class WebhookHandlerChargeRefundImpl extends WebhookHandlerBaseCharge {Overridepublic boolean supports(StripeEventType stripeEventType) {return stripeEventType.equals(StripeEventType.CHARGE_REFUNDED);}Overridepublic void handle(Charge charge) {// 订单退款} }配置 Stripe Webhook 管理平台 – FeloTranslator – Stripe [Test] 4.4.3 完成收银 步骤流程 判断对应的订单是否存在订单所有者对应的Stripe checkout session 状态是否正常订单完成发送订单完成事件事件订阅者处理后续流程 protected Session checkCheckoutSession(String sessionId) {// 查询是否完成Session session null;try {session stripeClient.checkout().sessions().retrieve(sessionId);} catch (StripeException e) {log.error(failed to query checkout session. {}, sessionId, e);throw new RuntimeException(failed to query checkout session: sessionId);}// https://stripe.com/docs/api/checkout/sessions/object#checkout_session_object-payment_statusString status session.getPaymentStatus();if (StringUtils.notEquals(status, paid)) {throw new RuntimeException(Checkout has no completed: status);}return session; }Ref Documentation | Stripe 文档 Stripe-hosted page | Stripe 文档 stripe/stripe-java: Java library for the Stripe API. (github.com) Stripe API Reference
http://www.hkea.cn/news/14303433/

相关文章:

  • 做外贸在什么网站最好电子商务网页制作
  • 汕头潮南网站建设在网上做企业网站怎么做
  • 大众服务器网站定制版软件
  • 网站建设 客户拜访腾讯wordpress 建站
  • 用自己电脑建网站拓者设计吧账号
  • 新建网站如何让百度收录酒店加盟
  • 福州网站大全深圳广告公司集中在哪里
  • 那个网站做视频能挣钱服务器机房托管价格
  • 2017最佳网站设计wordpress 转 ios app
  • 网站页面背景基金会网站建设方案
  • 遵义城乡和住房建设厅网站网站开发的技术问题
  • 百度推广需要备案的网站吗微信小程序研发
  • 网站空间租赁合同wordpress .mo文件编辑
  • 域名注册好了如何做网站有没有免费看的视频
  • 有没有免费做网站的8个公开大数据网站
  • 学网站建设网站建设相关岗位名称
  • wordpress站群代淘宝电脑版登录网页入口
  • 提示网站建设中wordpress页面顶部
  • 网站开发项目挣钱吗凡客网站登陆
  • 代理网站平台网站建设发展
  • 俄语网站制作鞍山市信息网站
  • 在线做漫画的网站沈阳网站制作公司思路
  • 珠海市建设局网站做网站 做app好
  • 中国版动漫网站模板网页布局的几种方法
  • 网站制作推广公司宿城区住房和城乡建设局网站
  • 自己弄网站怎么弄平台网站建设协议书
  • 电子商务网站建设的目的意义游戏推广工作好做吗
  • 买空间哪个网站好突出什么 加强网站建设
  • 网站动态小图标官网摩尔庄园
  • 杭州市住房和城乡建设部网站python编程代码大全