Logo
Section 1 / 4

创建付款

学习如何使用 Square API 进行各种类型的支付。

导入

创建付款

学习如何使用 Square API 进行各种类型的支付。

代码示例

1https://connect.squareupsandbox.com/v2/payments

参数类型类别描述
amount_money对象必填包含整数金额和表示货币的字符串的 Money 对象,用于指定本次支付接受的金额。
app_fee_money对象可选表示开发者作为中介为卖家处理支付所收取费用的 Money 对象。
autocomplete布尔值可选若设置为 true,支付将在可能的情况下自动完成;若设置为 false,支付将保持在已批准状态,直到显式完成或取消。
billing_address对象可选买家的账单地址。为 Address 对象,包含 address_line_1、address_line_2、country 和 postal_code 等字符串字段。
buyer_email_address字符串可选买家的电子邮件地址。
idempotency_key字符串必填唯一标识 CreatePayment 请求的字符串,最大长度为 45 个字符。
source_id字符串必填本次支付的资金来源 ID。根据支付类型,可以是卡凭证(card nonce)、CASH 或 EXTERNAL。
tip_money对象可选表示额外小费金额的 Money 对象,与 amount_money 一同使用。
1import fetch from 'node-fetch'; 2 3const headerParameters = { 4 'Authorization': 'Bearer {{ACCESS_TOKEN}}', 5 'Content-Type': 'application/json' 6}; 7 8const url = new URL('https://connect.squareupsandbox.com/v2/payments'); 9 10const bodyParameters = JSON.stringify({ 11 'source_id': 'CASH', 12 'idempotency_key': getRandomString(), 13 'amount_money': { 14 'amount': 100, 15 'currency': 'USD' 16 }, 17 'cash_details': { 18 'buyer_supplied_money': { 19 'amount': 100, 20 'currency': 'USD' 21 } 22 } 23}); 24 25const options = { 26 method: 'POST', 27 headers: headerParameters, 28 body: bodyParameters 29}; 30 31async function invokeEndpoint() { 32 try { 33 const response = await fetch(url, options); 34 // 自定义函数用于打印 API 响应 35 printResponse(response); 36 } catch (error) { 37 console.log(`Error: ${err}`); 38 } 39} 40 41invokeEndpoint();

字段类型描述
id字符串支付的唯一 ID。
amount_money对象本次支付接受的金额,为包含整数金额和字符串货币的 Money 对象。
status字符串支付状态,可能值包括 PENDING、APPROVED、COMPLETED、CANCELED 或 FAILED。
source_type字符串支付来源类型,例如 CARD。
location_id字符串与该支付关联的位置 ID。
order_id字符串关联订单的 ID。
total_money对象以 Money 对象形式表示的总支付金额,包含整数金额和字符串货币。
receipt_number字符串支付收据编号,若支付被取消,则不返回此字段。
receipt_url字符串支付收据的 URL,仅对 COMPLETED 状态的支付返回。
...
创建支付的不同场景

我们可以使用 `CreatePayment` 端点通过信用卡、借记卡或 Square 礼品卡完成支付。Square 保持 PCI 合规性,并在处理支付时检测欺诈行为。当发出 `CreatePayment` 请求时,Square 会从指定卡片中扣除相应金额,并将该金额存入账户的 Square 余额。

Course Image
1import fetch from 'node-fetch'; 2 3const headerParameters = { 4 'Authorization': 'Bearer {{ACCESS_TOKEN}}', 5 'Content-Type': 'application/json' 6}; 7 8const url = new URL('https://connect.squareupsandbox.com/v2/payments'); 9 10const bodyParameters = JSON.stringify({ 11 'source_id': 'cnon:card-nonce-ok', 12 'idempotency_key': getRandomString(), 13 'amount_money': { 14 'amount': 100, 15 'currency': 'USD' 16 } 17}); 18 19const options = { 20 method: 'POST', 21 headers: headerParameters, 22 body: bodyParameters 23}; 24 25async function invokeEndpoint() { 26 try { 27 const response = await fetch(url, options); 28 // 自定义函数用于打印 API 响应 29 printResponse(response); 30 } catch (error) { 31 console.log(`Error: ${err}`); 32 } 33} 34 35invokeEndpoint();

source_id支付方式
cnon:card-nonce-ok卡片
ccof:customer-card-id-ok保存的卡片
cnon:gift-card-nonce-okSquare 礼品卡

source_id错误映射
交易现场:cnon:card-nonce-rejected-cvvCVV 错误
交易现场:cnon:card-nonce-rejected-postalcode 保存的卡片:ccof:customer-card-id-rejected-postalcode邮政编码错误
交易现场:cnon:card-nonce-rejected-expiration 保存的卡片:ccof:customer-card-id-rejected-expiration有效期错误
交易现场:cnon:card-nonce-declined 保存的卡片:ccof:customer-card-id-declined卡片被拒
交易现场:cnon:card-nonce-declined卡片支付令牌已被使用
交易现场:cnon:gift-card-nonce-insufficient-funds礼品卡余额不足
交易现场:cnon:gift-card-nonce-insufficient-permission礼品卡权限不足

ACH 银行转账支付

应用程序可使用 CreatePayment 端点接收自动清算中心(ACH)银行转账支付。当 Square 收到 CreatePayment 请求时,会从指定银行账户扣款,并将资金存入账户的 Square 余额。

要发起 ACH 银行转账支付,可以在上述代码中提供以下任一支付令牌作为 source_id。

source_id错误映射预期行为
bnon:bank-nonce-ok—请求成功。
bnon:bank-nonce-failureGENERIC_DECLINE请求失败。
bnon:bank-nonce-account-unusableACCOUNT_UNUSABLE请求失败。
bnon:bank-nonce-insufficient-fundsINSUFFICIENT_FUNDS请求失败。
bnon:bank-nonce-invalid-accountINVALID_ACCOUNT请求失败。
bnon:bank-nonce-buyer-refused-paymentBUYER_REFUSED_PAYMENT请求失败。

除了 Square 直接处理支付外,我们还可以记录在 Square 外部处理的支付。这可以通过现金支付或任何外部支付方式实现。我们已在本课前面讨论过现金支付。接下来了解如何记录外部支付。

外部支付

由外部实体(非 Square 或卖家)完成的支付称为 外部支付。例如,一位买家通过外卖服务下单,该服务收集付款并支付给卖家。其他场景还包括卖家通过加密货币钱包或非 Square 礼品卡收款。卖家可以使用 CreatePayment 记录这些外部支付。

与现金支付不同,我们需将 source_id 设置为 EXTERNAL,同时必须提供 external_details 字段,用于描述外部支付的具体信息。

1import fetch from 'node-fetch'; 2 3const headerParameters = { 4 'Authorization': 'Bearer {{ACCESS_TOKEN}}', 5 'Content-Type': 'application/json' 6}; 7 8const url = new URL('https://connect.squareupsandbox.com/v2/payments'); 9 10const bodyParameters = JSON.stringify({ 11 'source_id': 'EXTERNAL', 12 'idempotency_key': getRandomString(), 13 'amount_money': { 14 'amount': 100, 15 'currency': 'USD' 16 }, 17 'external_details': { 18 'type': 'OTHER', 19 'source': '外卖配送服务', 20 'source_fee_money': { 21 "amount": 500, 22 'currency': 'USD' 23 } 24 } 25}); 26 27const options = { 28 method: 'POST', 29 headers: headerParameters, 30 body: bodyParameters 31}; 32 33async function invokeEndpoint() { 34 try { 35 const response = await fetch(url, options); 36 // 自定义函数用于打印 API 响应 37 printResponse(response); 38 } catch (error) { 39 console.log(`Error: ${err}`); 40 } 41} 42 43invokeEndpoint();

Square 商户 API

获取付款