payment

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 11, 2025 License: Apache-2.0 Imports: 27 Imported by: 0

README

Payment 支付组件库

一个功能完整的Go语言支付组件库,提供多种支付方式的统一接口实现,支持国内外主流支付平台。

🚀 特性

  • 多支付平台支持: 支持支付宝、微信支付、Stripe、PayPal、Airwallex、GC支付等
  • 统一接口设计: 所有支付提供商实现相同的接口,便于切换和扩展
  • 完整的支付流程: 支持支付创建、回调通知、订单查询、发票获取等完整流程
  • 灵活的配置: 支持多种支付环境和参数配置
  • 详细的中文注释: 所有代码都有详细的中文注释,便于理解和维护
  • 类型安全: 使用Go语言的类型系统确保代码安全性

📦 支持的支付平台

支付平台 状态 支持功能
支付宝 (Alipay) 支付、通知、查询
微信支付 (WeChat Pay) 支付、通知、查询、JSAPI/Native
Stripe 支付、通知、查询、发票
PayPal 支付、通知、查询
Airwallex 支付、通知、查询
GC支付 支付、通知、查询、发票
余额支付 (Balance) 内部余额扣减
虚拟支付 (Dummy) 测试和开发环境

🛠 安装

go get github.com/smart-unicom/payment

📖 快速开始

基本使用
package main

import (
    "fmt"
    "github.com/smart-unicom/payment"
)

func main() {
    // 创建支付宝支付提供商
    provider, err := payment.NewAlipayPaymentProvider(
        "your_app_id",
        "your_app_certificate", 
        "your_private_key",
        "alipay_public_key",
        "alipay_root_certificate",
    )
    if err != nil {
        panic(err)
    }

    // 创建支付请求
    payReq := &payment.PayReq{
        ProviderName:       "alipay",
        ProductName:        "测试商品",
        ProductDisplayName: "测试商品显示名称",
        PaymentName:        "order_123456",
        Price:              99.99,
        Currency:           "CNY",
        ReturnUrl:          "https://your-domain.com/return",
        NotifyUrl:          "https://your-domain.com/notify",
    }

    // 执行支付
    payResp, err := provider.Pay(payReq)
    if err != nil {
        panic(err)
    }

    fmt.Printf("支付URL: %s\n", payResp.PayUrl)
    fmt.Printf("订单ID: %s\n", payResp.OrderId)
}
处理支付通知
func handleNotify(provider payment.PaymentProvider, body []byte, orderId string) {
    // 处理支付通知
    result, err := provider.Notify(body, orderId)
    if err != nil {
        fmt.Printf("处理通知失败: %v\n", err)
        return
    }

    // 检查支付状态
    switch result.PaymentStatus {
    case payment.PaymentStatePaid:
        fmt.Println("支付成功")
        // 处理支付成功逻辑
    case payment.PaymentStateFailed:
        fmt.Println("支付失败")
        // 处理支付失败逻辑
    case payment.PaymentStateCanceled:
        fmt.Println("支付取消")
        // 处理支付取消逻辑
    }
}

🔧 配置说明

支付宝配置
provider, err := payment.NewAlipayPaymentProvider(
    "your_app_id",           // 应用ID
    "your_app_certificate",   // 应用证书
    "your_private_key",       // 应用私钥
    "alipay_public_key",      // 支付宝公钥
    "alipay_root_certificate", // 支付宝根证书
)
微信支付配置
provider, err := payment.NewWechatPaymentProvider(
    "your_mch_id",     // 商户号
    "your_api_v3_key", // API v3密钥
    "your_app_id",     // 应用ID
    "your_serial_no",  // 证书序列号
    "your_private_key", // 私钥
)
Stripe配置
provider, err := payment.NewStripePaymentProvider(
    "your_secret_key",      // 密钥
    "your_endpoint_secret", // 端点密钥
)

📚 API文档

PaymentProvider 接口

所有支付提供商都实现以下接口:

type PaymentProvider interface {
    // 执行支付操作
    Pay(req *PayReq) (*PayResp, error)
    
    // 处理支付通知
    Notify(body []byte, orderId string) (*NotifyResult, error)
    
    // 获取发票
    GetInvoice(paymentName, personName, personIdCard, personEmail, 
               personPhone, invoiceType, invoiceTitle, invoiceTaxId string) (string, error)
    
    // 获取响应错误信息
    GetResponseError(err error) string
}
数据结构
PayReq - 支付请求
type PayReq struct {
    ProviderName       string  // 支付提供商名称
    ProductName        string  // 产品名称
    PayerName          string  // 付款人姓名
    PayerId            string  // 付款人ID
    PayerEmail         string  // 付款人邮箱
    PaymentName        string  // 支付名称
    ProductDisplayName string  // 产品显示名称
    ProductDescription string  // 产品描述
    ProductImage       string  // 产品图片
    Price              float64 // 价格
    Currency           string  // 货币类型
    ReturnUrl          string  // 返回URL
    NotifyUrl          string  // 通知URL
    PaymentEnv         string  // 支付环境
}
PayResp - 支付响应
type PayResp struct {
    PayUrl     string                 // 支付URL
    OrderId    string                 // 订单ID
    AttachInfo map[string]interface{} // 附加信息
}
NotifyResult - 通知结果
type NotifyResult struct {
    PaymentName        string       // 支付名称
    PaymentStatus      PaymentState // 支付状态
    NotifyMessage      string       // 通知消息
    ProductName        string       // 产品名称
    ProductDisplayName string       // 产品显示名称
    ProviderName       string       // 支付提供商名称
    Price              float64      // 价格
    Currency           string       // 货币类型
    OrderId            string       // 订单ID
}
支付状态
const (
    PaymentStatePaid     PaymentState = "Paid"     // 已支付
    PaymentStateCreated  PaymentState = "Created"  // 已创建
    PaymentStateCanceled PaymentState = "Canceled" // 已取消
    PaymentStateTimeout  PaymentState = "Timeout"  // 超时
    PaymentStateError    PaymentState = "Error"    // 错误
)

🔍 高级用法

微信支付环境检测
// 在微信浏览器中使用JSAPI支付
payReq.PaymentEnv = payment.PaymentEnvWechatBrowser
payReq.PayerId = "user_openid" // 用户的OpenID

payResp, err := provider.Pay(payReq)
// payResp.AttachInfo 包含JSAPI支付所需的参数
发票功能
// 获取发票(支持Stripe和GC支付)
invoiceUrl, err := provider.GetInvoice(
    "payment_name",
    "张三",
    "身份证号",
    "email@example.com",
    "13800138000",
    "Individual", // 或 "Organization"
    "发票抬头",
    "税号",
)

🧪 测试

使用虚拟支付提供商进行测试:

// 创建虚拟支付提供商(用于测试)
provider, _ := payment.NewDummyPaymentProvider()

// 虚拟支付总是返回成功
payResp, _ := provider.Pay(payReq)
notifyResult, _ := provider.Notify(nil, "test_order")
// notifyResult.PaymentStatus == PaymentStatePaid

🛡️ 安全注意事项

  1. 密钥安全: 所有API密钥和证书都应该安全存储,不要硬编码在代码中
  2. HTTPS: 生产环境必须使用HTTPS
  3. 签名验证: 处理支付通知时要验证签名
  4. 幂等性: 支付通知可能重复发送,要确保处理的幂等性
  5. 超时处理: 设置合理的网络请求超时时间

🤝 贡献

欢迎提交Issue和Pull Request来改进这个项目。

开发指南
  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

📞 支持

如果您在使用过程中遇到问题,请:

  1. 查看文档和示例代码
  2. 搜索已有的Issues
  3. 创建新的Issue描述问题

🔗 相关链接


注意: 在生产环境使用前,请仔细阅读各支付平台的官方文档,确保正确配置和使用。

Documentation

Overview

payment 包提供了多种支付方式的统一接口实现

Package payment 支付相关功能

payment 包提供了多种支付方式的统一接口实现

Package payment 支付相关功能

payment 包提供了多种支付方式的统一接口实现

payment 包提供了多种支付方式的统一接口实现

Package payment 支付相关功能 提供多种支付方式的统一接口,包括支付宝、微信支付、Stripe等

Package payment 支付相关功能

Package payment 支付相关功能

Package payment 支付相关功能

Index

Constants

View Source
const (
	PaymentEnvWechatBrowser = "WechatBrowser" // 微信浏览器环境
)

支付环境常量定义

Variables

This section is empty.

Functions

func BytesToString

func BytesToString(b []byte) (s string)

BytesToString 0 拷贝转换 slice byte 为 string

func GetOwnerAndNameFromId

func GetOwnerAndNameFromId(id string) (string, string)

func GetRandomString

func GetRandomString(l int) string

随机生成字符串

Types

type AirWallexIntentInfo

