Documentation ¶
Overview ¶
Package core 微信支付 API v3 Go SDK HTTPClient 基础库,你可以使用它来创建一个 Client,并向微信支付发送 HTTP 请求
初始化 Client 时,你需要指定以下参数:
- Credential 用于生成 HTTP Header 中的 Authorization 信息,微信支付 API v3依赖该值来保证请求的真实性和数据的完整性
- Validator 用于对微信支付的应答进行校验,避免被恶意攻击
Index ¶
- func Bool(b bool) *bool
- func CheckResponse(resp *http.Response) error
- func CreateFormField(w *multipart.Writer, fieldName, contentType string, fieldValue []byte) error
- func CreateFormFile(w *multipart.Writer, filename, contentType string, file []byte) error
- func Float32(f float32) *float32
- func Float64(f float64) *float64
- func Int32(i int32) *int32
- func Int64(i int64) *int64
- func IsAPIError(err error, code string) bool
- func ParameterToJSON(obj interface{}) (string, error)
- func ParameterToString(obj interface{}, collectionFormat string) string
- func SelectHeaderContentType(contentTypes []string) string
- func String(s string) *string
- func Time(t time.Time) *time.Time
- func UnMarshalResponse(httpResp *http.Response, resp interface{}) error
- type APIError
- type APIResult
- type CertificateExporter
- type CertificateGetter
- type CertificateMap
- func (m *CertificateMap) Get(_ context.Context, serialNo string) (*x509.Certificate, bool)
- func (m *CertificateMap) GetAll(_ context.Context) map[string]*x509.Certificate
- func (m *CertificateMap) GetNewestSerial(_ context.Context) string
- func (m *CertificateMap) Reset(newCertificates map[string]*x509.Certificate)
- type CertificateVisitor
- type Client
- func (client *Client) DecryptResponse(ctx context.Context, resp interface{}) error
- func (client *Client) Delete(ctx context.Context, requestURL string, requestBody interface{}) (*APIResult, error)
- func (client *Client) EncryptRequest(ctx context.Context, req interface{}) (string, error)
- func (client *Client) Get(ctx context.Context, requestURL string) (*APIResult, error)
- func (client *Client) Patch(ctx context.Context, requestURL string, requestBody interface{}) (*APIResult, error)
- func (client *Client) Post(ctx context.Context, requestURL string, requestBody interface{}) (*APIResult, error)
- func (client *Client) Put(ctx context.Context, requestURL string, requestBody interface{}) (*APIResult, error)
- func (client *Client) Request(ctx context.Context, method, requestPath string, headerParams http.Header, ...) (result *APIResult, err error)
- func (client *Client) Sign(ctx context.Context, message string) (result *auth.SignatureResult, err error)
- func (client *Client) Upload(ctx context.Context, requestURL, meta, reqBody, formContentType string) (*APIResult, error)
- type ClientOption
- type DialSettings
- type ErrorOption
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CheckResponse ¶
CheckResponse 校验请求是否成功
当http回包的状态码的范围不是200-299之间的时候,会返回相应的错误信息,主要包括http状态码、回包错误码、回包错误信息提示
func CreateFormField ¶
CreateFormField 设置form-data 中的普通属性
示例内容
Content-Disposition: form-data; name="meta"; Content-Type: application/json { "filename": "file_test.mp4", "sha256": " hjkahkjsjkfsjk78687dhjahdajhk " }
如果要设置上述内容
CreateFormField(w, "meta", "application/json", meta)
Example ¶
package main import ( "encoding/json" "mime/multipart" "github.com/wechatpay-apiv3/wechatpay-go/core" "github.com/wechatpay-apiv3/wechatpay-go/core/consts" ) func main() { var w multipart.Writer meta := map[string]string{ "filename": "sample.jpg", "sha256": "5944758444f0af3bc843e39b611a6b0c8c38cca44af653cd461b5765b71dc3f8", } metaBytes, err := json.Marshal(meta) if err != nil { // TODO: 处理错误 return } err = core.CreateFormField(&w, "meta", consts.ApplicationJSON, metaBytes) if err != nil { // TODO: 处理错误 } }
Output:
func CreateFormFile ¶
CreateFormFile 设置form-data中的文件
示例内容:
Content-Disposition: form-data; name="file"; filename="file_test.mp4"; Content-Type: video/mp4 pic1 //pic1即为媒体视频的二进制内容
如果要设置上述内容,则CreateFormFile(w, "file_test.mp4", "video/mp4", pic1)
Example ¶
package main import ( "mime/multipart" "github.com/wechatpay-apiv3/wechatpay-go/core" "github.com/wechatpay-apiv3/wechatpay-go/core/consts" ) func main() { var w multipart.Writer var fileContent []byte err := core.CreateFormFile(&w, "sample.jpg", consts.ImageJPG, fileContent) if err != nil { // TODO: 处理错误 } }
Output:
func IsAPIError ¶ added in v0.2.2
IsAPIError 判断当前 error 是否为特定 Code 的 *APIError
类型为其他 error 或 Code 不匹配时均返回 false
func ParameterToJSON ¶ added in v0.2.0
ParameterToJSON 将参数转换为 Json 字符串
func ParameterToString ¶ added in v0.2.0
ParameterToString 将参数转换为字符串,并使用指定分隔符分隔列表参数
func SelectHeaderContentType ¶ added in v0.2.0
SelectHeaderContentType select a content type from the available list.
func UnMarshalResponse ¶ added in v0.2.0
UnMarshalResponse 将回包组织成结构化数据
Types ¶
type APIError ¶ added in v0.2.0
type APIError struct { StatusCode int // 应答报文的 HTTP 状态码 Header http.Header // 应答报文的 Header 信息 Body string // 应答报文的 Body 原文 Code string `json:"code"` // 应答报文的 Body 解析后的错误码信息,仅不符合预期/发生系统错误时存在 Message string `json:"message"` // 应答报文的 Body 解析后的文字说明信息,仅不符合预期/发生系统错误时存在 Detail interface{} `json:"detail,omitempty"` // 应答报文的 Body 解析后的详细信息,仅不符合预期/发生系统错误时存在 }
APIError 微信支付 API v3 标准错误结构
type APIResult ¶ added in v0.2.0
type APIResult struct { // 本次请求所使用的 HTTPRequest Request *http.Request // 本次请求所获得的 HTTPResponse Response *http.Response }
APIResult 微信支付API v3 请求结果
type CertificateExporter ¶ added in v0.2.1
type CertificateExporter interface { // Export 获取证书序列号对应的平台证书内容 Export(ctx context.Context, serialNo string) (string, bool) // ExportAll 获取平台证书内容Map ExportAll(ctx context.Context) map[string]string }
CertificateExporter 平台证书导出器,可获取平台证书内容,
type CertificateGetter ¶ added in v0.2.1
type CertificateGetter interface { // Get 获取证书序列号对应的平台证书 Get(ctx context.Context, serialNo string) (*x509.Certificate, bool) // GetAll 获取平台证书Map GetAll(ctx context.Context) map[string]*x509.Certificate // GetNewestSerial 获取最新的平台证书的证书序列号 GetNewestSerial(ctx context.Context) string }
CertificateGetter 平台证书提供器
type CertificateMap ¶ added in v0.2.1
type CertificateMap struct {
// contains filtered or unexported fields
}
CertificateMap 最简单的证书获取器——证书Map
func NewCertificateMap ¶ added in v0.2.1
func NewCertificateMap(certificateMap map[string]*x509.Certificate) *CertificateMap
NewCertificateMap 使用 证书序列号->证书 映射 初始化 CertificateMap
func NewCertificateMapWithList ¶ added in v0.2.1
func NewCertificateMapWithList(l []*x509.Certificate) *CertificateMap
NewCertificateMapWithList 使用 证书列表 初始化 CertificateMap
func (*CertificateMap) Get ¶ added in v0.2.1
func (m *CertificateMap) Get(_ context.Context, serialNo string) (*x509.Certificate, bool)
Get 获取证书序列号对应的平台证书
func (*CertificateMap) GetAll ¶ added in v0.2.1
func (m *CertificateMap) GetAll(_ context.Context) map[string]*x509.Certificate
GetAll 获取平台证书Map
func (*CertificateMap) GetNewestSerial ¶ added in v0.2.1
func (m *CertificateMap) GetNewestSerial(_ context.Context) string
GetNewestSerial 获取最新的平台证书的证书序列号
func (*CertificateMap) Reset ¶ added in v0.2.1
func (m *CertificateMap) Reset(newCertificates map[string]*x509.Certificate)
Reset 完整重设 CertificateMap 中存储的证书,并重新选择最新的证书
type CertificateVisitor ¶ added in v0.2.1
type CertificateVisitor interface { CertificateGetter CertificateExporter }
CertificateVisitor 证书访问器,集 CertificateGetter 与 CertificateExporter 于一体
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client 微信支付API v3 基础 Client
func NewClient ¶
func NewClient(ctx context.Context, opts ...ClientOption) (*Client, error)
NewClient 初始化一个微信支付API v3 HTTPClient
初始化的时候你可以传递多个配置信息
Example (Auto_update_certificate) ¶
package main import ( "context" "crypto/rsa" "log" "github.com/wechatpay-apiv3/wechatpay-go/core" "github.com/wechatpay-apiv3/wechatpay-go/core/option" ) func main() { // 示例参数,实际使用时请自行初始化 var ( mchID string mchCertificateSerialNumber string mchPrivateKey *rsa.PrivateKey mchAPIv3Key string ) client, err := core.NewClient( context.Background(), // 一次性设置 签名/验签/敏感字段加解密,并注册 平台证书下载器,自动定时获取最新的平台证书 option.WithWechatPayAutoAuthCipher(mchID, mchCertificateSerialNumber, mchPrivateKey, mchAPIv3Key), ) if err != nil { log.Printf("new wechat pay client err:%s", err.Error()) return } // 接下来使用 client 进行请求发送 _ = client }
Output:
Example (Default) ¶
package main import ( "context" "crypto/rsa" "crypto/x509" "log" "net/http" "github.com/wechatpay-apiv3/wechatpay-go/core" "github.com/wechatpay-apiv3/wechatpay-go/core/option" ) func main() { // 示例参数,实际使用时请自行初始化 var ( mchID string mchCertificateSerialNumber string mchPrivateKey *rsa.PrivateKey wechatPayCertList []*x509.Certificate customHTTPClient *http.Client ) client, err := core.NewClient( context.Background(), // 一次性设置 签名/验签/敏感字段加解密,并注册 平台证书下载器,自动定时获取最新的平台证书 option.WithWechatPayAuthCipher(mchID, mchCertificateSerialNumber, mchPrivateKey, wechatPayCertList), // 设置自定义 HTTPClient 实例,不设置时默认使用 http.Client{},并设置超时时间为 30s option.WithHTTPClient(customHTTPClient), ) if err != nil { log.Printf("new wechat pay client err:%s", err.Error()) return } // 接下来使用 client 进行请求发送 _ = client }
Output:
Example (Fully_customized) ¶
package main import ( "context" "log" "net/http" "github.com/wechatpay-apiv3/wechatpay-go/core" "github.com/wechatpay-apiv3/wechatpay-go/core/auth" "github.com/wechatpay-apiv3/wechatpay-go/core/cipher" "github.com/wechatpay-apiv3/wechatpay-go/core/option" ) func main() { var ( signer auth.Signer // 自定义实现 auth.Signer 接口的实例 verifier auth.Verifier // 自定义实现 auth.Verifier 接口的实例 encryptor cipher.Encryptor // 自定义实现 auth.Encryptor 接口的实例 decryptor cipher.Decryptor // 自定义实现 cipher.Decryptor 接口的实例 customHTTPClient *http.Client // 自定义 HTTPClient ) client, err := core.NewClient( context.Background(), // 使用自定义 Signer 初始化 微信支付签名器 option.WithSigner(signer), // 使用自定义 Verifier 初始化 微信支付应答验证器 option.WithVerifier(verifier), // 使用自定义 Encryptor/Decryptor 初始化 微信支付敏感字段加解密器 option.WithWechatPayCipher(encryptor, decryptor), // 使用自定义 HTTPClient option.WithHTTPClient(customHTTPClient), ) if err != nil { log.Printf("new wechat pay client err:%s", err.Error()) return } // 接下来使用 client 进行请求发送 _ = client }
Output:
func NewClientWithDialSettings ¶ added in v0.2.1
func NewClientWithDialSettings(ctx context.Context, settings *DialSettings) (*Client, error)
NewClientWithDialSettings 使用 DialSettings 初始化一个微信支付API v3 HTTPClient
func NewClientWithValidator ¶ added in v0.2.1
NewClientWithValidator 使用原 Client 复制一个新的 Client,并设置新 Client 的 validator。 原 Client 不受任何影响
func (*Client) DecryptResponse ¶ added in v0.2.2
DecryptResponse 使用 cipher 对应答结构进行原地解密,未设置 cipher 时将跳过解密
本方法会对结构中的敏感字段进行原地解密,因此需要传入结构体的指针。
func (*Client) Delete ¶
func (client *Client) Delete(ctx context.Context, requestURL string, requestBody interface{}) (*APIResult, error)
Delete 向微信支付发送一个 HTTP Delete 请求
func (*Client) EncryptRequest ¶ added in v0.2.1
EncryptRequest 使用 cipher 对请求结构进行原地加密,并返回加密所用的平台证书的序列号。 未设置 cipher 时将跳过加密,并返回空序列号。
本方法会对结构中的敏感字段进行原地加密,因此需要传入结构体的指针。
func (*Client) Patch ¶
func (client *Client) Patch(ctx context.Context, requestURL string, requestBody interface{}) (*APIResult, error)
Patch 向微信支付发送一个 HTTP Patch 请求
func (*Client) Post ¶
func (client *Client) Post(ctx context.Context, requestURL string, requestBody interface{}) (*APIResult, error)
Post 向微信支付发送一个 HTTP Post 请求
func (*Client) Put ¶
func (client *Client) Put(ctx context.Context, requestURL string, requestBody interface{}) (*APIResult, error)
Put 向微信支付发送一个 HTTP Put 请求
func (*Client) Request ¶ added in v0.2.0
func (client *Client) Request( ctx context.Context, method, requestPath string, headerParams http.Header, queryParams url.Values, postBody interface{}, contentType string, ) (result *APIResult, err error)
Request 向微信支付发送请求
相比于 Get / Post / Put / Patch / Delete 方法,本方法可以设置更多内容 特别地,如果需要为当前请求设置 Header,可以使用本方法
type ClientOption ¶ added in v0.2.0
type ClientOption interface { // Apply 将初始化参数应用到 DialSettings 中 Apply(settings *DialSettings) error }
ClientOption 微信支付 API v3 HTTPClient core.Client 初始化参数
type DialSettings ¶ added in v0.2.1
type DialSettings struct { HTTPClient *http.Client // 自定义所使用的 HTTPClient 实例 Signer auth.Signer // 签名器 Validator auth.Validator // 应答包签名校验器 Cipher cipher.Cipher // 敏感字段加解密套件 }
DialSettings 微信支付 API v3 Go SDK core.Client 需要的配置信息
func (*DialSettings) Validate ¶ added in v0.2.1
func (ds *DialSettings) Validate() error
Validate 校验请求配置是否有效
type ErrorOption ¶ added in v0.2.1
type ErrorOption struct{ Error error }
ErrorOption 错误初始化参数,用于返回错误
func (ErrorOption) Apply ¶ added in v0.2.1
func (w ErrorOption) Apply(*DialSettings) error
Apply 返回初始化错误
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package auth 微信支付 API v3 Go SDK 安全验证相关接口 Package auth 微信支付 API v3 Go SDK 安全验证相关接口 Package auth 微信支付 API v3 Go SDK 安全验证相关接口 Package auth 微信支付 API v3 Go SDK 安全验证相关接口
|
Package auth 微信支付 API v3 Go SDK 安全验证相关接口 Package auth 微信支付 API v3 Go SDK 安全验证相关接口 Package auth 微信支付 API v3 Go SDK 安全验证相关接口 Package auth 微信支付 API v3 Go SDK 安全验证相关接口 |
credentials
Package credentials 微信支付 API v3 Go SDK 请求报文头 Authorization 信息生成器
|
Package credentials 微信支付 API v3 Go SDK 请求报文头 Authorization 信息生成器 |
signers
Package signers 微信支付 API v3 Go SDK 数字签名生成器
|
Package signers 微信支付 API v3 Go SDK 数字签名生成器 |
validators
Package validators 微信支付 API v3 Go SDK 应答报文签名验证器 Package validators 微信支付 API v3 Go SDK 应答报文验证器
|
Package validators 微信支付 API v3 Go SDK 应答报文签名验证器 Package validators 微信支付 API v3 Go SDK 应答报文验证器 |
verifiers
Package verifiers 微信支付 API v3 Go SDK 数字签名验证器
|
Package verifiers 微信支付 API v3 Go SDK 数字签名验证器 |
Package consts 微信支付 API v3 Go SDK 常量
|
Package consts 微信支付 API v3 Go SDK 常量 |
Package notify 微信支付 API v3 Go SDK 商户通知处理库
|
Package notify 微信支付 API v3 Go SDK 商户通知处理库 |
Package option 微信支付 API v3 Go SDK Client 初始化参数工具包,你可以使用其中的方法快速构建 core.Client 的初始化参数。
|
Package option 微信支付 API v3 Go SDK Client 初始化参数工具包,你可以使用其中的方法快速构建 core.Client 的初始化参数。 |