Golang中是否有可用于Square支付API集成(SDKs)的开发包

Golang中是否有可用于Square支付API集成(SDKs)的开发包 我想在我的现有项目中集成 Square 支付网关。但是我在 Go 中找不到任何相关的包。甚至他们的官方文档也没有提供 Go 语言的 Square Connect SDK。

有可用的包吗?

2 回复

你好

目前似乎没有现成的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/httpencoding/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_TOKENYOUR_LOCATION_ID 为你的实际凭证。
  • SourceID 应使用从 Square 前端集成的卡令牌(例如,通过 Square Web Payments SDK 生成)。
  • 幂等键(Idempotency Key)必须是唯一的,以防止重复支付;可以使用 UUID 生成。

对于更复杂的操作(如退款、查询交易),参考 Square API 文档 调整端点和请求结构。虽然 Go 没有官方 SDK,但这种方法在 Go 项目中是可靠的。

回到顶部