作者:方倍工作室

本文介紹支付寶中當面付下屬的條碼支付、掃碼支付、訂單查詢、退款申請的集成開發過程。

 

本文分為以下五個部分:

  1. 條碼支付和掃碼支付介紹
  2. 申請應用
  3. 密鑰生成及配置
  4. API及SDK集成
  5. 條碼支付、掃碼支付、訂單查詢、退款申請

 

一、條碼支付及二維碼支付介紹

1. 條碼支付

條碼支付是支付寶給到線下傳統行業的一種收款方式。商家使用掃碼槍等條碼識別設備掃描用户支付寶錢包上的條碼/二維碼,完成收款。用户僅需出示付款碼,所有收款操作由商家端完成。其使用場景如下:

python 補全html href_json

業務流程:

python 補全html href_支付寶_02

使用步驟:

  1. 用户登陸支付寶錢包,點擊首頁“付款”,進入付款碼界面;
  2. 收銀員在商家收銀系統操作生成訂單,用户確認支付金額;
  3. 用户出示錢包的“付款碼”,收銀員用掃碼設備來掃描用户手機上的條碼/二維碼後,商家收銀系統提交支付;
  4. 付款成功後商家收銀系統會拿到支付成功或者失敗的結果。

2. 掃碼支付

掃碼支付,指用户打開支付寶錢包中的“掃一掃”功能,掃描商家展示在某收銀場景下的二維碼並進行支付的模式。該模式適用於線下實體店支付、面對面支付等場景。

其使用場景如下:

python 補全html href_json_03

業務流程:

python 補全html href_支付寶_04

使用步驟:

  1. 用户登陸支付寶錢包,點擊首頁“付款-掃碼付”,進入掃一掃界面;
  2. 收銀員在商家收銀系統操作生成支付寶訂單,用户確認支付金額,並生成二維碼;
  3. 用户使用錢包的“掃碼付”,掃收銀員提供的二維碼,確認支付;
  4. 用户付款後商家收銀系統會拿到支付成功或者失敗的結果。

 

二、接口申請

企業在申請企業支付寶之後,進行功能申請並簽約,然後在螞蟻金服開放平台中申請應用如下(詳細過程就略了)

python 補全html href_數據庫_05

然後在功能列表中,申請當面付這一功能,申請成功後如下。

python 補全html href_python 補全html href_06

這樣,我們就有了當面付的權限了。

 

 

三、密鑰生成

在支付寶當面付的接口中,使用了非對稱加密算法,商户自己的公鑰和私鑰需要自己使用OpenSSL手動生成。對這些概念比較陌生的話,請先自行先了解一下密碼學的相關知識。OpenSSL也可以從方倍工作室博客中找到。

下載支付寶官方提供的密鑰生成工具OpenSSL,然後執行以下命令就可以生成公鑰和私鑰。

python 補全html href_python 補全html href_07

其中



genrsa -out rsa_private_key.pem 1024



是用於生成RSA私鑰,執行後在程序目錄中生成一個文件rsa_private_key.pem,其內容如下



python 補全html href_數據庫_08



