tt.pay

2020-02-12 17:23 更新

調(diào)起字節(jié)跳動(dòng)小程序收銀臺(tái)支付,或者微信、支付寶 API 支付。詳細(xì)接入文檔見(jiàn):小程序收銀臺(tái)(pay)接入文檔

支持支付方式:微信支付、支付寶收銀臺(tái)支付支持版本:今日頭條(iOS / Android)7.2.7+版本,抖音(Android)7.1.0+版本/(iOS)8.6.0+版本API 支付支持版本:今日頭條(iOS / Android)7.4.3+版本


輸入

object 類型,屬性如下:

屬性類型默認(rèn)值必填說(shuō)明最低支持版本
successfunction接口調(diào)用成功的回調(diào)函數(shù)1.19.0
completefunction接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行)1.19.0
failfunction接口調(diào)用失敗的回調(diào)函數(shù)1.19.0
orderInfoobject調(diào)起小程序支付收銀臺(tái)的簽名訂單信息。
該對(duì)象由開(kāi)發(fā)者服務(wù)端產(chǎn)生并經(jīng)過(guò) 服務(wù)端簽名 加上 sign 字段后返回;返回后小程序端 請(qǐng)不要修改 orderInfo 上的字段,否則將會(huì)導(dǎo)致簽名驗(yàn)證失敗
1.19.0
servicenumber固定值:1 (拉起小程序收銀臺(tái))
開(kāi)發(fā)者如果不希望使用頭條小程序收銀臺(tái),service 設(shè)置為 3/4 時(shí),可以直接拉起微信/支付寶進(jìn)行支付:
service=3: 微信 API 支付,不拉起小程序收銀臺(tái);
service=4: 支付寶 API 支付,不拉起小程序收銀臺(tái)。==其中 service=3、4,僅在 1.35.0.1+基礎(chǔ)庫(kù)(頭條 743+)支持==
1.19.0
getOrderStatusfunction商戶前端實(shí)現(xiàn)的查詢支付訂單狀態(tài)方法(該方法需要返回個(gè) Promise 對(duì)象), service=3、4 時(shí)不需要傳1.19.0
_debugnumber0僅限調(diào)試用,上線前去掉該參數(shù)。_debug=1 時(shí),微信支付期間可以看到中間報(bào)錯(cuò)信息,方便調(diào)試1.19.0

orderInfo 屬性如下:

屬性類型必填是否參與簽名說(shuō)明
merchant_idstring頭條支付分配給商戶的商戶號(hào)
app_idstring頭條支付分配給商戶 app_id,用于獲取加簽秘鑰信息。
sign_typestring固定值:MD5。商戶生成簽名的算法類型
timestampstring發(fā)送請(qǐng)求的時(shí)間戳,精確到秒
versionstring固定值:2.0
trade_typestring固定值:H5
signstring簽名,具體簽名方案見(jiàn) 服務(wù)端簽名
product_codestring固定值:pay
payment_typestring固定值:direct
out_order_nostring商戶訂單號(hào)
uidstring用戶在商戶側(cè)唯一標(biāo)志,長(zhǎng)度:32 位
total_amountnumber金額,整型,單位:分(不能有小數(shù))
currencystring固定值: CNY。幣種
subjectstring商戶訂單名稱;如果是測(cè)試接入,請(qǐng)務(wù)必填寫:xxx 業(yè)務(wù)xx 活動(dòng)測(cè)試,例如,懂車帝xx 活動(dòng)測(cè)試
bodystring商戶訂單詳情
trade_timestring下單時(shí)間戳,精確到秒
valid_timestring訂單有效時(shí)間(單位 秒)
notify_urlstring填任意非空 URL 即可(該字段含義為:銀行卡支付的回調(diào)地址,未開(kāi)通銀行卡支付的開(kāi)發(fā)者,該字段值填非空 URL 地址)
alipay_urlstring調(diào)用支付寶 App 支付所需的支付請(qǐng)求參數(shù)(形如 'app_id=xxx&biz_content=xxx...'),詳見(jiàn)支付寶 App 支付請(qǐng)求參數(shù)說(shuō)明。
service=1 時(shí),如不傳則不展示支付寶支付;
service=4 時(shí)必傳。
wx_urlstring調(diào)用微信 H5 支付統(tǒng)一下單接口 返回的 mweb_url 字段值(請(qǐng)注意不要進(jìn)行 urlencode)。
service=1 時(shí),如不傳則不展示微信支付;
service=3 時(shí)必傳。
wx_typestringwx_url 非空時(shí)傳 'MWEB'。wx_url 為空時(shí),該字段不傳
risk_infostring支付風(fēng)控參數(shù)。序列化后的 JSON 結(jié)構(gòu)字符串,JSON 結(jié)構(gòu)如下:{ip: '用戶外網(wǎng)IP', device_id: '用戶設(shè)備唯一標(biāo)識(shí)'}
說(shuō)明:service=3|4 時(shí),merchant_id, app_id, sign_type, sign, wx_url, alipay_url, wx_type 字段值必須是真實(shí)信息;其他字段傳非空、符合格式要求內(nèi)容即可,不強(qiáng)制要求是真實(shí)訂單信息