type AirWallexIntentInfo struct {
	Amount          json.Number
	Currency        string
	Id              string
	Status          string
	Descriptor      string
	MerchantOrderId string
	PaymentStatus   string
	Metadata        map[string]interface{}
}

type AirWallexIntentResp

type AirWallexIntentResp struct {
	Id              string `json:"id"`                // 支付意图ID
	ClientSecret    string `json:"client_secret"`     // 客户端密钥
	MerchantOrderId string `json:"merchant_order_id"` // 商户订单ID
}

AirWallexIntentResp Airwallex支付意图响应结构体

type AirWallexTokenInfo

type AirWallexTokenInfo struct {
	Token     string `json:"token"`      // 访问令牌
	ExpiresAt string `json:"expires_at"` // 过期时间字符串
	// contains filtered or unexported fields
}

AirWallexTokenInfo Airwallex令牌信息结构体

type AirwallexClient

type AirwallexClient struct {
	ClientId    string // 客户端ID
	APIKey      string // API密钥
	APIEndpoint string // API端点
	APICheckout string // 结账页面URL
	// contains filtered or unexported fields
}

AirwallexClient Airwallex客户端结构体

func (*AirwallexClient) CreateIntent

func (c *AirwallexClient) CreateIntent(r *PayReq) (*AirWallexIntentResp, error)

func (*AirwallexClient) GetCheckoutUrl

func (c *AirwallexClient) GetCheckoutUrl(intent *AirWallexIntentResp, r *PayReq) (string, error)

func (*AirwallexClient) GetIntentByOrderId

func (c *AirwallexClient) GetIntentByOrderId(orderId string) (*AirWallexIntentInfo, error)

func (*AirwallexClient) GetToken

func (c *AirwallexClient) GetToken() (string, error)

type AirwallexIntent

type AirwallexIntent struct {
	Amount               json.Number `json:"amount"`
	Currency             string      `json:"currency"`
	Id                   string      `json:"id"`
	Status               string      `json:"status"`
	Descriptor           string      `json:"descriptor"`
	MerchantOrderId      string      `json:"merchant_order_id"`
	LatestPaymentAttempt struct {
		Status string `json:"status"`
	} `json:"latest_payment_attempt"`
	Metadata map[string]interface{} `json:"metadata"`
}

type AirwallexIntents

type AirwallexIntents struct {
	Items []AirwallexIntent `json:"items"`
}

type AirwallexPaymentProvider

type AirwallexPaymentProvider struct {
	Client *AirwallexClient // Airwallex客户端实例
}

AirwallexPaymentProvider Airwallex支付提供者结构体

func NewAirwallexPaymentProvider

func NewAirwallexPaymentProvider(clientId string, apiKey string) (*AirwallexPaymentProvider, error)

NewAirwallexPaymentProvider 创建新的Airwallex支付提供者实例 clientId: Airwallex客户端ID apiKey: Airwallex API密钥 返回Airwallex支付提供者实例和可能的错误

func (*AirwallexPaymentProvider) GetInvoice

func (pp *AirwallexPaymentProvider) GetInvoice(paymentName, personName, personIdCard, personEmail, personPhone, invoiceType, invoiceTitle, invoiceTaxId string) (string, error)

GetInvoice 获取发票信息 paymentName: 支付名称 personName: 个人姓名 personIdCard: 身份证号 personEmail: 邮箱 personPhone: 电话 invoiceType: 发票类型 invoiceTitle: 发票抬头 invoiceTaxId: 税号 返回发票URL和可能的错误

func (*AirwallexPaymentProvider) GetResponseError

func (pp *AirwallexPaymentProvider) GetResponseError(err error) string

GetResponseError 获取响应错误信息 err: 错误对象 返回错误描述字符串

func (*AirwallexPaymentProvider) Notify

func (pp *AirwallexPaymentProvider) Notify(body []byte, orderId string) (*NotifyResult, error)

Notify 处理Airwallex支付回调通知 body: 回调请求体 orderId: 订单ID 返回通知结果和可能的错误

func (*AirwallexPaymentProvider) Pay

func (pp *AirwallexPaymentProvider) Pay(r *PayReq) (*PayResp, error)

Pay 处理Airwallex支付请求 r: 支付请求参数 返回支付响应和可能的错误

type AlipayPaymentProvider

type AlipayPaymentProvider struct {
	Client *alipay.Client // 支付宝客户端
}

AlipayPaymentProvider 支付宝支付提供商 实现支付宝支付功能

func NewAlipayPaymentProvider