-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCyffRONGd8Q/1kRh1cpsSRi360DXLHI7zxdPJGYe5HKDWF7u9b
3zZU9erZpM90XE7gZRKsxIgOurH4uqhmVRbto3e+LiYOyNpd6As3Q427KCTIT7aj
hHicZ6GWhegTUiVLqiuWLsauQcbI6DO4GEZrlvAdzus0WcJiJOxW02rxSQIDAQAB
AoGAXBJYyVaC4zj3Jph8YOStlR5N13bwdATdW/glWWT+0rnNEi90TQHRNvY7lNVN
JgrPrTS182TVgjOPxmwSnebakhIuGIdPq99GLE4LGd5lKWTzkd84BMvhatfNsCCz
cEVFqKg3tZd4t3fQ93FrILsnnZpLhiW53jIrStCkR3rx9OECQQDWMSHyc91hEVMQ
qVNasbGEicKWxhoDqjdm2lHkBx4mrB9JEZFDs6MxWdajf2/Qw+tgtpN3YBcCDw/H
nGHhQtStAkEA1VTyjOdAwWode8X4fu0IPq9+E19mcVOAJjLBH46mropwgOdj3raq
T/ThaKeaydjabsTAiY2J18HiTiyH+1bGjQJBAKgRJXH5OFxSG7uXIbCofYJiFi34
g7EcfxxVcqxaaW4u4N2Uy0c0TXkL5T+lXzeQg8D/gfbJj0QuTVNzgdofdoECQBHY
OznCFk6Xe8PguXqUhT4JG/iu4DjWjT+kuzbSjerHtcVylY4JpZFuoHRKoM4Fj6/4
UUqwRjmABFgZrX4+sfkCQCNI8RCZ6yprh5kEOePo3uazAlNENP8dKkhgqChawdK7
7NzlJ727Nt23STHFx6NkhzyruJGQ5Vx1Lkl0wKuKbXM=
-----END RSA PRIVATE KEY-----


python 補全html href_數據庫_08



命令



rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem



是用於生成RSA公鑰,執行後在程序目錄中生成一個文件rsa_public_key.pem,其內容如下



python 補全html href_數據庫_08


-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyffRONGd8Q/1kRh1cpsSRi360
DXLHI7zxdPJGYe5HKDWF7u9b3zZU9erZpM90XE7gZRKsxIgOurH4uqhmVRbto3e+
LiYOyNpd6As3Q427KCTIT7ajhHicZ6GWhegTUiVLqiuWLsauQcbI6DO4GEZrlvAd
zus0WcJiJOxW02rxSQIDAQAB
-----END PUBLIC KEY-----


python 補全html href_數據庫_08



生成的這個RSA公鑰,需要填寫到應用中去,填寫地址如下所示。私鑰不需要填到配置中,到時候配置到代碼中。

python 補全html href_python 補全html href_12

 特別注意,密鑰要去掉註釋部分,且轉換成一行字符,否則回車換行也成為密鑰的一部分,將導致無法正常加解密。

python 補全html href_json_13

 同時,可以點擊 “查看支付寶公鑰”,將支付寶的公鑰複製保存下來,後面的程序中將需要用到。

python 補全html href_python 補全html href_14

 

四、密鑰生成API與密鑰配置

公共參數



環境

HTTPS請求地址

正式環境

https://openapi.alipay.com/gateway.do

公共請求參數:


參數

類型

是否必填

最大長度

描述

app_id

String


32

支付寶分配給開發者的應用ID

method

String


128

接口名稱

format

String


40

僅支持JSON

charset

String


10

請求使用的編碼格式,如utf-8,gbk,gb2312等

sign_type

String


10

商户生成簽名字符串所使用的簽名算法類型,目前支持RSA

sign

String


256

商户請求參數的簽名串,詳見簽名

timestamp

String


19

發送請求的時間,格式"yyyy-MM-dd HH:mm:ss"

version

String


3

調用的接口版本,固定為:1.0

notify_url

String


256

支付寶服務器主動通知商户服務器裏指定的頁面http/https路徑。

app_auth_token

String


40

詳見應用授權概述

biz_content

String


-

請求參數的集合,最大長度不限,除公共參數外所有請求參數都必須放在這個參數中傳遞,具體參照各產品快速接入文檔



請求參數



參數

類型

是否必填

最大長度

描述

out_trade_no

String

必須

64

商户訂單號,64個字符以內、可包含字母、數字、下劃線;需保證在商户端不重複

scene

String

必須

32

支付場景 條碼支付,取值:bar_code 聲波支付,取值:wave_code

auth_code

String

必須

32

支付授權碼

seller_id

String

可選

28

如果該值為空,則默認為商户簽約賬號對應的支付寶用户ID

total_amount

Price

可選

11

訂單總金額,單位為元,

discountable_amount

Price

可選

11

參與優惠計算的金額,單位為元

undiscountable_amount

Price

可選

11

不參與優惠計算的金額,單位為元

subject

String

必須

256