getOrderStatus

由于開(kāi)發(fā)者不能將微信和支付寶的密鑰交付給字節(jié)跳動(dòng),無(wú)法代為發(fā)起交易,所以從小程序發(fā)起支付跳轉(zhuǎn)微信之后,微信支付訂單可能處于支付成功,取消等狀態(tài);此時(shí)用戶回到小程序后需要商戶通知微信支付的結(jié)果用于處理收銀臺(tái)后續(xù)交互

該函數(shù)需要開(kāi)發(fā)者自己實(shí)現(xiàn),該函數(shù)功能是:開(kāi)發(fā)者前端通過(guò)商戶訂單號(hào)(out_order_no),向開(kāi)發(fā)者后端查詢微信訂單的支付狀態(tài),將該訂單支付狀態(tài)返回給收銀臺(tái)。

該函數(shù)需要返回 Promise 對(duì)象,實(shí)現(xiàn)方案參考 代碼示例。

  • 入?yún)?nbsp;{out_order_no: <商戶訂單號(hào)>},其中,out_order_no 為商戶系統(tǒng)內(nèi)部訂單號(hào),必傳
  • 出參 {code},其中 code 是一個(gè) Int 類型:0:支付成功1:支付超時(shí)2:支付失敗3:支付關(guān)閉9:訂單狀態(tài)未知/未支付

請(qǐng)注意:只有商戶后端查詢到微信支付訂單明確的終態(tài)(0,1,2,3)時(shí)才傳這幾個(gè)訂單狀態(tài),收銀臺(tái)在接收到這幾個(gè)狀態(tài)后,會(huì)自動(dòng)關(guān)閉收銀臺(tái);如果訂單狀態(tài)未明確(例如跳轉(zhuǎn)微信未支付返回)則傳 9,收銀臺(tái)接收到這個(gè)狀態(tài)后不會(huì)關(guān)閉收銀臺(tái),用戶可以繼續(xù)發(fā)起確認(rèn)支付操作。

success 返回參數(shù)說(shuō)明

屬性類型說(shuō)明
codenumber0:支付成功 1:支付超時(shí) 2:支付失敗 3:支付關(guān)閉 4:支付取消 9:訂單狀態(tài)開(kāi)發(fā)者自行獲取。只要調(diào)起收銀臺(tái)成功,支付狀態(tài)都會(huì)回調(diào)success返回,開(kāi)發(fā)者依據(jù)返回的 code 值,進(jìn)行后續(xù)業(yè)務(wù)邏輯處理

fail 返回參數(shù)說(shuō)明

object 類型,屬性如下:

