支付寶小程序 服務(wù)端·當面付 DEMO

2020-09-16 15:01 更新

Demo 運行環(huán)境

  • JAVA Demo 適用于 JDK 版本 1.6 ,Tomcat 版本 6.0。
  • PHP Demo 適用于 PHP 5.5 以上。
  • .Net Demo 適用于 .net framework 3.5以上;visual studio 2010以上。

注意:Demo 僅供參考,實際開發(fā)中需要結(jié)合具體業(yè)務(wù)場景修改使用。更多接入詳情參見 當面付。

使用說明

以 JAVA Demo 為例,本示例僅在支付寶標準 SDK 的基礎(chǔ)上再做了一層封裝, 即 JAVA 版本 Demo 中 alipay-trade-sdk.jar。

下載

支付寶提供了如下語言當面付 Demo 示例,開發(fā)者可下載使用。

JAVA 版 DEMO
.NET 版 DEMO
PHP 版 DEMO

直接運行 Demo 步驟如下

  1. 下載 demo 導入 TradePayDemo。
  2. 根據(jù)當面付指引修改配置文件 zfbinfo.properties。
  3. 運行 Main.java 中的 Main 方法。

Main.java 方法介紹

public static void main(String[] args) {
        Main main = new Main();


        // 系統(tǒng)商商測試交易保障接口api
        main.test_monitor_sys();


        // POS廠商測試交易保障接口api
        main.test_monitor_pos();


        // 測試交易保障接口調(diào)度
        main.test_monitor_schedule_logic();


        // 測試當面付2.0支付(使用未集成交易保障接口的當面付2.0服務(wù))
        main.test_trade_pay(tradeService);


        // 測試查詢當面付2.0交易
        main.test_trade_query();


        // 測試當面付2.0退貨
        main.test_trade_refund();


        // 測試當面付2.0生成支付二維碼
        main.test_trade_precreate();
    }

集成至商戶系統(tǒng)步驟如下

  1. 拷貝 java 目錄下的 Main.java 至系統(tǒng)商源代碼目錄。
  2. 將 lib 目錄下所有 jar 文件添加至系統(tǒng)商 lib 目錄。
  3. 拷貝 resources 目錄下的配置文件至系統(tǒng)商 classpath 根目錄。
  4. 在系統(tǒng)商項目中運行 Main 方法,確認集成無誤。
  5. 系統(tǒng)商使用 Main 方法中的調(diào)用樣例進行商戶端系統(tǒng)開發(fā)。

功能說明

TradePayDemo 代碼結(jié)構(gòu)

├─src

│ └─main

│ ├─java

│ ├─com

│ ├─alipay

│ ├─demo

│ ├─trade

│ ├─Main.java 當面付2.0調(diào)用范例

│ ├─lib 依賴類庫

│ ├─alipay-sdk-java20150625220051.jar

│ ├─alipay-trade-sdk.jar TradePaySDK創(chuàng)建的lib

│ ├─commons-codec-1.10.jar

│ ├─commons-configuration-1.10.jar

│ ├─commons-lang-2.6.jar

│ ├─commons-logging-1.1.1.jar

│ ├─core-2.1.jar

│ ├─gson-2.3.1.jar

│ ├─gson-2.3.1.jar

│ └─resources

│ ├─zfbinfo.properties 配置文件,調(diào)用 Main 方法之前請確認配置文件是否已正確配置

AlipayTradeService 對應接口說明

public interface AlipayTradeService {
    // 當面付2.0流程支付    public AlipayF2FPayResult tradePay(AlipayTradePayContentBuilder builder);
    // 當面付2.0消費查詢    public AlipayF2FQueryResult queryTradeResult(String outTradeNo);
    // 當面付2.0消費退款    public AlipayF2FRefundResult tradeRefund(AlipayTradeRefundContentBuilder builder);
    // 當面付2.0預下單(生成二維碼)public AlipayF2FPrecreateResult tradePrecreate(AlipayTradePrecreateContentBuilder builder);}

條碼支付

demo 封裝支付寶 SDK,提供了條碼付支付、查詢、退款 (條碼支付)功能,可以給收銀系統(tǒng)界面直接調(diào)用。

支付接口流程

條碼支付.png

支付結(jié)果查詢接口流程

查詢接口流程.png

退款接口流程

退款接口流程.png

掃碼支付(不含異步通知)

預下單(掃碼支付)接口流程

掃碼支付.png

掃碼支付結(jié)果查詢

方案一:采用 條碼支付 > 查詢接口流程

方案二: 采用輪詢邏輯

掃碼付輪詢.png

示例代碼:

alipay-trade-sdk.jar 中提供了輪詢 demo,詳情參見 com.alipay.demo.trade.service.impl.AbsAlipayTradeService.loopQueryResult。