func NewAlipayPaymentProvider(appId string, appCertificate string, appPrivateKey string, authorityPublicKey string, authorityRootPublicKey string) (*AlipayPaymentProvider, error)

NewAlipayPaymentProvider 创建新的支付宝支付提供商实例 参数:

  • appId: 应用ID
  • appCertificate: 应用证书
  • appPrivateKey: 应用私钥
  • authorityPublicKey: 支付宝公钥
  • authorityRootPublicKey: 支付宝根证书

返回:

  • *AlipayPaymentProvider: 支付宝支付提供商实例
  • error: 错误信息

func (*AlipayPaymentProvider) GetInvoice

func (pp *AlipayPaymentProvider) GetInvoice(paymentName string, personName string, personIdCard string, personEmail string, personPhone string, invoiceType string, invoiceTitle string, invoiceTaxId string) (string, error)

GetInvoice 获取支付宝发票 当前不支持发票功能,返回空字符串 参数:

  • paymentName: 支付名称
  • personName: 个人姓名
  • personIdCard: 身份证号
  • personEmail: 邮箱
  • personPhone: 电话
  • invoiceType: 发票类型
  • invoiceTitle: 发票抬头
  • invoiceTaxId: 税号

返回:

  • string: 发票信息(空)
  • error: 错误信息

func (*AlipayPaymentProvider) GetResponseError

func (pp *AlipayPaymentProvider) GetResponseError(err error) string

GetResponseError 获取支付宝响应错误信息 根据错误状态返回相应的字符串 参数:

  • err: 错误对象

返回:

  • string: 错误响应字符串

func (*AlipayPaymentProvider) Notify

func (pp *AlipayPaymentProvider) Notify(body []byte, orderId string) (*NotifyResult, error)

Notify 处理支付宝支付通知 查询订单状态并返回通知结果 参数:

  • body: 通知内容
  • orderId: 订单ID

返回:

  • *NotifyResult: 通知结果
  • error: 错误信息

func (*AlipayPaymentProvider) Pay

func (pp *AlipayPaymentProvider) Pay(r *PayReq) (*PayResp, error)

Pay 执行支付宝支付操作 参数:

  • r: 支付请求信息

返回:

  • *PayResp: 支付响应信息
  • error: 错误信息

type BalancePaymentProvider

type BalancePaymentProvider struct{}

BalancePaymentProvider 余额支付提供者结构体

func NewBalancePaymentProvider

func NewBalancePaymentProvider() (*BalancePaymentProvider, error)

NewBalancePaymentProvider 创建新的余额支付提供者实例 返回余额支付提供者实例和可能的错误

func (*BalancePaymentProvider) GetInvoice

func (pp *BalancePaymentProvider) GetInvoice(paymentName string, personName string, personIdCard string, personEmail string, personPhone string, invoiceType string, invoiceTitle string, invoiceTaxId string) (string, error)

GetInvoice 获取发票信息 paymentName: 支付名称 personName: 个人姓名 personIdCard: 身份证号 personEmail: 邮箱 personPhone: 电话 invoiceType: 发票类型 invoiceTitle: 发票抬头 invoiceTaxId: 税号 返回发票URL和可能的错误

func (*BalancePaymentProvider) GetResponseError

func (pp *BalancePaymentProvider) GetResponseError(err error) string

GetResponseError 获取响应错误信息 err: 错误对象 返回错误描述字符串

func (*BalancePaymentProvider) Notify

func (pp *BalancePaymentProvider) Notify(body []byte, orderId string) (*NotifyResult, error)

Notify 处理余额支付回调通知 body: 回调请求体 orderId: 订单ID 返回通知结果和可能的错误

func (*BalancePaymentProvider) Pay

func (pp *BalancePaymentProvider) Pay(r *PayReq) (*PayResp, error)

Pay 处理余额支付请求 r: 支付请求参数 返回支付响应和可能的错误

type DummyPaymentProvider

type DummyPaymentProvider struct{}

DummyPaymentProvider 虚拟支付提供商 用于测试和开发环境的模拟支付

func NewDummyPaymentProvider

func NewDummyPaymentProvider() (*DummyPaymentProvider, error)

NewDummyPaymentProvider 创建新的虚拟支付提供商实例 返回:

  • *DummyPaymentProvider: 虚拟支付提供商实例
  • error: 错误信息

func (*DummyPaymentProvider) GetInvoice

func (pp *DummyPaymentProvider) GetInvoice(paymentName string, personName string, personIdCard string, personEmail string, personPhone string, invoiceType string, invoiceTitle string, invoiceTaxId string) (string, error)

