您好,登錄后才能下訂單哦!
如何開發支付寶支付中的當面付條碼支付和掃碼支付,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
一、條碼支付及二維碼支付介紹
1. 條碼支付
條碼支付是支付寶給到線下傳統行業的一種收款方式。商家使用掃碼槍等條碼識別設備掃描用戶支付寶錢包上的條碼/二維碼,完成收款。用戶僅需出示付款碼,所有收款操作由商家端完成。其使用場景如下:
業務流程:
使用步驟:
用戶登陸支付寶錢包,點擊首頁“付款”,進入付款碼界面;
收銀員在商家收銀系統操作生成訂單,用戶確認支付金額;
用戶出示錢包的“付款碼”,收銀員用掃碼設備來掃描用戶手機上的條碼/二維碼后,商家收銀系統提交支付;
付款成功后商家收銀系統會拿到支付成功或者失敗的結果。
2. 掃碼支付
掃碼支付,指用戶打開支付寶錢包中的“掃一掃”功能,掃描商家展示在某收銀場景下的二維碼并進行支付的模式。該模式適用于線下實體店支付、面對面支付等場景。
其使用場景如下:
業務流程:
使用步驟:
用戶登陸支付寶錢包,點擊首頁“付款-掃碼付”,進入掃一掃界面;
收銀員在商家收銀系統操作生成支付寶訂單,用戶確認支付金額,并生成二維碼;
用戶使用錢包的“掃碼付”,掃收銀員提供的二維碼,確認支付;
用戶付款后商家收銀系統會拿到支付成功或者失敗的結果。
二、接口申請
企業在申請企業支付寶之后,進行功能申請并簽約,然后在螞蟻金服開放平臺中申請應用如下(詳細過程就略了)
然后在功能列表中,申請當面付這一功能,申請成功后如下。
這樣,我們就有了當面付的權限了。
三、密鑰生成
在支付寶當面付的接口中,使用了非對稱加密算法,商戶自己的公鑰和私鑰需要自己使用OpenSSL手動生成。對這些概念比較陌生的話,請先自行先了解一下密碼學的相關知識。OpenSSL也可以從方倍工作室博客中找到。
下載支付寶官方提供的密鑰生成工具OpenSSL,然后執行以下命令就可以生成公鑰和私鑰。
其中
genrsa -out rsa_private_key.pem 1024
是用于生成RSA私鑰,執行后在程序目錄中生成一個文件rsa_private_key.pem,其內容如下
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCyffRONGd8Q/1kRh2cpsSRi360DXLHI7zxdPJGYe5HKDWF7u9b
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+sfkCQCNI8RCZ6yprh6kEOePo3uazAlNENP8dKkhgqChawdK7
7NzlJ727Nt23STHFx6NkhzyruJGQ5Vx1Lkl0wKuKbXM=
-----END RSA PRIVATE KEY-----
命令
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
是用于生成RSA公鑰,執行后在程序目錄中生成一個文件rsa_public_key.pem,其內容如下
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyffRONGd8Q/1kRh2cpsSRi360
DXLHI7zxdPJGYe5HKDWF7u9b3zZU9erZpM90XE7gZRKsxIgOurH4uqhmVRbto3e+
LiYOyNpd6As3Q427KCTIT7ajhHicZ6GWhegTUiVLqiuWLsauQcbI6DO4GEZrlvAd
zus0WcJiJOxW02rxSQIDAQAB
-----END PUBLIC KEY-----
生成的這個RSA公鑰,需要填寫到應用中去,填寫地址如下所示。私鑰不需要填到配置中,到時候配置到代碼中。
特別注意,密鑰要去掉注釋部分,且轉換成一行字符,否則回車換行也成為密鑰的一部分,將導致無法正常加解密。
同時,可以點擊 “查看支付寶公鑰”,將支付寶的公鑰復制保存下來,后面的程序中將需要用到。
四、密鑰生成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 | 訂單描述 |
GoodsDetail [] | 可選 | - | 訂單包含的商品列表信息,Json格式,其它說明詳見商品明細說明 | |
operator_id | String | 可選 | 28 | 商戶操作員編號 |
store_id | String | 可選 | 32 | 商戶門店編號 |
terminal_id | String | 可選 | 32 | 商戶機具終端編號 |
alipay_store_id | String | 可選 | 32 | 支付寶的店鋪編號 |
ExtendParams | 可選 | - | 業務擴展參數 | |
timeout_express | String | 可選 | 6 | 該筆訂單允許的最晚付款時間,逾期將關閉交易。 |
RoyaltyInfo | 可選 | - | 描述分賬信息,Json格式,其它說明詳見分賬說明 | |
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 | 交易支付時間 |
TradeFundBill [] | 必填 | - | 交易支付使用的資金渠道 | |
card_balance | Price | 選填 | 11 | 支付寶卡余額 |
store_name | String | 選填 | 512 | 發生支付交易的商戶門店名稱 |
buyer_user_id | String | 必填 | 28 | 買家在支付寶的用戶id |
discount_goods_detail | String | 必填 | - | 本次交易支付所使用的單品券優惠的商品優惠信息 |
系統中配置如下
<?php $config = array ( //支付寶公鑰 'alipay_public_key' => "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDI6d306Q8fIfCOaTXyiUeJHkrIvYISRcc73s3vF1ZT7XN8RNPwJxo8pWaJMmvyTn9N4HQ632qJBVHf8sxHi/fEsraprwCtzvzQETrNRwVxLO5jVmRGi60j8Ue1efIlzPXV9je9mkjzOmdssymZkh3QhUrCmZYI/FCEa3/cNMW0QIDAQAB", //商戶私鑰 'merchant_private_key' => "MIICXAIBAAKBgQCyffRONGd8Q/1kRh2cpsSRi360DXLHI7zxdPJGYe5HKDWF7u9b3zZU9erZpM90XE7gZRKsxIgOurH4uqhmVRbto3e+LiYOyNpd6As3Q427KCTIT7ajhHicZ6GWhegTUiVLqiuWLsauQcbI6DO4GEZrlvAdzus0WcJiJOxW02rxSQIDAQABAoGAXBJYyVaC4zj3Jph8YOStlR5N13bwdATdW/glWWT+0rnNEi90TQHRNvY7lNVNJgrPrTS182TVgjOPxmwSnebakhIuGIdPq99GLE4LGd5lKWTzkd84BMvhatfNsCCzcEVFqKg3tZd4t3fQ93FrILsnnZpLhiW53jIrStCkR3rx9OECQQDWMSHyc91hEVMQqVNasbGEicKWxhoDqjdm2lHkBx4mrB9JEZFDs6MxWdajf2/Qw+tgtpN3YBcCDw/HnGHhQtStAkEA1VTyjOdAwWode8X4fu0IPq9+E19mcVOAJjLBH46mropwgOdj3raqT/ThaKeaydjabsTAiY2J18HiTiyH+1bGjQJBAKgRJXH5OFxSG7uXIbCofYJiFi34g7EcfxxVcqxaaW4u4N2Uy0c0TXkL5T+lXzeQg8D/gfbJj0QuTVNzgdofdoECQBHYOznCFk6Xe8PguXqUhT4JG/iu4DjWjT+kuzbSjerHtcVylY4JpZFuoHRKoM4Fj6/4UUqwRjmABFgZrX4+sfkCQCNI8RCZ6yprh6kEOePo3uazAlNENP8dKkhgqChawdK77NzlJ727Nt23STHFx6NkhzyruJGQ5Vx1Lkl0wKuKbXM=", //編碼格式 '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" );
其中支付寶公鑰就是在前面中復制保存的,直接復制到程序中即可,而商戶私鑰是之前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; }
程序監測,最終提交的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數據如下:
{ "scene":"bar_code", "out_trade_no":"barpay20160826051452680", "total_amount":0.01, "auth_code":"289743098358423535", "timeout_express":"5m", "subject":"方倍工作室-支付寶-當面付-掃碼支付" }
接收到的數據如下
{ "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":"pEDeMwh7x73t9LmWrZpGnVb1npnKtODw6+8MDUTurNPVWXR1JHT+x3cRt2G4SDNHzxkJTzSpUXjNylsWisRTnQJJzqRP5XMujxmaAHP/d5xXeyWasDag5Cj7yGD7t80buDAsdE4eoqQ6ox7KzJ6LwKcphOX13tI+Ukt1dGCQS5o=" }
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&version=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":"方倍工作室-支付寶-當面付-掃碼支付" }
返回的數據如下:
{ "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=" }
其中的https://qr.alipay.com/bax00885xbhszseo9l7p404d 就是二維碼鏈接地址,使用接口將其成二維碼后。
當支付寶用戶掃碼的時候,接口通知將收到如下數據
{ "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; }
最終提交的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=" }
關于如何開發支付寶支付中的當面付條碼支付和掃碼支付問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。