訂單標題

body

String

可選

128

訂單描述

goods_detail

GoodsDetail []

可選

-

訂單包含的商品列表信息,Json格式,其它説明詳見商品明細説明

operator_id

String

可選

28

商户操作員編號

store_id

String

可選

32

商户門店編號

terminal_id

String

可選

32

商户機具終端編號

alipay_store_id

String

可選

32

支付寶的店鋪編號

extend_params

ExtendParams

可選

-

業務擴展參數

timeout_express

String

可選

6

該筆訂單允許的最晚付款時間,逾期將關閉交易。

royalty_info

RoyaltyInfo

可選

-

描述分賬信息,Json格式,其它説明詳見分賬説明

sub_merchant

SubMerchant

可選

-

二級商户信息,當前只對特殊銀行機構特定場景下使用此字段



公共響應參數



參數

類型

是否必填

最大長度

描述

code

String


-

網關返回碼,詳見文檔

msg

String


-

網關返回碼描述,詳見文檔

sub_code

String


-

業務返回碼,詳見文檔

sub_msg

String


-

業務返回碼描述,詳見文檔

sign

String


-

簽名,詳見文檔



響應參數



參數

類型

是否必填

最大長度

描述

trade_no

String

必填

64

支付寶交易號

out_trade_no

String

必填

64

商户訂單號

buyer_logon_id

String

必填

100

買家支付寶賬號

total_amount

Price

必填

11

交易金額

receipt_amount

String

必填

11

實收金額

buyer_pay_amount

Price

選填

11

買家付款的金額

point_amount

Price

選填

11

使用積分寶付款的金額

invoice_amount

Price

選填

11

交易中可給用户開具發票的金額

gmt_payment

Date

必填

32

交易支付時間

fund_bill_list

TradeFundBill []

必填

-

交易支付使用的資金渠道

card_balance

Price

選填

11

支付寶卡餘額

store_name

String

選填

512

發生支付交易的商户門店名稱

buyer_user_id

String

必填

28

買家在支付寶的用户id

discount_goods_detail

String

必填

-

本次交易支付所使用的單品券優惠的商品優惠信息



 

系統中配置如下



python 補全html href_數據庫_08



<?php
$config = array (    
    //支付寶公鑰
    'alipay_public_key' => "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrIvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsraprwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh2QhUrCmZYI/FCEa3/cNMW0QIDAQAB",

    //商户私鑰
    'merchant_private_key' => "MIICXAIBAAKBgQCyffRONGd8Q/1kRh1cpsSRi360DXLHI7zxdPJGYe5HKDWF7u9b3zZU9erZpM90XE7gZRKsxIgOurH4uqhmVRbto3e+LiYOyNpd6As3Q427KCTIT7ajhHicZ6GWhegTUiVLqiuWLsauQcbI6DO4GEZrlvAdzus0WcJiJOxW02rxSQIDAQABAoGAXBJYyVaC4zj3Jph8YOStlR5N13bwdATdW/glWWT+0rnNEi90TQHRNvY7lNVNJgrPrTS182TVgjOPxmwSnebakhIuGIdPq99GLE4LGd5lKWTzkd84BMvhatfNsCCzcEVFqKg3tZd4t3fQ93FrILsnnZpLhiW53jIrStCkR3rx9OECQQDWMSHyc91hEVMQqVNasbGEicKWxhoDqjdm2lHkBx4mrB9JEZFDs6MxWdajf2/Qw+tgtpN3YBcCDw/HnGHhQtStAkEA1VTyjOdAwWode8X4fu0IPq9+E19mcVOAJjLBH46mropwgOdj3raqT/ThaKeaydjabsTAiY2J18HiTiyH+1bGjQJBAKgRJXH5OFxSG7uXIbCofYJiFi34g7EcfxxVcqxaaW4u4N2Uy0c0TXkL5T+lXzeQg8D/gfbJj0QuTVNzgdofdoECQBHYOznCFk6Xe8PguXqUhT4JG/iu4DjWjT+kuzbSjerHtcVylY4JpZFuoHRKoM4Fj6/4UUqwRjmABFgZrX4+sfkCQCNI8RCZ6yprh5kEOePo3uazAlNENP8dKkhgqChawdK77NzlJ727Nt23STHFx6NkhzyruJGQ5Vx1Lkl0wKuKbXM=",

    //編碼格式
    'charset' => "UTF-8",

    //支付寶網關
    'gatewayUrl' => "https://openapi.alipay.com/gateway.do",

    //應用ID
    'app_id' => "2016061501500000",

    //異步通知地址,只有掃碼支付預下單可用
    'notify_url' => "http://www.fangbei.org/alipay/notify.html",

    //最大查詢重試次數
    'MaxQueryRetry' => "10",

    //查詢間隔
    'QueryDuration' => "3"
);


