支付寶小程序API 小程序喚起支付

2020-09-16 15:50 更新

my.tradePay

發(fā)起支付。

相關(guān)問題請(qǐng)參見下文 小程序支付 / 資金授權(quán) FAQ 。

注意:此 API 暫僅支持企業(yè)支付寶賬戶使用。

掃碼體驗(yàn)

小程序喚起支付.jpeg

示例代碼

小程序支付

my.tradePay({
  // 調(diào)用統(tǒng)一收單交易創(chuàng)建接口(alipay.trade.create),獲得返回字段支付寶交易號(hào)trade_no
  tradeNO: '201711152100110410533667792',
  success: (res) => {
    my.alert({
      content: JSON.stringify(res),
    });
  },
  fail: (res) => {
    my.alert({
      content: JSON.stringify(res),
    });
  }
});
資金授權(quán)

my.tradePay({
  // 調(diào)用資金凍結(jié)接口(alipay.fund.auth.order.app.freeze),獲取資金授權(quán)參數(shù)
  orderStr: 'alipay_sdk=alipay-sdk-java-3.0.118.DEV&app_id=2018112803019836&biz_content=%7B%22amount%22%3A%220.02%22%2C%22extra_param%22%3A%22%7B\%22category\%22%3A\%22CHARGE_PILE_CAR\%22%7D%22%2C%22order_title%22%3A%22%D6%A7%B8%B6%B1%A6%D4%A4%CA%DA%C8%A8%22%2C%22out_order_no%22%3A%22ZMOutOrderNoAppFreeze2018052915543415090975%22%2C%22out_request_no%22%3A%22ZMOutReqNoAppFreeze20180529155434581875858%22%2C%22pay_timeout%22%3A%222d%22%2C%22payee_user_id%22%3A%222088202224929664%22%2C%22product_code%22%3A%22PRE_AUTH_ONLINE%22%7D&charset=GBK&format=json&method=alipay.fund.auth.order.app.freeze&sign=L4wk%2FNKcbJOo3n6Q5qbPzn0jUsvZlK4jr7iXnghudR0zeWJMmeNC71qIBSQfIz45n%2B5iTd0NQ5IK581xI2xCShTCiKAywnQcDmA%2Bjf%2BrRdKCDQCMLfCz%2BZ37C%2B6zxAX3e81%2F8Hr29lw4VPFfHkp9FmMwKw%2FGkNfV5ZlWoh7UtN8%3D&sign_type=RSA×tamp=2018-05-29+15%3A54%3A35&version=1.0',
  success: (res) => {
    my.alert({
    content: JSON.stringify(res),
  });
  },
  fail: (res) => {
    my.alert({
    content: JSON.stringify(res),
  });
  }
});

入?yún)?/h4>

Object 類型,屬性如下:

屬性 類型 必填 描述
tradeNO String 否(調(diào)用小程序支付 時(shí)必填) 接入小程序支付時(shí)傳入此參數(shù)。此參數(shù)為支付寶交易號(hào),注意參數(shù)有大小寫區(qū)分。
orderStr String 否(調(diào)用資金授權(quán) 時(shí)必填) 完整的支付參數(shù)拼接成的字符串,從服務(wù)端獲取。
success Function 調(diào)用成功的回調(diào)函數(shù)。
fail Function 調(diào)用失敗的回調(diào)函數(shù)。
complete Function 調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行)。

success 回調(diào)函數(shù)

入?yún)?String 類型,屬性如下:

屬性 類型 描述
resultCode String 支付結(jié)果碼,詳見下表。

結(jié)果碼

結(jié)果碼 描述 解決方案
4 無權(quán)限調(diào)用(N22104)。 個(gè)人小程序應(yīng)用沒有開放小程序支付能力。
9000 訂單處理成功。 不建議根據(jù) my.tradePay 接口同步返回判斷是否支付成功,9000 不能判定就是支付成功,請(qǐng)以異步通知(notify_url)返回的 trade_status(交易狀態(tài))為 TRADE_SUCCESS + alipay.trade.query 接口查詢訂單是否支付成功實(shí)際返回的支付狀態(tài)為準(zhǔn)。
8000 正在處理中。支付結(jié)果未知(有可能已經(jīng)支付成功)。 請(qǐng)調(diào)用 alipay.trade.query 接口查詢商戶訂單列表中訂單的支付狀態(tài),以查詢接口實(shí)際返回的支付狀態(tài)為準(zhǔn)。
4000 訂單處理失敗。 tradeNO 調(diào)用小程序支付時(shí)必填,orderStr 調(diào)用資金授權(quán)時(shí)必填,二選一。根據(jù)具體接入開放能力選擇參數(shù)。小程序支付時(shí):檢查入?yún)⒆侄?nbsp;tradeNO 是否編寫正確,"NO"都是大寫。tradeNO 的入?yún)?shù)據(jù)是 alipay.trade.create 接口返回的 “trade_no”,不是 “out_trade_no”。資金授權(quán)時(shí):orderStr 必填。alipay.fund.auth.order.app.freeze 接口的參數(shù)有誤,導(dǎo)致通過 response.sdkExcute(request) 方法獲取到的orderStr 參數(shù)有問題,檢查入?yún)⒆侄魏蛿?shù)據(jù)是否符合接口要求,建議只傳必傳參數(shù)測(cè)試,避免其他參數(shù)干擾。
6001 用戶中途取消。 請(qǐng)用戶重新簽約 / 支付。檢查 tradeNO 的入?yún)⑹欠駷檎H雲(yún)?,參?shù)數(shù)據(jù)為 alipay.trade.create 接口返回的“trade_no”alipay.trade.create 接口在小程序場(chǎng)景中buyer_id 參數(shù)必填,且入?yún)⒌?nbsp;buyer_id(用戶 user_id,2088 開頭)必須和前端喚起支付的支付寶賬號(hào)一致。
6002 網(wǎng)絡(luò)連接出錯(cuò)。 檢查網(wǎng)絡(luò)連接后重試。
6004 處理結(jié)果未知(有可能已經(jīng)成功)。 請(qǐng)調(diào)用 alipay.trade.query 接口查詢商戶訂單列表中訂單的支付狀態(tài),以查詢接口實(shí)際返回的支付狀態(tài)為準(zhǔn)。