GetInvoice 获取虚拟发票 返回空字符串,不支持发票功能 参数:

  • paymentName: 支付名称
  • personName: 个人姓名
  • personIdCard: 身份证号
  • personEmail: 邮箱
  • personPhone: 电话
  • invoiceType: 发票类型
  • invoiceTitle: 发票抬头
  • invoiceTaxId: 税号

返回:

  • string: 发票信息(空)
  • error: 错误信息

func (*DummyPaymentProvider) GetResponseError

func (pp *DummyPaymentProvider) GetResponseError(err error) string

GetResponseError 获取虚拟响应错误信息 返回空字符串 参数:

  • err: 错误对象

返回:

  • string: 错误响应字符串(空)

func (*DummyPaymentProvider) Notify

func (pp *DummyPaymentProvider) Notify(body []byte, orderId string) (*NotifyResult, error)

Notify 处理虚拟支付通知 直接返回支付成功状态 参数:

  • body: 通知内容
  • orderId: 订单ID

返回:

  • *NotifyResult: 通知结果
  • error: 错误信息

func (*DummyPaymentProvider) Pay

func (pp *DummyPaymentProvider) Pay(r *PayReq) (*PayResp, error)

Pay 执行虚拟支付操作 直接返回成功响应,用于测试 参数:

  • r: 支付请求信息

返回:

  • *PayResp: 支付响应信息
  • error: 错误信息

type GcInvoiceReqInfo

type GcInvoiceReqInfo struct {
	BusNo        string `json:"busno"`        // 业务号
	PayerName    string `json:"payername"`    // 支付者姓名
	IdNum        string `json:"idnum"`        // 身份证号
	PayerType    string `json:"payertype"`    // 支付者类型
	InvoiceTitle string `json:"invoicetitle"` // 发票抬头
	Tin          string `json:"tin"`          // 税号
	Phone        string `json:"phone"`        // 电话
	Email        string `json:"email"`        // 邮箱
}

GcInvoiceReqInfo GC发票请求信息结构体

type GcInvoiceRespInfo

type GcInvoiceRespInfo struct {
	BusNo     string `json:"busno"`     // 业务号
	State     string `json:"state"`     // 状态
	EbillCode string `json:"ebillcode"` // 电子票据代码
	EbillNo   string `json:"ebillno"`   // 电子票据号码
	CheckCode string `json:"checkcode"` // 校验码
	Url       string `json:"url"`       // 发票URL
	Content   string `json:"content"`   // 内容
}

GcInvoiceRespInfo GC发票响应信息结构体

type GcNotifyRespInfo

type GcNotifyRespInfo struct {
	Xmpch      string  `json:"xmpch"`       // 商户号
	OrderDate  string  `json:"orderdate"`   // 订单日期
	OrderNo    string  `json:"orderno"`     // 订单号
	Amount     float64 `json:"amount"`      // 金额
	Jylsh      string  `json:"jylsh"`       // 交易流水号
	TradeNo    string  `json:"tradeno"`     // 交易号
	PayMethod  string  `json:"paymethod"`   // 支付方式
	OrderState string  `json:"orderstate"`  // 订单状态
	ReturnType string  `json:"return_type"` // 返回类型
	PayerId    string  `json:"payerid"`     // 支付者ID
	PayerName  string  `json:"payername"`   // 支付者姓名
}

GcNotifyRespInfo GC通知响应信息结构体

type GcPayReqInfo

type GcPayReqInfo struct {
	OrderDate string `json:"orderdate"`  // 订单日期
	OrderNo   string `json:"orderno"`    // 订单号
	Amount    string `json:"amount"`     // 金额
	Xmpch     string `json:"xmpch"`      // 商户号
	Body      string `json:"body"`       // 商品描述
	ReturnUrl string `json:"return_url"` // 返回URL
	NotifyUrl string `json:"notify_url"` // 通知URL
	PayerId   string `json:"payerid"`    // 支付者ID
	PayerName string `json:"payername"`  // 支付者姓名
	Remark1   string `json:"remark1"`    // 备注1
	Remark2   string `json:"remark2"`    // 备注2
}

GcPayReqInfo GC支付请求信息结构体

type GcPayRespInfo

type GcPayRespInfo struct {
	Jylsh     string `json:"jylsh"`     // 交易流水号
	Amount    string `json:"amount"`    // 金额
	PayerId   string `json:"payerid"`   // 支付者ID
	PayerName string `json:"payername"` // 支付者姓名
	PayUrl    string `json:"payurl"`    // 支付URL
}