python 補全html href_數據庫_08



其中支付寶公鑰就是在前面中複製保存的,直接複製到程序中即可,而商户私鑰是之前OpenSSL中生成的私鑰。APPID是該服務的id號。

而這個異步通知將會接收掃碼支付結果的通知。

 

 

五、條碼支付、掃碼支付、訂單查詢、退款申請

1. 條碼支付

條碼支付的參數配置如下


// (必填) 商户網站訂單系統中唯一訂單號,64個字符以內,只能包含字母、數字、下劃線,
// 需保證商户系統端不能重複,建議通過數據庫sequence生成,
$outTradeNo = "barpay" . date('Ymdhis') . mt_rand(100, 1000);
$subject = "方倍工作室-支付寶-當面付-條碼支付";
$totalAmount = 0.01;    // (必填) 訂單總金額,單位為元,不能超過1億元

// (必填) 付款條碼,用户支付寶錢包手機app點擊“付款”產生的付款條碼
$authCode = $_POST['auth_code']; //28開頭18位數字

// 支付超時,線下掃碼交易定義為5分鐘
$timeExpress = "5m";

// 創建請求builder,設置請求參數
$barPayRequestBuilder = new AlipayTradePayContentBuilder();
$barPayRequestBuilder->setOutTradeNo($outTradeNo);
$barPayRequestBuilder->setTotalAmount($totalAmount);
$barPayRequestBuilder->setAuthCode($authCode);
$barPayRequestBuilder->setTimeExpress($timeExpress);
$barPayRequestBuilder->setSubject($subject);
// 調用barPay方法獲取當面付應答
$barPay = new AlipayTradeService($config);
$barPayResult = $barPay->barPay($barPayRequestBuilder);

switch ($barPayResult->getTradeStatus()) {
    case "SUCCESS":
        echo "支付寶支付成功:" . "<br>--------------------------<br>";
        print_r($barPayResult->getResponse());
        break;
    case "FAILED":
        echo "支付寶支付失敗!!!" . "<br>--------------------------<br>";
        if (!empty($barPayResult->getResponse())) {
            print_r($barPayResult->getResponse());
        }
        break;
    case "UNKNOWN":
        echo "系統異常,訂單狀態未知!!!" . "<br>--------------------------<br>";
        if (!empty($barPayResult->getResponse())) {
            print_r($barPayResult->getResponse());
        }
        break;
    default:
        echo "不支持的交易狀態,交易返回異常!!!";
        break;
}
    return;
}

python 補全html href_數據庫_08


程序監測,最終提交的url如下



https://openapi.alipay.com/gateway.do?app_id=2016061501500000&version=1.0&format=json&sign_type=RSA&method=alipay.trade.pay×tamp=2016-08-26+17%3A14%3A52&auth_token=&alipay_sdk=alipay-sdk-php-20160411&terminal_type=&terminal_info=&prod_code=¬ify_url=&charset=UTF-8&app_auth_token=&sign=EMVoBAhPkW6B1m%2BoXytdbUpIxnIAq73jtiPhlH2VUYy4OcJQ2UiVTXWttw0y%2B7UEXHWILY8fYRDoNrJWSjBATrAqbGCLpPc4YBQSwtPCb%2F76d65dMQEyrEnk2sgcqhxCiJNKRoQjgAQmBQdHneerU7SwSNJ%2FfF%2F025yltZk5lzQ%3D