    // 輪詢查詢訂單支付結(jié)果
    protected AlipayTradeQueryResponse loopQueryResult(AlipayTradeQueryRequestBuilder builder) {
        AlipayTradeQueryResponse queryResult = null;
        for (int i = 0; i < Configs.getMaxQueryRetry(); i++) {
            Utils.sleep(Configs.getQueryDuration());


            AlipayTradeQueryResponse response = tradeQuery(builder);
            if (response != null) {
                if (stopQuery(response)) {
                    return response;
                }
                queryResult = response;
            }
        }
        return queryResult;
    }

附:TradePaySDK 代碼結(jié)構(gòu)

alipay-trade-sdk.jar 結(jié)構(gòu)說明:

src

-- main

|-- java

| -- com

| -- alipay

| |-- api 服務(wù)保障接口數(shù)據(jù)模型,以后會遷移回底層 alipay sdk

| | |-- request

| | | -- AlipayHeartbeatSyncRequest.java

| | -- response

| | -- AlipayHeartbeatSynResponse.java

| -- demo

| -- trade

| |-- config

| | |-- Configs.java 配置文件,解析properties文件

| | -- Constants.java 常量定義

| |-- model

| | |-- ExtendParams.java 擴展參數(shù)

| | |-- GoodsDetail.java

| | |-- TradeStatus.java

| | |-- builder 當面付2.0請求包

| | | |-- AlipayHeartbeatSyncContentBuilder.java 服務(wù)保障接口請求bizContent結(jié)構(gòu)體

| | | |-- AlipayTradePayContentBuilder.java 條碼支付請求bizContent結(jié)構(gòu)體

| | | |-- AlipayTradePrecreateContentBuilder.java 掃碼支付(產(chǎn)生二維碼)請求bizContent結(jié)構(gòu)體

| | | |-- AlipayTradeQueryCententBuilder.java 當面付2.0查詢請求bizContent結(jié)構(gòu)體

| | | |-- AlipayTradeRefundContentBuilder.java 當面付2.0退款請求bizContent結(jié)構(gòu)體

| | | -- RequestBuilder.java 當面付2.0請求抽象類

| | |-- hb 服務(wù)保障接口數(shù)據(jù)模型

| | | |-- EquipStatus.java

| | | |-- EquipStatusAdapter.java

| | | |-- ExceptionInfo.java

| | | |-- ExceptionInfoAdapter.java

| | | |-- Product.java

| | | |-- TradeInfo.java

| | | |-- TradeStatus.java

| | | -- Type.java

| | -- result 當面付2.0應答包

| | |-- AlipayF2FPayResult.java 當面付2.0支付應答

| | |-- AlipayF2FPrecreateResult.java 當面付2.0預下單(產(chǎn)生二維碼)應答

| | |-- AlipayF2FQueryResult.java 當面付2.0查詢應答

| | |-- AlipayF2FRefundResult.java 當面付2.0退貨應答

| | -- Result.java

| |-- service

| | |-- AlipayTradeService.java 當面付2.0服務(wù)接口

| | -- impl

| | -- AlipayTradeServiceImpl.java 當面付2.0具體實現(xiàn)

| -- utils

| |-- GsonFactory.java 使用了gson序列化

| |-- Utils.java 雜物工具類

| -- ZxingUtils.java 使用了zxing庫進行二維碼的生成

-- lib 依賴類庫

? |-- alipay-sdk-java20150625220051.jar 支付寶sdk底層實現(xiàn)lib

? |-- commons-codec-1.10.jar

? |-- commons-configuration-1.10.jar

? |-- commons-lang-2.6.jar

? |-- commons-logging-1.1.1.jar

? |-- core-2.1.jar

? |-- gson-2.3.1.jar

? -- hamcrest-core-1.3.jar

常見問題

Q:掃碼支付、統(tǒng)一下單 + JSAPI 喚起收銀臺支付后,支付成功異步通知如何處理?

  1. 商戶需要驗證該通知數(shù)據(jù)中的 out_trade_no 是否為商戶系統(tǒng)中創(chuàng)建的訂單號;
  2. 判斷 total_amount 是否確實為該訂單的實際金額(即商戶訂單創(chuàng)建時的金額);
  3. 校驗通知中的 seller_id(或者seller_email) 是否為該筆交易對應的操作方(一個商戶可能有多個 seller_id/seller_email);
  4. 驗證接口調(diào)用方的 app_id。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號