GcPayRespInfo GC支付响应信息结构体

type GcPaymentProvider

type GcPaymentProvider struct {
	Xmpch     string // 商户号
	SecretKey string // 密钥
	Host      string // 主机地址
}

GcPaymentProvider GC支付提供者结构体

func NewGcPaymentProvider

func NewGcPaymentProvider(clientId string, clientSecret string, host string) *GcPaymentProvider

NewGcPaymentProvider 创建新的GC支付提供者实例 clientId: 客户端ID(商户号) clientSecret: 客户端密钥 host: 主机地址 返回GC支付提供者实例

func (*GcPaymentProvider) GetInvoice

func (pp *GcPaymentProvider) GetInvoice(paymentName string, personName string, personIdCard string, personEmail string, personPhone string, invoiceType string, invoiceTitle string, invoiceTaxId string) (string, error)

GetInvoice 获取GC支付的发票 参数:

  • paymentName: 支付名称(订单号)
  • personName: 个人姓名
  • personIdCard: 个人身份证号
  • personEmail: 个人邮箱
  • personPhone: 个人电话
  • invoiceType: 发票类型
  • invoiceTitle: 发票抬头
  • invoiceTaxId: 发票税号

返回值:

  • string: 发票URL
  • error: 错误信息

func (*GcPaymentProvider) GetResponseError

func (pp *GcPaymentProvider) GetResponseError(err error) string

GetResponseError 根据错误信息返回响应状态 参数:

  • err: 错误信息

返回值:

  • string: 响应状态("success"或"fail")

func (*GcPaymentProvider) Notify

func (pp *GcPaymentProvider) Notify(body []byte, orderId string) (*NotifyResult, error)

Notify 处理GC支付的回调通知 body: 通知请求体字节数组 orderId: 订单ID 返回通知结果和可能的错误

func (*GcPaymentProvider) Pay

func (pp *GcPaymentProvider) Pay(r *PayReq) (*PayResp, error)

Pay 处理GC支付请求 r: 支付请求参数 返回支付响应和可能的错误

type GcRequestBody

type GcRequestBody struct {
	Op          string `json:"op"`          // 操作类型
	Xmpch       string `json:"xmpch"`       // 商户号
	Version     string `json:"version"`     // 版本号
	Data        string `json:"data"`        // 数据(Base64编码)
	RequestTime string `json:"requesttime"` // 请求时间
	Sign        string `json:"sign"`        // 签名
}

GcRequestBody GC请求体结构体

type GcResponseBody

type GcResponseBody struct {
	Op         string `json:"op"`          // 操作类型
	Xmpch      string `json:"xmpch"`       // 商户号
	Version    string `json:"version"`     // 版本号
	ReturnCode string `json:"return_code"` // 返回码
	ReturnMsg  string `json:"return_msg"`  // 返回消息
	Data       string `json:"data"`        // 数据(Base64编码)
	NotifyTime string `json:"notifytime"`  // 通知时间
	Sign       string `json:"sign"`        // 签名
}

GcResponseBody GC响应体结构体

type NotifyResult

type NotifyResult struct {
	PaymentName   string       // 支付名称
	PaymentStatus PaymentState // 支付状态
	NotifyMessage string       // 通知消息

	ProductName        string  // 产品名称
	ProductDisplayName string  // 产品显示名称
	ProviderName       string  // 支付提供商名称
	Price              float64 // 价格
	Currency           string  // 货币类型

	OrderId string // 订单ID
}

NotifyResult 支付通知结果结构体 包含支付通知回调的结果信息

type PayReq

type PayReq struct {
	ProviderName       string  // 支付提供商名称
	ProductName        string  // 产品名称
	PayerName          string  // 付款人姓名
	PayerId            string  // 付款人ID
	PayerEmail         string  // 付款人邮箱
	PaymentName        string  // 支付名称
	ProductDisplayName string  // 产品显示名称
	ProductDescription string  // 产品描述
	ProductImage       string  // 产品图片
	Price              float64 // 价格
	Currency           string  // 货币类型

	ReturnUrl string // 返回URL
	NotifyUrl string // 通知URL

	PaymentEnv string // 支付环境
}

PayReq 支付请求结构体 包含支付所需的所有参数信息

type PayResp

type PayResp struct {
	PayUrl     string                 // 支付URL
	OrderId    string                 // 订单ID
	AttachInfo map[string]interface{} // 附加信息
}