發送的json數據如下:



python 補全html href_數據庫_08



{
    "scene":"bar_code",
    "out_trade_no":"barpay20160826051452680",
    "total_amount":0.01,
    "auth_code":"289743098358423535",
    "timeout_express":"5m",
    "subject":"方倍工作室-支付寶-當面付-條碼支付"
}



python 補全html href_數據庫_08



接收到的數據如下


{
    "alipay_trade_pay_response":{
        "code":"10000",
        "msg":"Success",
        "buyer_logon_id":"118***@qq.com",
        "buyer_pay_amount":"0.01",
        "buyer_user_id":"2088002364008751",
        "fund_bill_list":[
            {
                "amount":"0.01",
                "fund_channel":"ALIPAYACCOUNT"
            }
        ],
        "gmt_payment":"2016-08-26 17:14:59",
        "invoice_amount":"0.01",
        "open_id":"20880044751374809757987911112575",
        "out_trade_no":"barpay20160826051452680",
        "point_amount":"0.00",
        "receipt_amount":"0.01",
        "total_amount":"0.01",
        "trade_no":"2016082621001004750244100034"
    },
    "sign":"pEDeMwh6x73t9LmWrZpGnVb1npnKtODw6+8MDUTurNPVWXR1JHT+x3cRt2G4SDNHzxkJTzSpUXjNylsWisRTnQJJzqRP5XMujxmaAHP/d5xXeyWasDag5Cj7yGD7t80buDAsdE4eoqQ6ox7KzJ6LwKcphOX13tI+Ukt1dGCQS5o="
}


python 補全html href_數據庫_08



 

2. 掃碼支付

掃碼支付的參數配置如下

// (必填) 商户網站訂單系統中唯一訂單號,64個字符以內,只能包含字母、數字、下劃線,
// 需保證商户系統端不能重複,建議通過數據庫sequence生成,
$outTradeNo = "qrpay".date('Ymdhis').mt_rand(100,1000);
$subject = "方倍工作室-支付寶-當面付-掃碼支付";
$totalAmount = "0.01";

// 支付超時,線下掃碼交易定義為5分鐘
$timeExpress = "5m";

// 創建請求builder,設置請求參數
$qrPayRequestBuilder = new AlipayTradePrecreateContentBuilder();
$qrPayRequestBuilder->setOutTradeNo($outTradeNo);
$qrPayRequestBuilder->setTotalAmount($totalAmount);
$qrPayRequestBuilder->setTimeExpress($timeExpress);
$qrPayRequestBuilder->setSubject($subject);

// 調用qrPay方法獲取當面付應答
$qrPay = new AlipayTradeService($config);
$qrPayResult = $qrPay->qrPay($qrPayRequestBuilder);

//    根據狀態值進行業務處理
switch ($qrPayResult->getTradeStatus()){
    case "SUCCESS":
        echo "支付寶創建訂單二維碼成功:"."<br>---------------------------------------<br>";
        $response = $qrPayResult->getResponse();
        $qrcode = $qrPay->create_erweima($response->qr_code);
        echo $qrcode;
        print_r($response);
        
        break;
    case "FAILED":
        echo "支付寶創建訂單二維碼失敗!!!"."<br>--------------------------<br>";
        if(!empty($qrPayResult->getResponse())){
            print_r($qrPayResult->getResponse());
        }
        break;
    case "UNKNOWN":
        echo "系統異常,狀態未知!!!"."<br>--------------------------<br>";
        if(!empty($qrPayResult->getResponse())){
            print_r($qrPayResult->getResponse());
        }
        break;
    default:
        echo "不支持的返回狀態,創建訂單二維碼返回異常!!!";
        break;
}


生成的提交請求URL如下

