Golang中是否有可用于Square支付API集成(SDKs)的开发包
Golang中是否有可用于Square支付API集成(SDKs)的开发包 我想在我的现有项目中集成 Square 支付网关。但是我在 Go 中找不到任何相关的包。甚至他们的官方文档也没有提供 Go 语言的 Square Connect SDK。
有可用的包吗?
你好
目前似乎没有现成的Go API。不过这是一个REST API,您可以根据需要自行封装。如果您熟悉其他已有API支持的语言,可以将其作为起点。此外,您可以使用Postman来探索API接口,并通过 https://mholt.github.io/json-to-go/ 来生成Go结构体。
更多关于Golang中是否有可用于Square支付API集成(SDKs)的开发包的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在 Go 语言中,Square 支付 API 的官方 SDK 目前确实不提供 Go 版本,但你可以通过直接调用 Square 的 REST API 来实现集成。Square 的 API 基于标准的 HTTP 请求和 JSON 数据格式,Go 的标准库 net/http 和 encoding/json 足以处理这些请求。以下是一个基本示例,展示如何使用 Go 创建支付请求。
首先,确保你已从 Square 开发者后台获取了访问令牌(Access Token)和位置 ID(Location ID)。然后,你可以构建 HTTP 请求来调用 Square 的支付端点。
示例代码:
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
// 定义支付请求结构体,根据 Square API 文档调整字段
type PaymentRequest struct {
SourceID string `json:"source_id"` // 支付来源 ID,例如卡令牌
AmountMoney struct {
Amount int64 `json:"amount"` // 金额(以最小单位,如美分)
Currency string `json:"currency"` // 货币代码,如 "USD"
} `json:"amount_money"`
IdempotencyKey string `json:"idempotency_key"` // 幂等键,防止重复请求
}
// 定义支付响应结构体,用于解析 API 返回
type PaymentResponse struct {
Payment struct {
ID string `json:"id"`
Status string `json:"status"`
} `json:"payment"`
Errors []interface{} `json:"errors"` // 错误信息,如果有的话
}
func main() {
accessToken := "YOUR_ACCESS_TOKEN" // 替换为你的 Square 访问令牌
locationID := "YOUR_LOCATION_ID" // 替换为你的位置 ID
url := fmt.Sprintf("https://connect.squareupsandbox.com/v2/locations/%s/payments", locationID) // 使用沙盒环境,生产环境去掉 "sandbox"
// 构建支付请求数据
requestData := PaymentRequest{
SourceID: "cnon:card-nonce-ok", // 示例卡令牌,实际应从客户端获取
AmountMoney: struct {
Amount int64 `json:"amount"`
Currency string `json:"currency"`
}{
Amount: 100, // 示例金额:1.00 美元(100 美分)
Currency: "USD",
},
IdempotencyKey: "unique_key_12345", // 生成唯一键,例如使用 UUID
}
// 将请求数据编码为 JSON
jsonData, err := json.Marshal(requestData)
if err != nil {
fmt.Printf("Error encoding JSON: %v\n", err)
return
}
// 创建 HTTP 请求
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
fmt.Printf("Error creating request: %v\n", err)
return
}
// 设置请求头
req.Header.Set("Square-Version", "2023-09-25") // 使用 Square API 版本,检查文档更新
req.Header.Set("Authorization", "Bearer " + accessToken)
req.Header.Set("Content-Type", "application/json")
// 发送请求
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Printf("Error sending request: %v\n", err)
return
}
defer resp.Body.Close()
// 解析响应
var paymentResp PaymentResponse
if err := json.NewDecoder(resp.Body).Decode(&paymentResp); err != nil {
fmt.Printf("Error decoding response: %v\n", err)
return
}
// 处理响应
if len(paymentResp.Errors) > 0 {
fmt.Printf("Payment failed with errors: %v\n", paymentResp.Errors)
} else {
fmt.Printf("Payment successful! Payment ID: %s, Status: %s\n", paymentResp.Payment.ID, paymentResp.Payment.Status)
}
}
这个示例演示了如何调用 Square 的 v2/payments 端点来处理支付。注意以下几点:
- 使用沙盒环境 URL(
squareupsandbox.com)进行测试;生产环境使用squareup.com。 - 替换
YOUR_ACCESS_TOKEN和YOUR_LOCATION_ID为你的实际凭证。 SourceID应使用从 Square 前端集成的卡令牌(例如,通过 Square Web Payments SDK 生成)。- 幂等键(Idempotency Key)必须是唯一的,以防止重复支付;可以使用 UUID 生成。
对于更复杂的操作(如退款、查询交易),参考 Square API 文档 调整端点和请求结构。虽然 Go 没有官方 SDK,但这种方法在 Go 项目中是可靠的。