PayResp 支付响应结构体 包含支付后返回的信息

type PaymentProvider

type PaymentProvider interface {
	// Pay 执行支付操作
	// 参数:
	//   - req: 支付请求信息
	// 返回:
	//   - *PayResp: 支付响应信息
	//   - error: 错误信息
	Pay(req *PayReq) (*PayResp, error)

	// Notify 处理支付通知
	// 参数:
	//   - body: 通知内容
	//   - orderId: 订单ID
	// 返回:
	//   - *NotifyResult: 通知结果
	//   - error: 错误信息
	Notify(body []byte, orderId string) (*NotifyResult, error)

	// GetInvoice 获取发票
	// 参数:
	//   - paymentName: 支付名称
	//   - personName: 个人姓名
	//   - personIdCard: 身份证号
	//   - personEmail: 邮箱
	//   - personPhone: 电话
	//   - invoiceType: 发票类型
	//   - invoiceTitle: 发票抬头
	//   - invoiceTaxId: 税号
	// 返回:
	//   - string: 发票信息
	//   - error: 错误信息
	GetInvoice(paymentName string, personName string, personIdCard string, personEmail string, personPhone string, invoiceType string, invoiceTitle string, invoiceTaxId string) (string, error)

	// GetResponseError 获取响应错误信息
	// 参数:
	//   - err: 错误对象
	// 返回:
	//   - string: 错误响应字符串
	GetResponseError(err error) string
}

PaymentProvider 支付提供商接口 定义所有支付提供商必须实现的方法

type PaymentState

type PaymentState string

PaymentState 支付状态类型

const (
	PaymentStatePaid     PaymentState = "Paid"     // 已支付
	PaymentStateCreated  PaymentState = "Created"  // 已创建
	PaymentStateCanceled PaymentState = "Canceled" // 已取消
	PaymentStateTimeout  PaymentState = "Timeout"  // 超时
	PaymentStateError    PaymentState = "Error"    // 错误
)

支付状态常量定义

type PaypalPaymentProvider

type PaypalPaymentProvider struct {
	Client *paypal.Client // PayPal客户端实例
}

PaypalPaymentProvider PayPal支付提供者结构体

func NewPaypalPaymentProvider

func NewPaypalPaymentProvider(clientID string, secret string) (*PaypalPaymentProvider, error)

NewPaypalPaymentProvider 创建新的PayPal支付提供者实例 clientID: PayPal应用的客户端ID secret: PayPal应用的密钥 返回PayPal支付提供者实例和可能的错误

func (*PaypalPaymentProvider) GetInvoice

func (pp *PaypalPaymentProvider) GetInvoice(paymentName string, personName string, personIdCard string, personEmail string, personPhone string, invoiceType string, invoiceTitle string, invoiceTaxId string) (string, error)

GetInvoice 获取发票信息 paymentName: 支付名称 personName: 个人姓名 personIdCard: 身份证号 personEmail: 邮箱 personPhone: 电话 invoiceType: 发票类型 invoiceTitle: 发票抬头 invoiceTaxId: 税号 返回发票URL和可能的错误

func (*PaypalPaymentProvider) GetResponseError

func (pp *PaypalPaymentProvider) GetResponseError(err error) string

GetResponseError 获取响应错误信息 err: 错误对象 返回错误描述字符串

func (*PaypalPaymentProvider) Notify

func (pp *PaypalPaymentProvider) Notify(body []byte, orderId string) (*NotifyResult, error)

Notify 处理PayPal支付回调通知 body: 回调请求体 orderId: 订单ID 返回通知结果和可能的错误

func (*PaypalPaymentProvider) Pay

func (pp *PaypalPaymentProvider) Pay(r *PayReq) (*PayResp, error)

Pay 处理PayPal支付请求 r: 支付请求参数 返回支付响应和可能的错误

type StripePaymentProvider

type StripePaymentProvider struct {
	PublishableKey string // 可发布密钥
	SecretKey      string // 秘密密钥
	// contains filtered or unexported fields
}

StripePaymentProvider Stripe支付提供商 实现Stripe支付功能

func NewStripePaymentProvider

func NewStripePaymentProvider(PublishableKey, SecretKey string) (*StripePaymentProvider, error)

NewStripePaymentProvider 创建新的Stripe支付提供商实例 参数:

  • PublishableKey: Stripe可发布密钥
  • SecretKey: Stripe秘密密钥

返回:

  • *StripePaymentProvider: Stripe支付提供商实例
  • error: 错误信息