https://openapi.alipay.com/gateway.do?app_id=2016061501500000&versinotallow=1.0&format=json&sign_type=RSA&method=alipay.trade.precreate×tamp=2016-08-26+17%3A38%3A13&auth_token=&alipay_sdk=alipay-sdk-php-20160411&terminal_type=&terminal_info=&prod_code=¬ify_url=http%3A%2F%2F123.daoqidata.com%2Fweixin%2Frawpost.php&charset=UTF-8&app_auth_token=&sign=ayYiJRZ63RomVEt8Ayz58Uiyv3y5IrbbX8CTfX6zNHkT%2Fu11U7ISUYWCXjrwrwCo2Oq2tdo%2FjtuhrBbDp5ULnTmuBBUktQDCCF53PF5yiUDGikxUPFYugeUrTg3gw4DqxOiNKM6ZB6MI0n%2F9M78a%2FnP8GtZ4WthyHIl%2B%2FozSyT4%3D


發送的json數據如下:



{
    "out_trade_no":"qrpay20160826053813582",
    "total_amount":"0.01",
    "timeout_express":"5m",
    "subject":"方倍工作室-支付寶-當面付-掃碼支付"
}

python 補全html href_數據庫_08



返回的數據如下:

{
    "alipay_trade_precreate_response":{
        "code":"10000",
        "msg":"Success",
        "out_trade_no":"qrpay20160826053813582",
        "qr_code":"https://qr.alipay.com/bax00885xbhszseo9l7p404d"
    },
    "sign":"VfNTGo2WMZ+2CE1L05lNYWtFn4inHXO/tUaBZIBHN4fPlXnCvyc9IhS8S7wa3FYw23G30luEPEHkZWobnfpUjILonmExZVElHv3ylINz+Q2mQ5M8Sb/d61YPvf4Bgy1OvlrT4D3H/i3judmzEDBrOyFN9kB9vSkKaYC+b6L41Zw="
}


python 補全html href_數據庫_08

{
    "notify_id":"4c2c04c3cc50e978d44212febe7c3f0lse",
    "seller_email":"pay***@fangbei.org",
    "notify_type":"trade_status_sync",
    "sign":"R0iRdYmSQ0+zuSUGLzkutHcR40hoOp+CcKojVBCMa1uji3rqQFe5XeHoJB1nMBCApE3zXPKhXMdLis109ngPbGy+NUEBR7YZjYuR/hXq3WXeYfZ8aiWLvloZHrF7dQWxDho/VHYexaLeqvRi/03m0HxrwhZKUOu1eS9wMgZOlqQ=",
    "trade_no":"2016082621001004750241229810",
    "buyer_id":"2088002364008751",
    "app_id":"2016061501500000",
    "gmt_create":"2016-08-26 18:20:37",
    "out_trade_no":"qrpay20160826062009757",
    "seller_id":"2088421202724253",
    "notify_time":"2016-08-26 18:20:37",
    "subject":"方倍工作室-支付寶-當面付-掃碼支付",
    "trade_status":"WAIT_BUYER_PAY",
    "open_id":"20880044751374809757987911112575",
    "total_amount":"0.01",
    "sign_type":"RSA",
    "buyer_logon_id":"118***@qq.com"
}

當用户輸入密碼付款成功之後,將收到如下數據

{
    "fund_bill_list":"[{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}]",
    "subject":"方倍工作室-支付寶-當面付-掃碼支付",
    "trade_no":"2016082621001004750241229810",
    "gmt_create":"2016-08-26 18:20:37",
    "notify_type":"trade_status_sync",
    "total_amount":"0.01",
    "out_trade_no":"qrpay20160826062009757",
    "invoice_amount":"0.01",
    "open_id":"20880044751374809757987911112575",
    "seller_id":"2088421202724253",
    "notify_time":"2016-08-26 18:20:50",
    "trade_status":"TRADE_SUCCESS",
    "gmt_payment":"2016-08-26 18:20:50",
    "seller_email":"pay***@fangbei.org",
    "receipt_amount":"0.01",
    "buyer_id":"2088002364008751",
    "app_id":"2016061501500000",
    "notify_id":"56f97611ee609f46384b188b409e75else",
    "buyer_logon_id":"118***@qq.com",
    "sign_type":"RSA",
    "buyer_pay_amount":"0.01",
    "sign":"nf/KJryACk0utqlNrnuYMiSnYw6HsxqpJPk2O5MhCZ+wZUVQbrD3sq5POO3GU7LSRoSiUUIO4JEYEL12Ek2+w3lTcLS9WEi60sYowPOcJEYGmVfNZbVR6+k7yO5au2WIkM3MKsxm2XxIB9xPMmRDACGhvqZ2BXUAQujkPk1FT0s=",
    "point_amount":"0.00"
}

 