小程序支付 / 資金授權(quán) FAQ

資金授權(quán)場(chǎng)景下,在 IDE 上調(diào)用 my.tradePay 報(bào)錯(cuò) “error 2:無效API入?yún)ⅰ?,如何處理?/h4>

IDE 模擬器調(diào)用 my.tradePay 后會(huì)生成一個(gè)支付二維碼(有效時(shí)間10分鐘),開發(fā)者在支付寶客戶端掃碼支付,支付結(jié)果會(huì)同步 my.tradePay 回調(diào)。

image

資金授權(quán)凍結(jié)接口無法調(diào)起支付,如何處理?

可能原因:

  • 服務(wù)端回傳的 tradeNO 出錯(cuò),導(dǎo)致傳入 my.tradePay 的 tradeNO 參數(shù)錯(cuò)誤。
  • 資金授權(quán)無法在 IDE 模擬器中進(jìn)行測(cè)試。

解決方案:

\1. 請(qǐng)參考資金授權(quán)文檔 接入指引 > 第五步:調(diào)用接口 > 線上資金預(yù)授權(quán)凍結(jié),獲取用于小程序支付的 orderStr 參數(shù)。

\2. 將獲得的 orderStr 參數(shù)傳入 my.tradePay 中(設(shè)置為固定值),并在真機(jī)上進(jìn)行測(cè)試。

資金授權(quán)時(shí),支付寶預(yù)授權(quán)報(bào)錯(cuò)”訂單異常 ALIN42683”,如何處理?

報(bào)錯(cuò)原因:

OutOrderNo 和 OutRequestNo 重復(fù)請(qǐng)求。(OutOrderNo 和 OutRequestNo)

解決方案:

\1. 確保 OutOrderNo 和 OutRequestNo 入?yún)⒃谏碳蚁到y(tǒng)中唯一 (只傳入OutOrderNo 或只傳入 OutRequestNo)。

\2. 檢查參數(shù)是否按照線上資金授權(quán)凍結(jié)要求設(shè)置,建議只傳必傳參數(shù)測(cè)試,避免其他參數(shù)干擾。

小程序支付無法調(diào)起支付,如何處理?

可能原因:

  • 傳入 my.tradePay 的 tradeNO 參數(shù)錯(cuò)誤,導(dǎo)致服務(wù)端回傳的 tradeNO 出錯(cuò)。
  • 小程序支付無法在 IDE 模擬器中進(jìn)行測(cè)試。

解決方案:

\1. 在服務(wù)端調(diào)用 ?alipay.trade.create (統(tǒng)一收單交易創(chuàng)建接口),獲得支付寶交易號(hào) tradeNO。

注意

在小程序場(chǎng)景內(nèi) alipay.trade.create 接口中的 buyer_id 為必填項(xiàng),若未傳入,則調(diào)試報(bào)錯(cuò)。推薦使用開放平臺(tái)提供的 服務(wù)端 SDK ,并參考以下示例代碼(以 Java 代碼為例)進(jìn)行編寫。

//實(shí)例化客戶端
AlipayClient alipayClient = new     DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
//實(shí)例化具體API對(duì)應(yīng)的request類,類名稱和接口名稱對(duì)應(yīng),當(dāng)前調(diào)用接口名稱:alipay.trade.create.
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
//SDK已經(jīng)封裝掉了公共參數(shù),這里只需要傳入業(yè)務(wù)參數(shù)。
request.setBizContent("{" +
        "\"out_trade_no\":\"20171115010101001\"," +
        "\"total_amount\":0.01," +
        "\"subject\":\"Iphone616G\"," +
        "\"buyer_id\":\"用戶pid\"" +
        "}");
try {
    //使用的是execute
    AlipayTradeCreateResponse response = alipayClient.execute(request);
    String trade_no = response.getTradeNo();//獲取返回的tradeNO。
} catch (AlipayApiException e) {
    e.printStackTrace();
}

\2. 將獲得的 tradeNO 參數(shù)傳入 my.tradePay 中(設(shè)置為固定值),并在真機(jī)上進(jìn)行測(cè)試。

小程序喚起支付可以支付其他 APPID 或者 PID 的訂單嗎?

小程序 my.tradePay 接口不會(huì)限制創(chuàng)建 tradeNO 交易號(hào)參數(shù)的應(yīng)用 APPID,只要交易號(hào)合法,既可以 。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)