func (*StripePaymentProvider) GetInvoice

func (pp *StripePaymentProvider) GetInvoice(paymentName string, personName string, personIdCard string, personEmail string, personPhone string, invoiceType string, invoiceTitle string, invoiceTaxId string) (string, error)

GetInvoice 获取Stripe发票 当前不支持发票功能,返回空字符串 参数:

  • paymentName: 支付名称
  • personName: 个人姓名
  • personIdCard: 身份证号
  • personEmail: 邮箱
  • personPhone: 电话
  • invoiceType: 发票类型
  • invoiceTitle: 发票抬头
  • invoiceTaxId: 税号

返回:

  • string: 发票信息(空)
  • error: 错误信息

func (*StripePaymentProvider) GetResponseError

func (pp *StripePaymentProvider) GetResponseError(err error) string

GetResponseError 获取Stripe响应错误信息 根据错误状态返回相应的字符串 参数:

  • err: 错误对象

返回:

  • string: 错误响应字符串

func (*StripePaymentProvider) Notify

func (pp *StripePaymentProvider) Notify(body []byte, orderId string) (*NotifyResult, error)

Notify 处理Stripe支付通知 查询结账会话和支付意图状态并返回通知结果 参数:

  • body: 通知内容
  • orderId: 订单ID

返回:

  • *NotifyResult: 通知结果
  • error: 错误信息

func (*StripePaymentProvider) Pay

func (pp *StripePaymentProvider) Pay(r *PayReq) (*PayResp, error)

Pay 执行Stripe支付操作 创建产品、价格和结账会话 参数:

  • r: 支付请求信息

返回:

  • *PayResp: 支付响应信息
  • error: 错误信息

type WechatPayNotifyResponse

type WechatPayNotifyResponse struct {
	Code    string `json:"Code"`    // 响应代码
	Message string `json:"Message"` // 响应消息
}

WechatPayNotifyResponse 微信支付通知响应结构体

type WechatPaymentProvider

type WechatPaymentProvider struct {
	Client *wechat.ClientV3 // 微信支付客户端
	AppId  string           // 应用ID
}

WechatPaymentProvider 微信支付提供商 实现微信支付功能

func NewWechatPaymentProvider

func NewWechatPaymentProvider(mchId string, apiV3Key string, appId string, serialNo string, privateKey string) (*WechatPaymentProvider, error)

NewWechatPaymentProvider 创建新的微信支付提供商实例 参考文档: https://pay.weixin.qq.com/docs/merchant/products/native-payment/preparation.html 参数:

  • mchId: 商户号
  • apiV3Key: API v3密钥
  • appId: 应用ID
  • serialNo: 证书序列号
  • privateKey: 私钥

返回:

  • *WechatPaymentProvider: 微信支付提供商实例
  • error: 错误信息

func (*WechatPaymentProvider) GetInvoice

func (pp *WechatPaymentProvider) GetInvoice(paymentName string, personName string, personIdCard string, personEmail string, personPhone string, invoiceType string, invoiceTitle string, invoiceTaxId string) (string, error)

GetInvoice 获取微信支付发票 当前不支持发票功能,返回空字符串 参数:

  • paymentName: 支付名称
  • personName: 个人姓名
  • personIdCard: 身份证号
  • personEmail: 邮箱
  • personPhone: 电话
  • invoiceType: 发票类型
  • invoiceTitle: 发票抬头
  • invoiceTaxId: 税号

返回:

  • string: 发票信息(空)
  • error: 错误信息

func (*WechatPaymentProvider) GetResponseError

func (pp *WechatPaymentProvider) GetResponseError(err error) string

GetResponseError 获取微信支付响应错误信息 根据错误状态构造微信支付通知响应 参数:

  • err: 错误对象

返回:

  • string: 错误响应JSON字符串

func (*WechatPaymentProvider) Notify

func (pp *WechatPaymentProvider) Notify(body []byte, orderId string) (*NotifyResult, error)

Notify 处理微信支付通知 查询订单状态并返回通知结果 参数:

  • body: 通知内容
  • orderId: 订单ID

返回:

  • *NotifyResult: 通知结果
  • error: 错误信息

func (*WechatPaymentProvider) Pay

func (pp *WechatPaymentProvider) Pay(r *PayReq) (*PayResp, error)

Pay 执行微信支付操作 根据支付环境选择JSAPI或Native支付方式 参数:

  • r: 支付请求信息

返回:

  • *PayResp: 支付响应信息
  • error: 错误信息

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL