請求路徑 : api/pay/cashierOrder
請求方式 : POST
請求類型 : application/json
or application/x-www-form-urlencoded
請求參數
參數 | 描述 | 範例 |
---|---|---|
mchNo | 必填.商家編號,在管理後台可查看。 | M1621873433953 |
appId | 必填.在管理後台可查看。 | 60cc09bce4b0f1c0b83761c9 |
mchOrderNo | 必填。商家產生的訂單號碼。 | 20160427210604000490 |
amount | 必填.付款金額,单位:分 注意只支持2位精度,乘以100后使用Integer類型。 | 100 |
currency | 必填。三位數貨幣代碼 | cny |
reqTime | 必填。請求API時間,13位時間戳。 | 1622016572190 |
registerTime | 必填.客戶註冊時間(V1.1.0新增) | 1622016572190 |
custNo | 必填.客戶唯一編號(V1.1.0新增) | C200492312 |
version | 必填 版本號,當前接口支持最低版本為:1.1。 | 1.1 |
signType | 必填。簽名類型,目前僅支援MD5方式。 | MD5 |
sign | 必填。簽名值,詳細請參考請求簽名。 | C380BEC2BFD727A4B6845133519F3AD6 |
wayCode | 保留字段,不用传值。指定付款方式,即在收銀台不展示其他支付方式。 支付方式列表 。注意如果開通了專屬收銀檯,必須開通ALI_WAP或ALI_JSAPI支付方式。 | |
subject | 產品標題(保留欄位,當前版本不要傳值。) | 商品 |
body | 產品描述(保留欄位,當前版本不要傳值。) | 0 |
userName | 發起付款的用戶真實姓名。 | 張三 |
mbrTel | 發起付款用戶的手機號碼 | 13812341234 |
idNo | 發起付款用戶的身份證號碼 | 320681198603213312 |
notifyUrl | 支付結果回調通知URL,只有傳入該值才會啟動通知 | https://www.yourserver.com/notify.htm |
returnUrl | 支付完成後跳轉URL | https://www.yourserver.com/return.htm |
expiredTime | 訂單過期時間,單位秒。不傳或小於15分鐘將設置為15分鐘。 | 3600 |
extParam | 商家擴充參數,回調時原樣返回 | 134586944573118714 |
請求範例:
{
"amount": 8,
"extParam": "",
"mchOrderNo": "mho1624005107281",
"sign": "84F606FA25A6EC4783BECC08D4FDC681",
"reqTime": "1624005107",
"version": "1.0",
"channelExtra": "{\"authCode\":\"280812820366966512\"}",
"appId": "60cc09bce4b0f1c0b83761c9",
"notifyUrl": "https://www.paypass.com",
"signType": "MD5",
"currency": "cny",
"returnUrl": "",
"mchNo": "M1623984572"
}
回應參數
參數 | 必填 | 範例 | 描述 |
---|---|---|---|
code | 是 | 0 | 0-處理成功,其他-處理錯誤,具體參見錯誤碼 |
msg | 否 | Signing failure | 具體錯誤原因,如:簽名失敗、參數格式校驗錯誤 |
sign | 否 | CCD9083A6DAD9A2DA9F668C3D4517A84 | 對資料中的資料進行簽名。如果資料為空,則不會傳回。 |
data | 否 | {} | 返回支付訂單,json格式資料。請參閱下面支付訂單 |
支付訂單:
參數名稱 | 範例 | 描述 |
---|---|---|
payOrderId | U12021022311124442600 | 必填.返回付款系統訂單編號 |
mchOrderNo | 20160427210604000490 | 必填返回商家傳入的訂單編號 |
orderState | 2 | 必填付款訂單狀態 0-已產生訂單 1-付款中 2-付款成功 3-付款失敗 4-已取消 5-已退款 6-訂單已關閉 |
payDataType | payUrl | 必填付款參數類型 payUrl-跳轉連結方式 |
payData | https://cashier.pass2pay.io/api/scan/imgs/aa.png | 收銀台url |
errCode | ACQ.PAYMENT_AUTH_CODE_INVALID | 通道傳回的錯誤碼 |
errMsg | Business Failed | 通道傳回的錯誤描述 |
回應樣本
{
"code": 0,
"data": {
"mchOrderNo": "D202405220002",
"orderState": 0,
"payData": "https://cashier.passtopay.com/wayCode?payOrderToken=408e2d8d6b7b0911d12cf220e48175d9768b7cd5142a8d2e7e64b948e6c75646",
"payDataType": "payurl",
"payOrderId": "P1793544595691261954"
},
"msg": "SUCCESS",
"sign": "65EBF84B61764231EF24F49F25AE3E84",
"traceId": "f16bb12607ff4987b8dbe8bedc4fb99f"
}
{
"code": 0,
"data": {
"mchOrderNo": "D202405220002",
"orderState": 0,
"payData": "alipays://platformapi/startapp?appId=20000067&url=https%3A%2F%2Fcashier-pre.xibaiyishop.com%2Falipay%3FpayOrderToken%3D34b1f1360bb8111b3d55f6a84452c5023636890021b83c0c167270dbce4fc2ff%26wc%3DALI_JSAPI%26vm%3D1",
"payDataType": "payurl",
"payOrderId": "P1793544595691261954"
},
"msg": "SUCCESS",
"sign": "65EBF84B61764231EF24F49F25AE3E84",
"traceId": "f16bb12607ff4987b8dbe8bedc4fb99f"
}
下面是使用不同語言發起支付訂單的代碼片段,可以作為參考:
(注意代碼中為對異常場景做處理,請結合業務場景自行處理)
Map<String, Object> map = new HashMap<>();
map.put("mchNo", "Merchant Number...");
map.put("appId", "App ID...");
map.put("mchOrderNo", "Unique Order Number...");
map.put("amount", 10000);
map.put("currency", "cny");
map.put("reqTime", 1711021401000l);
map.put("version", "1.1");
map.put("notifyUrl", "https://www...");
map.put("signType", "MD5");
map.put("sign", "5182B5B0...");
HttpResponse response = HttpRequest
.post("http://api.pass2pay.com/api/pay/unifiedOrder")
.form(map).execute();
JSONObject responseJson = JSON.parseObject(response.body());
if(responseJson.getIntValue("code") != 0){
// failed, Please check the configuration or contact us
}else{
//successful, return customer payment order info
}
Copy
<?php
$map = array(
"mchNo" => "Merchant Number...",
"appId" => "App ID...",
"mchOrderNo" => "Unique Order Number...",
"amount" => 10000,
"currency" => "cny",
"reqTime" => 1711021401000,
"version" => "1.0",
"signType" => "MD5",
"sign" => "5182B5B0...",
"notifyUrl" => "https://www..."
);
$extParams = array(
"payDataType" => "codeImgUrl"
);
$map["channelExtra"] = $extParams;
$response = Requests::post('http://api.pass2pay.com/api/pay/unifiedOrder', array(), $map);
$responseJson = json_decode($response->body, true);
if ($responseJson["code"] != 0) {
// failed, Please check the configuration or contact us
} else {
// successful, return customer payment order info
}
?>
const axios = require('axios');
const requestData = {
mchNo: "Merchant Number...",
appId: "App ID...",
mchOrderNo: "Unique Order Number...",
wayCode: "ALI_QR",
amount: 10000,
currency: "cny",
reqTime: 1711021401000,
version: "1.0",
signType: "MD5",
sign: "5182B5B0...",
subject: "Children's clothing...",
body: "A red down jacket...",
notifyUrl: "https://www..."
};
axios.post('http://api.pass2pay.com/api/pay/unifiedOrder', requestData)
.then(response => {
const responseJson = response.data;
if (responseJson.code !== 0) {
// failed, Please check the configuration or contact us
} else {
// successful, return customer payment order info
}
})
.catch(error => {
// handle error
});
import requests
requestData = {
"mchNo": "Merchant Number...",
"appId": "App ID...",
"mchOrderNo": "Unique Order Number...",
"amount": 10000,
"currency": "cny",
"reqTime": 1711021401000,
"version": "1.0",
"signType": "MD5",
"sign": "5182B5B0...",
"notifyUrl": "https://www..."
}
response = requests.post('http://api.pass2pay.com/api/pay/unifiedOrder', json=requestData)
responseJson = response.json()
if responseJson["code"] != 0:
# failed, Please check the configuration or contact us
else:
# successful, return customer payment order info
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
requestData := map[string]interface{}{
"mchNo": "Merchant Number...",
"appId": "App ID...",
"mchOrderNo": "Unique Order Number...",
"amount": 10000,
"currency": "cny",
"userName": "zhang san...",
"reqTime": 1711021401000,
"version": "1.0",
"signType": "MD5",
"sign": "5182B5B0...",
"notifyUrl": "https://www..."
}
requestBody, err := json.Marshal(requestData)
if err != nil {
fmt.Println("Error marshaling request body:", err)
return
}
resp, err := http.Post("http://api.pass2pay.com/api/pay/unifiedOrder", "application/json", bytes.NewBuffer(requestBody))
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
responseBody, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response body:", err)
return
}
var responseJson map[string]interface{}
err = json.Unmarshal(responseBody, &responseJson)
if err != nil {
fmt.Println("Error unmarshaling response body:", err)
return
}
if responseJson["code"].(float64) != 0 {
// failed, Please check the configuration or contact us
fmt.Println("Request failed:", responseJson["message"])
} else {
// successful, return customer payment order info
fmt.Println("Request succeeded:", responseJson["data"])
}
}