3. 訂單查詢

訂單查詢的參數配置如下


獲取商户訂單號
$out_trade_no = trim($_POST['out_trade_no']);

//第三方應用授權令牌,商户授權系統商開發模式下使用
$appAuthToken = "";//根據真實值填寫

//構造查詢業務請求參數對象
$queryContentBuilder = new AlipayTradeQueryContentBuilder();
$queryContentBuilder->setOutTradeNo($out_trade_no);

$queryContentBuilder->setAppAuthToken($appAuthToken);


//初始化類對象,調用queryTradeResult方法獲取查詢應答
$queryResponse = new AlipayTradeService($config);
$queryResult = $queryResponse->queryTradeResult($queryContentBuilder);

//根據查詢返回結果狀態進行業務處理
switch ($queryResult->getTradeStatus()){
    case "SUCCESS":
        echo "支付寶查詢交易成功:"."<br>--------------------------<br>";
        print_r($queryResult->getResponse());
        break;
    case "FAILED":
        echo "支付寶查詢交易失敗或者交易已關閉!!!"."<br>--------------------------<br>";
        if(!empty($queryResult->getResponse())){
            print_r($queryResult->getResponse());
        }
        break;
    case "UNKNOWN":
        echo "系統異常,訂單狀態未知!!!"."<br>--------------------------<br>";
        if(!empty($queryResult->getResponse())){
            print_r($queryResult->getResponse());
        }
        break;
    default:
        echo "不支持的查詢狀態,交易返回異常!!!";
        break;
}

python 補全html href_數據庫_08



最終提交的url如下


https://openapi.alipay.com/gateway.do?app_id=2016061501500000&version=1.0&format=json&sign_type=RSA&method=alipay.trade.query×tamp=2016-08-26+18%3A27%3A07&auth_token=&alipay_sdk=alipay-sdk-php-20160411&terminal_type=&terminal_info=&prod_code=¬ify_url=&charset=UTF-8&app_auth_token=&sign=eIuYJtes95quAN3X9eXbQzBa%2FCvm5QgQ0ToUsS8MSkCjhZACYpnU7ZT5MuD31lPZPFHVEjCKsdWiq4tuNtJPFPxirg7pkTiT09C%2Bz8PsUA844Y7hjkkX%2B4CVZcGtO11m3Ap0JECrtZW8hhJTE9bPY1v43X2BSL5Cp3Ulpac1FsM%3D

發送的json數據如下:


{
    "out_trade_no":"qrpay20160826053813582"
}


接收到的數據如下


{
    "alipay_trade_query_response":{
        "code":"10000",
        "msg":"Success",
        "buyer_logon_id":"118***@qq.com",
        "buyer_pay_amount":"0.01",
        "buyer_user_id":"2088002364008751",
        "fund_bill_list":[
            {
                "amount":"0.01",
                "fund_channel":"ALIPAYACCOUNT"
            }
        ],
        "invoice_amount":"0.01",
        "open_id":"20880044751374809757987911112575",
        "out_trade_no":"qrpay20160826053813582",
        "point_amount":"0.00",
        "receipt_amount":"0.01",
        "send_pay_date":"2016-08-26 17:38:58",
        "total_amount":"0.01",
        "trade_no":"2016082621001004750239053830",
        "trade_status":"TRADE_SUCCESS"
    },
    "sign":"E2MxjdAhW/EqRFNkZgy/Y//dA5Cmb54Hnqa0cjBz+ZcFTULi1lvFms93onP7cpVK/fI7YxbkZTKBPk29o4aeWKXlSYCrT92domAyqahzYCA7/5A3Msc/awALYrFOdWyJJdlncWdFRN9hx52iVRIjxvLJ0hIMVIQqEDavG28HPbo="
}

4. 訂單退款

訂單退款的參數配置如下

$out_trade_no = trim($_POST['out_trade_no']);
$refund_amount = trim($_POST['refund_amount']);
$out_request_no = trim($_POST['out_request_no']);

//第三方應用授權令牌,商户授權系統商開發模式下使用
$appAuthToken = "";//根據真實值填寫

//創建退款請求builder,設置參數
$refundRequestBuilder = new AlipayTradeRefundContentBuilder();
$refundRequestBuilder->setOutTradeNo($out_trade_no);
$refundRequestBuilder->setRefundAmount($refund_amount);
$refundRequestBuilder->setOutRequestNo($out_request_no);

$refundRequestBuilder->setAppAuthToken($appAuthToken);

//初始化類對象,調用refund獲取退款應答
$refundResponse = new AlipayTradeService($config);
$refundResult =    $refundResponse->refund($refundRequestBuilder);

//根據交易狀態進行處理
switch ($refundResult->getTradeStatus()){
    case "SUCCESS":
        echo "支付寶退款成功:"."<br>--------------------------<br>";
        print_r($refundResult->getResponse());
        break;
    case "FAILED":
        echo "支付寶退款失敗!!!"."<br>--------------------------<br>";
        if(!empty($refundResult->getResponse())){
            print_r($refundResult->getResponse());
        }
        break;
    case "UNKNOWN":
        echo "系統異常,訂單狀態未知!!!"."<br>--------------------------<br>";
        if(!empty($refundResult->getResponse())){
            print_r($refundResult->getResponse());
        }
        break;
    default:
        echo "不支持的交易狀態,交易返回異常!!!";
        break;
}

最終提交的url如下


https://openapi.alipay.com/gateway.do?app_id=2016061501500000&version=1.0&format=json&sign_type=RSA&method=alipay.trade.refund×tamp=2016-08-26+18%3A47%3A35&auth_token=&alipay_sdk=alipay-sdk-php-20160411&terminal_type=&terminal_info=&prod_code=¬ify_url=&charset=UTF-8&app_auth_token=&sign=Y1c5qWglAQ0t3brViEtqFnIJRQMn%2Fl9vMla1xgXKcExercJopMyS2rPOHaw%2F2PJEOKJC7r9qAfDGkNq4LHzXhBrD8sxLPqImPS6aWcW9p8s%2FzC2oQCJnLfaPx6lh8veHarj4WzDayeZLA48ttoQLjuMGPrITgOXYjHHyUKdBqSs%3D

發送的json數據如下:


{
    "out_trade_no":"qrpay20160826053813582",
    "refund_amount":"0.01",
    "out_request_no":"1"
}

接收到的數據如下


{
    "alipay_trade_refund_response":{
        "code":"10000",
        "msg":"Success",
        "buyer_logon_id":"123***@qq.com",
        "buyer_user_id":"2088002364008751",
        "fund_change":"Y",
        "gmt_refund_pay":"2016-08-26 18:47:41",
        "open_id":"20880044751374809757987911112575",
        "out_trade_no":"qrpay20160826053813582",
        "refund_detail_item_list":[
            {
                "amount":"0.01",
                "fund_channel":"ALIPAYACCOUNT"
            }
        ],
        "refund_fee":"0.01",
        "send_back_fee":"0.01",
        "trade_no":"2016082621001004750239053830"
    },
    "sign":"YDNSMpX5y0rQEs0ZbfNxRFVIp8hf0W30OR74cMtwKVPO2BYee6TQC+pbnwESSZ2XSGLozTyy7o+SIa07L+FMhDv/PTt6QX1mVgQv7RhzoDkls0zDRS/5/fy9Oyj01XS1wb8Od/93iNLZDkd2yw9g0He6qGYlpcXutkmwuASd7BM="
}