支付宝支付具体流程

支付宝支付具体流程
支付宝即时到账api https://docs.open.alipay.com/62/103738/
App 支付 https://docs.open.alipay.com/204/105297

 A: 申请即时到账接口所需参数 (appId privateKey alipayPublicKey)
 B: 通过参数生产sign(编码和seller_type 不参与签名)
 C: 将请求参数发送给前端页面 提交支付宝网关(get 提交)
 
 D: 同步通知和异步通知区别
    同步通知是跳转到同步通知的页面是get 提交
    异步通知是post 提交
    异步通知当状态发生改变就回通知, 而同步通知只有提交页面的时候才通知
F:  异步通知的触发条件
      交易成功, 交易失败,创建交易,完成交易
     异步通知是在 参数状态改变的是时候发送的异步数据
     异步通知只能在服务器中执行
     异步通知如果返回的不是 success 会一直发送请求指导 24 小时
 G: 支付宝回调是 取出前端的所有参数验证签名是否正确

 app支付宝支付流程
1支付宝APP支付
    1,首先创建应用并获取APPID,创建完成后添加app支付流程,配置应用,集成SDK
    2,配置完成后分析自己的业务逻辑首先将自己的订单信息和商品信息写入数据库中
    3,调用支付接口
    
     A: 查询和配置支付宝所需的参数
        PaymentMethod method = paymentMethodService.findByPcode("alipay");
        AlipayConfig alipayConfig= JsonUtils.jsonToPojo(method.getParams(), AlipayConfig.class);
     B://实例化客户端
        AlipayClient alipayClient
        
     C: 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay  
        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
     D:SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)
      AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
        (调用支付宝的回调地址) 外网可以访问的异步地址
        支付宝回调是获取所有的地址验证签名
     
     E:AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
       System.out.println(response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理
       
       
2支付宝电脑网站支付
    创建应用,配置秘钥,搭建环境都一样只是调用的接口不一样
    在接口提供的公共参数中设置回调地址    接受request请求对象后,为开发者生成前台页面请求需要的完整form表单的html
    这个表单的String输出到http response中即可


支付宝回调接口
   获取到返回的所有参数 先判断是否交易成功trade_status 再做签名校验
   1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
   2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
   3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email),
   4、验证app_id是否为该商户本身。上述1、2、3、4有任何一个验证不通过,则表明本次通知是异常通知,务必忽略。在上述验证通过后商户必须根据支付宝不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。在支付宝的业务通知中,只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功
   
   取出所有参数是为了验证签名
    Enumeration<String> parameterNames = request.getParameterNames();
    
    判断全部通过后 放回状态 success只要有一个失败就返回 failed
   
1·需要导入所需支付包:alipay-sdk-java.jar 和 commons-logging.jar,具体参考:<服务端SDK>

2·app支付 APP支付不能在沙箱测试、只能申请上线测试 

3·关于签名和验签:支付宝开放平台SDK封装了签名和验签过程,只需配置账号及密钥参数,lipaySignature.rsaCheckV1。

4·构造交易数据并签名必须在商户服务端完成,商户的应用私钥绝对不能保存在商户APP客户端中,也不能从服务端下发。

猜你喜欢

转载自blog.csdn.net/huyunqiang111/article/details/88665292