支付宝接口开发总结

支付宝接口开发总结

1,支付宝对接原理

  1. 用户输入支付宝账号密码及确认支付等操作,都是在支付宝域下进行。

  2. 网站将业务信息通过类似于重定向的方式提交到支付宝。

    以下html信息输出到浏览器后,会立刻发起新的请求。

    <form  name="alipaysubmit" action="https://mapi.alipay.com/gateway.do" method="get" >
    <input type="hidden" name="service" value="支付宝接口名称"/>
    <input type="hidden" name="total_fee" value="金额"/>
    <input type="hidden" name="out_trade_no" value="订单编号"/>
    <input type="hidden" name="return_url" value="交易结果同步回调路径"/>
    <input type="hidden" name="notify_url" value="交易结果异步回调路径"/>

    ......
    <input type="submit" value="确认" style="display:none;">
    </form>
    <script>document.forms['alipaysubmit'].submit();</script>

     

    以下截图:第一个是网站的,第二个是支付宝的。用户在第一个页面点击'立即支付',请求会发到网站后台,网站后台输出上面所说的html,浏览器会新开页并跳转至第二个页面。

     

     支付宝接口开发总结_第1张图片

     

    支付宝接口开发总结_第2张图片

  3. 在支付宝域下确认支付后,网站会收到支付宝交易结果通知,分为同步和异步,同步由浏览器发送,异步由支付宝主动发送直到收到网站的返回或者发送次数用完。

     

2,out_trade_no参数

out_trade_no: 商户网站唯一订单号

注意:建议out_trade_no的值不要直接使用订单编号,可以使用out_trade_no=原订单号+支付方式。对于同一笔订单同一种支付方式,无论用户在网站发起几次请求,out_trade_no始终唯一,这样可以避免不重复扣款。另外需要注意为了防止串号,测试环境和生产环境发到支付宝的编号应不一样,比如设置编号的首字母随着环境变化。

题外话:本人在网站开发中由于没有经验就注册了一号店、优酷、迅雷等网站,测试他们的支付宝支付,发现他们中的out_trade_no规则主要包括2种:

1):直接使用原订单号,这样可以防止重复支付,但是不适合我们网站,因为我们网站的网银支付走的也是支付宝的接口,这样如果用户从支付宝支付切回网银支付时,支付宝会报错:交易已存在,意思就是说你已经提交过支付请求。如果网站的网银支付走的是银联接口,这种方式没有任何问题,显然**网站就是这样的。

2):一笔订单每次提交支付请求时,out_trade_no都会变化。对于网站的同一笔订单,每次请求out_trade_no不一样的话,支付宝就会当成一笔新的交易,这样极易出现重复支付,特别是像网站套餐比较多,用户不小心就对一个套餐支付两次。但话说回来,现在用户一点都不笨。

 

3,注意事项

  1. 异步回调有次数限制,为防止异常情况下没有收到支付宝的交易通知,必须辅以支付宝的另一接口"单笔交易查询",可以主动去查询交易结果。为了原路退款,同时需要开发“批量退款接口”。

  2. 支付宝的每一笔交易是以“支付宝流水号”唯一确定的,为保证数据及逻辑的一致性,网站数据库需要使用唯一索引,应用层级需要使用事务(事务:登记支付宝流水信息,更新订单支付状态等)。

  3. 支付宝的交易通知可能多次,如果网站已经处理过,须直接返回或忽略。如果发现是异常扣款(后面详细介绍),可能需要执行退款等业务操作。

     

4,异常支付处理

这里所说的"异常支付"不是指系统或代码的异常,特指在支付宝接口开发中违背业务逻辑的需要全额退款的支付

主要包括以下2种情况:

4.1 重复扣款

重复扣款:网站的一笔订单,客户支付两次。

发生概率:很低

产生场景:客户选择了支付宝支付,由于网站订单状态未更新,客户以为未支付成功,又选择网银等其他支付方式;另一种情况是客户选择了支付宝支付并登录成功但未确认支付,回到网站又选择了其他支付方式并支付成功,但支付宝的账单记录还在那放着,有效期内客户又不小心点了确认支付。

说明:由于out_trade_no 设计根据订单编号+支付类别唯一生成,所以不会出现同一支付渠道下的重复扣款。

4.2 商户订单状态不对

发生概率:很低

产生场景:用户在支付成功后立马去“取消订单”,由于网络延迟或其他原因,网站没有收到支付结果通知,就主动去调用“单笔交易查询”接口,但是调用又出现系统异常,这个时候只能将订单状态置为已取消。待网站最终收到支付通知时,发现订单已取消了,那当前支付就是无效的。即便网站最终收不到该笔支付结果通知,客户也会投诉为什么没收到退款。

你可能感兴趣的:(支付宝网银支付,支付宝即时到账,支付宝接口开发)