# 直连接口下单并支付接入
# 一、渠道:PSE、Efecty(旧)
新:PSE、Efecty 支付成功后通过pay_url跳转到payty付款(2023年3月27日启用)。
旧:PSE、Efecty 支付成功后需跳转到payty付款(已对接旧版,不支持新版),详细流程如下:
# 1、支付返回样例(成功):
新
{
"code":"10000",
"msg":"Success",
"out_trade_no":"out_trade_no_1285925731034600",
"trade_no":"LP20230310035011408-YNdRcq",
"trade_status":"PROCESSING",
"pay_url":"https://secure.payty.com/t/8x8pk8gk"
}
旧:不支持
{
"code":"10000",
"msg":"Success",
"trade_no":"2022021402120600004",
"out_trade_no":"LP20220214021316563-5d0Wg6",
"web_url":"",
"pay_url":"https://secure.payty.com/vads-payment/",
"trade_status":"PROCESSING",
"form_date":{
"vads_payment_cards":"VISA;PSE",
"signature":"V64LLsvVZR+7UoKGxEKu0alqTvAVmh81+5vASLLECl0=",
"vads_trans_date":"20220214021206",
"vads_ctx_mode":"TEST",
"vads_action_mode":"INTERACTIVE",
"vads_page_action":"PAYMENT",
"vads_order_description":"luxpag test",
"vads_order_id":"2022021402120600004",
"vads_currency":"170",
"vads_version":"V2",
"vads_trans_id":"07hscj",
"vads_amount":100000,
"vads_payment_config":"SINGLE",
"vads_site_id":"10454805"
}
}
# 2、支付成功跳转(不支持):
旧:不支持
<input type="button" id="button1" onclick="pay()" value="Test" />
<script type="text/javascript">
function pay() {
var pay_url = "https://secure.payty.com/vads-payment/";
var form_date = {
"vads_payment_cards": "VISA;PSE",
"signature": "V64LLsvVZR+7UoKGxEKu0alqTvAVmh81+5vASLLECl0=",
"vads_trans_date": "20220214021206",
"vads_ctx_mode": "TEST",
"vads_action_mode": "INTERACTIVE",
"vads_page_action": "PAYMENT",
"vads_order_description": "luxpag test",
"vads_order_id": "2022021402120600004",
"vads_currency": "170",
"vads_version": "V2",
"vads_trans_id": "07hscj",
"vads_amount": 100000,
"vads_payment_config": "SINGLE",
"vads_site_id": "10454805"
}
location.href = pay_url + "?" + Object.keys(form_date)?.map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(form_date[k])}`).join("&");
}
</script>
# 二、渠道:Wallet - Paypal
Wallet Paypal 下单前需向luxpag获取token,然后向Paypal获取nonce,详细流程如下:
# 1、获取 Luxpag Wallet Paypal Token:
# 请求接口ROOT地址
测试环境 : https://gateway-sandbox.luxpag.com
正式环境 : https://gateway.luxpag.com
# 接口
/trade/get-paypal-client-token
# Request Header
参数名 | 必须 | 描述 |
---|---|---|
Content-Type | 推荐 | application/json |
Authorization | yes | Basic Base64(app_id:secret_key) |
# 请求参数(JSON格式)
参数名 | 类型 | 必须 | 最大长度/默认值 | 描述 |
---|---|---|---|---|
app_id | string | yes | 32 | 商户后台创建并获得 |
timestamp | string | yes | 19 | yyyy-MM-dd HH:mm:ss |
region | string | no | 区域编码,当 app 为 Global 时,该字段必须 |
# 请求样例
curl --location --request POST 'https://gateway.luxpag.com/trade/get-paypal-client-token' \
--header 'Authorization: Basic Base64(appid:secret_key)' \
--header 'Content-Type: application/json' \
--data-raw '{
"app_id": "app_id",
"timestamp": "{{datetime}}",
}'
# 响应(JSON格式)
参数名 | 类型 | 描述 |
---|---|---|
code | string | 返回码 |
msg | string | 返回消息 |
token | string | token |
# 返回样例(成功)
{
"code": "10000",
"msg": "Success",
"token": "{token}",
}
# 2、获取 Paypal nonce:
var myDeviceData;
// token:Luxpag token
function payForward(token) {
braintree.client.create({
authorization: token // Token you got from Luxpag server
}).then(function (clientInstance) {
return braintree.dataCollector.create({
client: clientInstance,
});
}).then(function (dataCollectorInstance) {
// At this point, you should access the dataCollectorInstance.deviceData value and provide it
// to your server, e.g. by injecting it into your form as a hidden input
myDeviceData = dataCollectorInstance.deviceData;
// Initialize your PayPal Checkout component here
return braintree.paypalCheckout.create(/* ... */);
});
// Create a client.
braintree.client.create({
authorization: token//Token you got from Luxpag server
}).then(function (clientInstance) {
// Create a PayPal Checkout component.
return braintree.paypalCheckout.create({
client: clientInstance
});
}).then(function (paypalCheckoutInstance) {
return paypalCheckoutInstance.loadPayPalSDK({
vault: true
});
}).then(function (paypalCheckoutInstance) {
return paypal.Buttons({
fundingSource: paypal.FUNDING.PAYPAL,
createBillingAgreement: function () {
return paypalCheckoutInstance.createPayment({
flow: 'vault', // Required
});
},
style: {
shape: "rect",
height: 52,
},
onApprove: function (data, actions) {
return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {
// Submit `payload.nonce` to your server
// Submit Luxpag pay Interface and token = payload.nonce
});
},
onCancel: function (data) {
console.log('PayPal payment canceled', JSON.stringify(data, 0, 2));
},
onError: function (err) {
console.error('PayPal error', err);
}
}).render('#paypal-button');
}).then(function () {
// The PayPal button will be rendered in an html element with the ID
// `paypal-button`. This function will be called when the PayPal button
// is set up and ready to be used
}).catch(function (err) {
// Handle component creation error
});
}
# 3、直连下单并支付:
调用直连支付接口下单并支付。
# 4、申请Luxpag钱包测试账号。
测试用户账号。
# 5、样例。
仅供参考。建议把 Luxpag 接口请求写在服务端,获取 Paypal nonce 写在客户端。
<script src="https://res.luxpag.com/lib/js/jquery-1.10.2.min.js"></script>
<script src="https://js.braintreegateway.com/web/3.85.2/js/client.min.js"></script>
<script src="https://js.braintreegateway.com/web/3.85.2/js/paypal-checkout.min.js"></script>
<script src="https://js.braintreegateway.com/web/3.79.0/js/data-collector.min.js"></script>
<div id="paypal-button"> </div>
<script type="text/javascript">
$(document).ready(function () {
var param= '{"app_id":"???????","timestamp":"2022-01-20 14:55:10"}';
$.ajax({
type: "POST",
url: "https://gateway-sandbox.luxpag.com/trade/get-paypal-client-token",
headers: {'Authorization': 'Basic ???????'},
cache: false,
dataType: "json",
contentType: "application/json",
data: param,
success: function (d) {
if (d.code == "10000" && d.token != null) {
payForward(d.token);
}
}
});
});
var myDeviceData;
// token:Luxpag token
function payForward(token) {
braintree.client.create({
authorization: token
}).then(function (clientInstance) {
return braintree.dataCollector.create({
client: clientInstance,
});
}).then(function (dataCollectorInstance) {
myDeviceData = dataCollectorInstance.deviceData;
return braintree.paypalCheckout.create(/* ... */);
});
braintree.client.create({
authorization: token
}).then(function (clientInstance) {
return braintree.paypalCheckout.create({
client: clientInstance
});
}).then(function (paypalCheckoutInstance) {
return paypalCheckoutInstance.loadPayPalSDK({
vault: true
});
}).then(function (paypalCheckoutInstance) {
return paypal.Buttons({
fundingSource: paypal.FUNDING.PAYPAL,
createBillingAgreement: function () {
return paypalCheckoutInstance.createPayment({
flow: 'vault', // Required
});
},
style: {
shape: "rect",
height: 52,
},
onApprove: function (data, actions) {
return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {
// Submit `payload.nonce` to your server
// Submit Luxpag pay Interface and token = payload.nonce
pay(payload.nonce);
});
},
onCancel: function (data) {
},
onError: function (err) {
}
}).render('#paypal-button');
}).then(function () {
}).catch(function (err) {
});
}
function pay(token){
var param = {};
param.token = token;
$.ajax({
type: "POST",
url: "https://gateway-sandbox.luxpag.com/trade/pay",
headers: {'Authorization': 'Basic ???????'},
cache: false,
dataType: "json",
contentType: "application/json",
data: JSON.stringify(param),
success: function (d) {
}
});
}
</script>