精华内容
下载资源
问答
  • 作为支付业务来说,幂等性绝对是最为重要的一环,可能很多开发者之前没听说过这种术语,但是一定知道一个常识: 同一个订单,用户多次调用支付接口,最终只会成功一次 这很容易理解,用户绝对不希望自己的余额因为你...

    1 幂等性是什么?

    作为支付业务来说,幂等性绝对是最为重要的一环,可能很多开发者之前没听说过这种术语,但是一定知道一个常识:
    同一个订单,用户多次调用支付接口,最终只会成功一次

    这很容易理解,用户绝对不希望自己的余额因为你接口没有保证幂等性而被重复扣费。

    我们的接口可能会因为各种各样的问题被重复调用,而幂等性就是要求我们提供的接口如果发生多次调用,对业务系统不会造成影响


    2 支付流程中有哪些需要保证幂等性

    我们模拟一个简单的商品购买流程,假如用户需要购买一台手机,价格是4800元,用户余额有1万元,支付过程中不需要与第三方进行交互(如果有第三方,支付回调也是需要注意的地方)。

    那么从选购商品到完成支付,主要有以下几个流程

    • 展示商品信息
    • 预下单
    • 进行支付
    • 展示支付结果

    在这四个流程中,除了展示信息的接口之外,其它的接口我们都需要保证幂等性。我们来简单分析一下,如果没有保证幂等性会有什么后果:


    2.1 预下单

    在支付业务中,我们通常需要对这笔交易生成一个订单,后续所有流程都应该依赖这个订单展开,因此预下单是必不可少的环节。

    抛开订单属性的细节不说,用户进行预下单之后,通常不会立马进行支付,此时该订单处于待付款状态,用户也可以查看待付款的订单。

    但是如果该环节没有做幂等性的话,就可能造成重复订单:用户点击下单后一看,好家伙,出现了三四笔4800元的待付款订单!


    2.2 进行支付

    如果说预下单不做幂等性顶多被投诉,那进行支付不做幂等性简直就是灾难性的。

    通常用户在界面选择一个待付款的订单确认支付之后,后台会根据订单号找到这笔订单,进行必要的校验之后,将其状态修改为支付成功,同时扣除相应的余额。

    如果该环节没有做幂等性,用户在支付完成之后会惊愕的发现,自己的余额居然只剩下了400块钱,而且还弹出了好几个余额不足,支付失败的提示!

    3 怎么保证幂等性

    从上面两个流程的描述来看,都是因为没有做防重的校验而导致业务异常,解决方案也很简单,通过redis设置一个有效期进行防重

    比如说预下单接口,我们只需要在业务层在redis存入一个key为用户id,value为订单号的string类型值,然后给个有效期,每次调用预下单接口前判断一下有没有过期即可。

    如果用户多次点击或者网络问题重复调用,我们在redis中就能拿到有效值,此时提醒用户操作过于频繁。

    当然,如果用户是真的短时间内想提交多个同样的订单,那么我们可以让前端根据商品、金额、用户信息等属性生成一个唯一的哈希值,根据这个哈希值作为key。

    而支付接口也是如此,在接口调用前判断redis是否存在订单,然后将该订单删除防止重复调用。

    需要注意的地方就是判断和删除操作需要保证事务

    展开全文
  • 简述一下支付流程

    千次阅读 2021-03-10 19:14:46
    支付简单来说就是服务端集成相应的SDK,微信支付宝都有对应不同服务端语言的SDK代码,修改的只有少部分参数,然后定义需要的参数接口暴露给前端。用户点击下单以后,后端接收前端的参数,如用户id(一般支付从token...

    支付简单来说就是服务端集成相应的SDK,微信支付宝都有对应不同服务端语言的SDK代码,修改的只有少部分参数,然后定义需要的参数接口暴露给前端。用户点击下单以后,后端接收前端的参数,如用户id(一般支付从token获取),商品id的集合等创建订单。价格一般是后端自己计算,并且需要使用bigdecima类型避免金额精度损失。然后服务端开启定时任务,一般30分钟,若用户未支付,定时任务会关闭该订单。
    接着是支付,用户下单以后点击支付,后端会根据对应的订单id调用SDK接口,获取对应的url返回给前端,前端打开对应的url网页,微信支付宝会和后端建立socket,实时返回用户的支付情况,支付成功后会调用配置好的回调url,此时支付完成,前端第三方的支付网页自动重定向到之前配置的回调url,后端会在支付成功的钩子函数拿到提示,修改订单的支付状态,此时支付完成。
    现在很多网站都是二维码付款,二维码网页一般自己提供,此时需要前后端建立websocket(ajax轮巡一般不采用),在用户支付完成后关闭该网页。

    • 沙箱环境初始化配置
    • 支付请求发起
    • 支付回调处理

    商品浏览 > 添加购物车 > 结算 > 计算商品总价 > 生成订单 > 选择支付方式 > 支付成功回调

    1. 用户在客户端提交订单 向服务器端发送请求
    2. 服务器返回支付地址,引导客户端跳转到支付地址
    3. 用户支付
    4. 支付成功,支付宝重定向到服务端预设的客户端地址,通知用户支付结果。 同时支付宝向服务端发送 post 请求(请求地址是提前设置好的)告诉服务器当前支付结果 ,服务端创建订单,根据支付结果修改订单状态(未支付、已支付)

    支付宝流程

    支付流程:先去调后台服务的支付接口,传递支付宝和服务端所需参数,服务端会返回一个支付宝支付页面链接,然后前端跳转到链接进行支付,支付完成支付宝会自动跳转到服务端定好的前端指定页面,支付即完成。

    在用户在浏览器点击进入支付过程按钮后,会向网站服务器发送一个带有相关信息的请求,然后服务器会将订单所需要的信息和支付完成后跳转回来的地址一同向支付宝的服务器发送一个请求,然后会得到一个可以用来打开支付页面的url 地址。接着网站服务器会将这个url 地址返回给浏览器,此时浏览器就可以跳转到这个支付页面的支付宝的 url,待到支付完成后,支付宝的支付页面会跳转到之前服务器告知的返回页面,这样就又会回到自己的网站了。浏览器跳转回自己网站的同时,支付宝的服务器还会向网站服务器发送一个post请求,服务器接受到这个 post 请求就可以对订单状态进行处理了。

    a. 客户端点击购买, 向服务端发送请求, 并入参相应参数 
    
    b. 服务端根据接收的信息, 校验通过后, 向支付宝下单, 并获取支付地址, 将该地址传回客户端
    
    c. 客户端获取地址后, 跳转到该支付地址
    
    d. 该地址为支付宝的地址, 在操作登录后(如果未登录), 支付订单
    
    e. 支付宝收到支付请求, 校验通过后, 向服务端发送支付成功的通知, 服务端修改相应订单内容, 支付宝通知客户端支付成功
    
    f. 客户端展示支付成功界面, 尔后跳转到购物车界面
    
    1. 触发提交流程
    2. 传入 支付宝接口要求的必填参数
    3. 传入 服务器端要求的必填业务参数
    4. 输入账号密码等待支付宝完成支付并显示支付结果
    5. 返回支付结果的url
    6. 在项目中定义alipay url 对应的页面组件
    • 提交订单订单的时候,需要传入Alipay相关的参数(订单总金额、订单标题、订单描述)和内部创建订单需要的参数(商品ID和数量、收获地址、用户ID)
    • 使用Alipay提供的sdk,获取支付链接
    • 使用支付宝支付完成后,客户端回跳到自己的支付成功页,同时会异步通知服务端用户已支付成功
    • 服务端调用Alipay的sdk验签接口,如果验证通过,开始创建订单,写入数据库

    1、传递 订单标题 订单金额 订单描述 产品信息 收货地址和当前创建人参数,获取支付地址 2、拿到收货地址后使用 window.location.href 进行跳转
    3、输入支付宝用户名密码登录后输入支付密码支付,支付成功后跳转到设置好的支付成功页面

    注意:支付宝支付接口不支持本地调试

    展开全文
  • 京东支付功能流程

    2021-05-29 16:18:37
    支付宝,微信,京东,云闪付,银联 等等 主要包含 付款码支付 , JSAPI支付, APP支付,H5支付 , 小程序支付,人脸支付 ,Navite支付 等等 他们的支付方式大同小异,有的名字虽然不是相同的,但是使用场景都差不多...

    1:目前市场上支付API的第三方很多,主流的接口有

     支付宝,微信,京东,云闪付,银联 等等  主要包含 付款码支付  , JSAPI支付, APP支付,H5支付 , 小程序支付,人脸支付 ,Navite支付 等等 

    他们的支付方式大同小异,有的名字虽然不是相同的,但是使用场景都差不多。

    这里例如京东支付:主要就包含:

    • PC支付
    • H5支付
    • APP支付
    • 扫一扫支付
    • 商户二维码支付
    • 付款码支付  

    选其中之一的H5支付讲解:

    首先是 京东的官方文档:https://payapi.jd.com/

    京东的H5支付 V.20  (包含之前的)版本 比较坑爹的,只支持表单提交的方式,所以 调用之前接口必须是在前端页面用From表单的方式调用下面接口。不能在后端调用,V3.0是可以支持的。

    H5端调用地址:https://h5pay.jd.com/jdpay/saveOrder

    京东H5支付的官网文档:https://payapi.jd.com/docList.html?methodName=0

    那么通过H5调用京东支付接口流程是怎么样的呢?

    第一步:在H5的支付页面如下:这个是用户开发的页面。选择支付方式。例如京东支付

    第二步:点击 ---京东支付 的时候需要调用后端接口。主要根据订单号 获取订单信息,这里需要获取的信息内容就是  https://h5pay.jd.com/jdpay/saveOrder 接口需要的内容。

    获取接口的所有数据后 再自定义一个页面,这个页面就是在From表单用的,把接口接口中获取的信息  全部绑定到该页面的表单内。

    如图:这里当调用JdpayH接口成功后,先把数据记录缓存中,再跳转到    /payOrder/Jdpay 这个页面中,这个页面也是自定义的页面,就是为了把参数全部绑定打From中,

     

    第三步:Form表单页面创建后,绑定的数据内容如下:

    这里调用的接口就是 :京东官网接口:https://h5pay.jd.com/jdpay/saveOrder 

    注意下面代码:  虽然需要跳转到这个页面,但是这个页面完全不停留的,这个页面的初始化方法: activated 里面就直接提交表单。如下图代码。 所以这个页面给用户是无感的。它的作用就是为了通过表单的方式触发京东接口,这里就是做的比较坑的地方。其实正常的完全可以在后台第一步获取了所以订单相关信息后直接调用京东API接口,但是京东的V2.0不支持。

     

    第四步:在第一步的时候整理京东API需要参数的时候,已经给他转了 回调url。包含 同步回调,异步回调  2个接口。

    这两个 同步接口 跟异步接口,京东官方的Demo是使用 aspx的方式接口参数的 如图:

    第五步:当可以接收到京东回调的参数后。后面的代码就可以根据业务逻辑处理了。

    展开全文
  • 支付宝支付详细流程

    千次阅读 2021-01-23 16:02:49
    一....1.利用工具类生成一个不重复的订单编号(根据token获取用户信息,将用户ID传入工具类)orderSn 2.先保存订单地址表t_order_address(注意调用保存...并根据工具类DateUtils.addMinutes()设置一个最迟支付时间,并返回

    一.在前台payPet.html页面用户点击立即领养提交订单
    1.利用工具类生成一个不重复的订单编号(根据token获取用户信息,将用户ID传入工具类)orderSn
    2.先保存订单地址表t_order_address(注意调用保存方法之前设置订单编号orderSn),并返回一个主键
    3.在保存领养订单表t_order_adopt表(注意调用保存方法之前设置地址id,订单摘要,订单金额,店铺id,订单编号orderSn),
    并根据工具类DateUtils.addMinutes()设置一个最迟支付时间,并返回一个主键
    4.在保存领养订单表之后会返回一个主键id,所以修改一下t_order_address表中的order_id外键
    5.此时该宠物已被买走,所以修改该订单所属宠物的宠物表t_pet的状态为已下架,并将user_id设置为谁买走了他
    6.保存一个支付单表t_pay_bill表(注意调用保存方法之前设置订单编号orderSn,订单金额,订单摘要,最后支付时间,支付渠道,业务主键也就是t_order_adopt表的主键,业务类型,支付人,支付人姓名,商家店铺,商家名称)
    7.此时调用支付宝接口,返回一个HTML字符串,将此字符串赋值给AjaxResult中的data,并返回给Controller层,Controller再将此字符串返回给payPet.html页面,
    8.根据定时器设置定时任务,在规定的时间内完成支付

    二.前台payPet.html页面再将返回来的HTML字符串使用jQuery将HTML字段放入body内,用div包住则它就会自动提交表单,因为其返回来的HTML字符串中有document.forms[0].submit();其意思是获取到当前页面中第一个表单

    三.根据提交的表单来到支付页面,支付可以选择扫码或者是账号密码登录,支付成功后,支付宝服务器会利用ajax请求post请求来访问我们的notify_url,也就是异步通知
    如果其没有设置路径,或者是后端拦截器没有放行,则直接访问到return_url,并会在地址栏中携带一些参数,最终将一些订单编号以及金额,支付人,地址等信息展示到最终页面success.html,也就是同步通知,
    如果其路径设置了,并且后端拦截器放行,则将会在真正支付成功之前进行异步通知来二次验签,由支付宝服务器发起AJAX请求来访问对应的Controller,由于我们并不知道此请求方式,所以只能使用@RequestMapping,不能使用具体某个请求的@PostMapping,
    由于我们后端项目此刻还并未上线,所以没有外网IP或者域名,支付宝服务器无法正常访问到此接口,这就需要内网穿透:利用工具natapp生成一个虚假的临时域名指向我们本机IP
    成功进入此Controller后,进行二次验证签名(支付金额,支付订单,支付编号是否与第一次请求一样),验证成功之后再进行验证交易状态,如果两次都成功,
    则将商户订单号,支付宝交易号传入将订单表的状态以及支付单的状态修改为已支付或是已完成,并将支付宝交易号存入进去的方法中

    四.如果异步通知成功走通,修改修改领养订单以及支付订单为已完成,将支付宝交易号添加上去
    先根据订单编号查询t_pay_bill表得出支付订单
    再修改此表(注意调用修改方法之前先将订单状态设置为已完成以及支付宝订单号和支付时间)
    下一步判断是宠物订单还是商品服务订单,
    如果是宠物订单则将订单有效期利用DateUtils.addDays设置为7天,
    再修改t_order_adopt表,并将业务主键也就是t_order_adopt表的主键以及支付宝订单号以及时间有效期为7天设置进去
    如果以上都没有问题,则二次验签返回一个success,支付宝服务器会自动重定向到return_url中,并且携带一些参数过来(注意由于是重定向的,所以是没有userToken的,前端success.html页面在发请求展示详细数据的时候,要将此请求放行)

    展开全文
  • 环境要求PHP5.0以上,且需要开启curl、openssl。...articleId=103566&docType=1电商网站支付流程图选择demo即时到账交易接口(create_direct_pay_by_user)demo下载解压之后目录如下图:选择:MD5签名版本/cr...
  • 1:小程序携带商品信息调用第三方服务器的下单API2:第三方服务器下单API对小程序带来的商品作库存量检测3:如果检测通过,第三方服务器就会保存这个订单并且告之小程序下单成功4:小程序调用第三方服务器的支付api5...
  • 秒杀业务流程

    2021-03-04 12:10:22
    流程说明: 用户在点击秒杀按钮,选择规格尺寸,数量后,点击确认最终跳转到确认订单页。 在点击"确认"按钮后,api会把相关参数封装后调用促销结算接口。 1.促销这边首先做基本参数的校验判断,然后是单用户每次...
  • PHP实现微信支付(jsapi支付)流程步骤详解来源:中文源码网浏览: 次日期:2018年9月2日【下载文档:PHP实现微信支付(jsapi支付)流程步骤详解.txt】(友情提示:右键点上行txt文档名->目标另存为)PHP实现微信支付...
  • 等等) 这是一套支付流程,其它流程如:交易查询、退款、退款查询、交易关闭都有对应的jsp,后期开发可以进行参考 到这里就已经完成支付宝开发的demo测试,是不是感觉很简单,其实支付宝已经将这些接口封装的非常...
  • Flutter中实现支付宝支付流程

    千次阅读 2021-02-07 22:47:54
    1. 支付宝支付流程 上面的图来自官方的文档,看起来比较繁琐,下面的图是流程的简化版。 简单解释一下流程步骤: 1. 当用户点击支付宝支付的时候,客户端请求App的服务端接口,此时,App的服务端会请求...
  • 支付宝app支付完整流程 java对接支付宝支付接口APP支付完整流程 javamaven依赖服务端代码统一下单支付宝支付回调客户端代码 对接支付宝支付接口APP支付完整流程 java 参考文档: 支付宝api文档 支付宝官方demo maven...
  • 文章目录 一、订单 1、登录页面配置 2、用户收件地址查询 3、 下单 (1)表结构介绍 (2)下单实现 (3)库存变更 (4)增加积分 二、 支付流程分析 1、 二维码创建 2、微信扫码支付简介 (1)微信扫码支付申请 (2...
  • ORACLE EBS 采购的业务流程采购计划 à 采购申请 à 审批申请 à 询价 à 报价 à 采购定单 à 发票批准 à 付款① 采购请求单据:[请购单],反映物料需求的单据。说明:该行为是整个采购行为的开始。录入方式:手工...
  • 支付宝支付流程

    2021-06-27 00:50:26
    } } pc-web端控制层调用支付服务流程: pc-web控制层调用支付服务流程: 1、获取前端传入的支付令牌,验证支付令牌参数的正确性 2、调用支付服务根据支付令牌获取支付form表单元素接口,获取支付form表单 3、在页面...
  • 文章目录业务流程测试用例设计主要问题今日目标1、状态迁移法2、订单测试3、业务流程测试3.1 流程图介绍(复习)3.2 绘制流程图3.3 业务流程测试3.4 业务流程测试用例设计3.5 测试团队中体现专业价值,个人价值4、...
  • 前言官方文档开放能力文档:APP支付接口API开发准备工作后端代码实现参数配置application.yml# 支付宝相关ALIPAY:# 应用IDAPP_ID:# 应用私钥APP_PRIVATE_KEY:#应用公钥APP_PUBLIC_KEY:# 支付宝公钥ALIPAY_PUBLIC_KEY...
  • 支付流程 app请求后台获取订单信息,后台只需封装参数,返回app包含签名的订单信息。代码如下: // 主题 String subject =“测试商品”; // 主题内容 String body =“testBody”; // 订单号 随机
  • 我们要学的还有那里面的业务逻辑处理,安全防范,开发文档作为公开的文档,那么多人使用别人的代码是经得起考验的,多看看开发文档真的有用。其实呢,说这么多就是想告诉大家,我们在做一个功能开发时我们需要明白...
  • 1、什么叫业务模型 例: 订单、库存、商品这类的名词都可以称之为模型。 例:订单可能分为实物类订单,...2、什么叫业务流程 例: 下单、出库、入库等这类的动词可以称之为流程。 例:下单过程涉及到支付,涉及到赠品,
  • 微信支付流程解析

    2021-08-11 16:01:28
    微信支付业务流程时序图详见官方文档。 商户调用统一下单接口,生成预支付交易单,微信支付侧返回prepay_id。 商户通过各类方式(js、native、小程序等)调起微信支付,发起支付请求,请求中需带有上步中的prepay_...
  • 本篇主要讲解APP接入支付宝支付完整流程,包含服务端,内容稍长 要接入支付宝支付,需要将APP在支付宝平台创建应用,提交审核,并进行商户签约以获得支付能力 详细参阅官方文档...
  • 最近接触到一个项目,涉及到微信支付,搞微信开发这么久以来,还没搞过支付,之前也就搞过公众号发红包,感谢前辈们的探索,我看了他们的博文,让我少走了很多弯路。 前期准备: 1.微信认证服务号,并且开通了微信...
  • 新版本 Maven 引入jar包 <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java<...支付宝证书支付 注册支付宝商家账号后登陆控制台: https://openhome.
  • 微派公司的业务主要是帮企业申请各种支付接口,申请得多就慢慢熟悉了一些门道,其实银联支付申请还是比较简单的(不用上传app截图什么的),只是审核比较严格,还有填写的资料比较多。下面给大家介绍下银联支付接口...
  • 此项业务主要是用到了rabbitMQ中的死信队列,大致流程就是, 当用户提交订单的时候将消息存储到rabbitMQ当中, 设置的订单超时时间是一个小时, 当用户一个小时未支付rabbitMQ就会将次订单号自动发送到死信队列,...
  • 支付宝支付流程

    2020-12-21 16:15:32
  • 支付系统业务浅析

    2021-03-29 11:36:09
    支付产品业务流程 支付产品的资金流 四、支付路由 支付路由的职责 原文链接:https://blog.csdn.net/qq_20802379/article/details/80982744 本文大部分内容转载自支付系统设计系列文章,在其中加入了一些个人的...
  • 一,银联支付的整体流程客户端提供服务器给服务器订单信息----服务器端拿到...---支付完成之后银联会回调服务器端提供的回调地址----服务器端根据回调参数处理业务逻辑二,服务器端主要代码解析.upmp.propertiessecuri...
  • 信贷业务流程22个环节

    千次阅读 2021-08-02 23:37:21
    获取用户:通过各种手段触达用户之后,用户在日常场景中,有相关需求时,第一时间想到了相关产品,通过简单快捷的方式使用产品,进入信贷业务流程入口。 4. 账号注册 :用户通过手机号或邮想注册账号,为产品、用户...
  • 1. 服务商类型 微信支付服务商 从业机构(银行) 从业机构(支付机构) 2. 概念 微信支付商家和微信支付之间的连接者。 微信支付服务商需要具有一定的技术开发能力,基于平台开放的多种产品,为特约商家...3. 申请流程 注意

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,010
精华内容 30,804
关键字:

支付业务流程