屬性類型說(shuō)明
errMsgstringAPI 支付錯(cuò)誤碼:10000- 支付失敗,10001- 調(diào)起微信失敗,10002- 微信未安裝


代碼示例

tt.pay({
  orderInfo: {
    app_id: "800000040005",
    sign_type: "MD5",
    out_order_no: "MicroApp7075638135",
    merchant_id: "1300000004",
    timestamp: "1566720681",
    product_code: "pay",
    payment_type: "direct",
    total_amount: 1,
    trade_type: "H5",
    uid: "2019012211",
    version: "2.0",
    currency: "CNY",
    subject: "microapp test",
    body: "microapp test",
    trade_time: "1566720681",
    valid_time: "300",
    notify_url: "https://tp-pay.snssdk.com/cashdesk/test/paycallback",
    wx_url:
      "https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx25161122572189727ea14cfd1832451500&package=2746219290",
    wx_type: "MWEB",
    alipay_url:
      "alipay_sdk=alipay-sdk-java-3.4.27.ALL&app_id=2018061460417275&biz_content=%7B%22body%22%3A%22%E6%B5%8B%E8%AF%95%E8%AE%A2%E5%8D%95%22%2C%22extend_params%22%3A%7B%7D%2C%22out_trade_no%22%3A%2211908250000028453790%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22seller_id%22%3A%222088721387102560%22%2C%22subject%22%3A%22%E6%B5%8B%E8%AF%95%E8%AE%A2%E5%8D%95%22%2C%22timeout_express%22%3A%22599m%22%2C%22total_amount%22%3A%220.01%22%7D&charset=utf-8&format=json&method=alipay.trade.app.pay&notify_url=http%3A%2F%2Fapi-test-pcs.snssdk.com%2Fgateway%2Fpayment%2Fcallback%2Falipay%2Fnotify%2Fpay&sign=D2A6ua51os2aIzIH907ppK7Bd9Q2Kk5h7AtKPdudP%2Be%2BNTtAkp0Lfojtgl4BMOIQ3Z7cWyYMx6nk4qbntSx7aZnBhWAcImLbVVr1cmaYAedmrmJG%2B3f8G5TfAZu53ESzUgk02%2FhU1XV0iXRyE8TdEJ97ufmxwsUEc7K0EvwEFDIBCJg73meQtyCRFgCqYRWvmxetQgL7pwfKXpFXjAYsvFrRBas2YGYt689XpBS321g%2BZ8SZ0JOtLPWqhROzEs3dnAtWBW15y3NzRiSNi5rPzah4cWd4SgT0LZHmNf3eDQEHEcPmofoWfnA4ao75JmP95aLUxerMumzo9OwqhiYOUw%3D%3D&sign_type=RSA2&timestamp=2019-08-25+16%3A11%3A22&version=1.0",
    sign: "15aa99cd80878661a4d442b7540bdf96",
    risk_info: '{"ip":"127.0.0.1","device_id":"485737374363263"}'
  },
  service: 1,
  getOrderStatus(res) {
    let { out_order_no } = res;
    return new Promise(function(resolve, reject) {
      // 商戶前端根據(jù) out_order_no 請(qǐng)求商戶后端查詢微信支付訂單狀態(tài)
      tt.request({
        url: "<your-backend-url>",
        success(res) {
          // 商戶后端查詢的微信支付狀態(tài),通知收銀臺(tái)支付結(jié)果
          resolve({ code: 0 | 1 | 2 | 3 | 9 });
        },
        fail(err) {
          reject(err);
        }
      });
    });
  },
  success(res) {
    if (res.code == 0) {
      // 支付成功處理邏輯,只有res.code=0時(shí),才表示支付成功
      // 但是最終狀態(tài)要以商戶后端結(jié)果為準(zhǔn)
    }
  },
  fail(res) {
    // 調(diào)起收銀臺(tái)失敗處理邏輯
  }
});
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)