通用支付接口设计

2020-02-08  本文已影响0人  ithankzc

其实可以一开始就直接讲支付相关的,但在这里还是先说一下接口设计, 接下来涉及到具体支付方式的时候,也会基于接口设计举例。

接口设计

通用的支付接口

当跳转到支付页面时, 对于支付服务来说,主要就2个参数, 接口设计大概如下

假设backend_domain 为支付服务的后端地址

url: ${backend_domain}/pay/unified_pay
method: post
body: {
  "payment_type": Enum // eg: ALI_WEB, ALI_H5, WX_NATIVE ... and so on
  "order_id": String
}
response: {
   payment_type: Enum,
   extra: Any // 这里会根据不同的支付类型,返回不同的值,后面的文章会更细节说明
}

这样设计的一个好处在于,前端并不需要因为接入多种支付方式,而接不同的接口,设计成一个接口的话,他们要改的就主要是支付方式的枚举值

通用的支付接口还是得做一些让步

眼尖或者已经接过微信支付的同事就会发现,是不是少了一些参数? 是的,的确是少了一些。

如 微信 H5 支付是需要传 scense_info 参数的, JASAPI 支付 则要求必传 openid, 那上面的接口还得再改改

url: ${backend_domain}/pay/unified_pay
method: post
body: {
  "payment_type": Enum, // eg: ALI_WEB, ALI_H5, WX_NATIVE ... and so on
  "order_id": String,
  "openid": String?, // optional
  "scense_info": String?, // optional
}
response: {
   payment_type: Enum,
   extra: Any
}

这样子基本上就能满足大部分的支付需求啦。

还需要再调整?

是,如支付宝网页版支付,是会跳到支付宝自身的页面的,支付完成后如何跳转回原有业务就是一个问题,支付宝提供了一个 return_url 的参数,我们把这个也作为我们的一个请求参数

url: ${backend_domain}/pay/unified_pay
method: post
body: {
  "payment_type": Enum, // eg: ALI_WEB, ALI_H5, WX_NATIVE ... and so on
  "order_id": String,
  "openid": String?, // optional
  "scense_info": String?, // optional
  "return_url": String?
}
response: {
   payment_type: Enum,
   extra: Any
}

到此,接口及参数基本上就满足支付宝支付,微信支付了。

上一篇 下一篇

猜你喜欢

热点阅读