Skip to content

通用语言: 订单

Yugang Zhou edited this page May 17, 2019 · 5 revisions

在支付供应商的文档中,下“单”往往是发起在线支付的第一步。

摘自微信支付API文档,统一下单

应用场景
商户在小程序中先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易后调起支付。

接口链接
URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder

摘自支付宝API文档,统一收单交易支付接口

alipay.trade.pay(统一收单交易支付接口)

那么这里的“单”是什么单呢?如果我们在开发的是一个订单系统,其中的订单和这个单是一样的吗?
我认为并不一样,因为它们属于不同的限界上下文,虽然名字类似(甚至相同),但代表的含义不一样。 举例来说,微信支付限界上下文中的订单,对于给定的一个订单号只能成功支付一次

商户支付的订单号由商户自定义生成,仅支持使用字母、数字、中划线-、下划线_、竖线|、星号*这些英文半角字符的组合,请勿使用汉字或全角等特殊字符。微信支付要求商户订单号保持唯一性(建议根据当前系统时间加随机序列来生成订单号)。重新发起一笔支付要使用原订单号,避免重复支付;已支付过或已调用关单、撤销(请见后文的API列表)的订单号不能重新发起支付
摘自微信支付API文档,商户订单号

但预订限界上下文的订单,由于支付策略(例如需要支付订金)或变更后补差价,可能需要支持支付多次。
既然这两种“单”并不代表同一个含义,那么我们建议:

  1. 在称呼支付供应商的订单时,加上限界上下文前缀,如微信支付订单,支付宝交易单
  2. 不要使用己方的订单编号作为支付供应商订单的商户订单号,而是为每次支付请求专门生成一个唯一编号,并记下该编号对应的是哪一笔订单

进一步阅读

待支付物, Payable

  • Key Activities & Tasks
    • Make Digital Payment
      • Initiate Digital Payment Context
      • Accept Digital Payment Result
      • Pull Digital Payment Result
      • Expire Digital Payment Context
      • Retry Digital Payment Succeeded
    • Make Digital Refund
      • Initiate Digital Refund Context
      • Accept Digital Refund Result
      • Retry Digital Refund Succeeded
    • Reconcile Digital Payment
    • Reconcile Digital Refund
  • Domain Models
    • Transactions
    • Digital Payment Context
    • Digital Refund Context
    • Entity Refs
    • Payable
    • Payee
    • Digital Payment Provider
  • Configurations
    • Payee to specify Digital Payment Provider Account
    • Digital Payment Method to delegate tasks to Digital Payment Provider
  • Dependencies
    • Digital Payment Provider

Clone this wiki locally