master v1.0.5
dtapps 5 months ago
parent a43276627e
commit 5b13d00dce

@ -13,5 +13,5 @@
#### 安装 #### 安装
```shell ```shell
go get -v -u go.dtapp.net/alipayopen go get -v -u go.dtapp.net/alipayopen@v1.0.5
``` ```

@ -2,7 +2,7 @@ package alipayopen
import ( import (
"context" "context"
"encoding/json" "go.dtapp.net/gojson"
"go.dtapp.net/gorequest" "go.dtapp.net/gorequest"
) )
@ -19,21 +19,20 @@ type AlipaySystemOauthTokenResponse struct {
} }
type AlipaySystemOauthTokenResult struct { type AlipaySystemOauthTokenResult struct {
Result AlipaySystemOauthTokenResponse // 结果 Result AlipaySystemOauthTokenResponse // 结果
Body []byte // 内容 Body []byte // 内容
Http gorequest.Response // 请求 Http gorequest.Response // 请求
ApiError ApiError // 接口错误
} }
func newAlipaySystemOauthTokenResult(result AlipaySystemOauthTokenResponse, body []byte, http gorequest.Response, apiError ApiError) *AlipaySystemOauthTokenResult { func newAlipaySystemOauthTokenResult(result AlipaySystemOauthTokenResponse, body []byte, http gorequest.Response) *AlipaySystemOauthTokenResult {
return &AlipaySystemOauthTokenResult{Result: result, Body: body, Http: http, ApiError: apiError} return &AlipaySystemOauthTokenResult{Result: result, Body: body, Http: http}
} }
// AlipaySystemOauthToken 换取授权访问令牌 // AlipaySystemOauthToken 换取授权访问令牌
// https://opendocs.alipay.com/open/02xtla // https://opendocs.alipay.com/open/02xtla
func (c *Client) AlipaySystemOauthToken(ctx context.Context, grantType, code, refreshToken string) (*AlipaySystemOauthTokenResult, error) { func (c *Client) AlipaySystemOauthToken(ctx context.Context, grantType, code, refreshToken string, notMustParams ...gorequest.Params) (*AlipaySystemOauthTokenResult, ApiError, error) {
// 参数 // 参数
params := gorequest.NewParams() params := gorequest.NewParamsWith(notMustParams...)
params.Set("grant_type", grantType) params.Set("grant_type", grantType)
if code != "" { if code != "" {
params.Set("code", code) params.Set("code", code)
@ -44,13 +43,13 @@ func (c *Client) AlipaySystemOauthToken(ctx context.Context, grantType, code, re
// 请求 // 请求
request, err := c.request(ctx, c.newParamsWithType("alipay.system.oauth.token", params)) request, err := c.request(ctx, c.newParamsWithType("alipay.system.oauth.token", params))
if err != nil { if err != nil {
return nil, err return newAlipaySystemOauthTokenResult(AlipaySystemOauthTokenResponse{}, request.ResponseBody, request), ApiError{}, err
} }
// 定义 // 定义
var response AlipaySystemOauthTokenResponse var response AlipaySystemOauthTokenResponse
err = json.Unmarshal(request.ResponseBody, &response) err = gojson.Unmarshal(request.ResponseBody, &response)
// 错误 // 错误
var apiError ApiError var apiError ApiError
err = json.Unmarshal(request.ResponseBody, &apiError) err = gojson.Unmarshal(request.ResponseBody, &apiError)
return newAlipaySystemOauthTokenResult(response, request.ResponseBody, request, apiError), err return newAlipaySystemOauthTokenResult(response, request.ResponseBody, request), apiError, err
} }

@ -2,7 +2,7 @@ package alipayopen
import ( import (
"context" "context"
"encoding/json" "go.dtapp.net/gojson"
"go.dtapp.net/gorequest" "go.dtapp.net/gorequest"
) )
@ -19,32 +19,31 @@ type AlipayUserInfoShareResponse struct {
} }
type AlipayUserInfoShareResult struct { type AlipayUserInfoShareResult struct {
Result AlipayUserInfoShareResponse // 结果 Result AlipayUserInfoShareResponse // 结果
Body []byte // 内容 Body []byte // 内容
Http gorequest.Response // 请求 Http gorequest.Response // 请求
ApiError ApiError // 接口错误
} }
func newAlipayUserInfoShareResult(result AlipayUserInfoShareResponse, body []byte, http gorequest.Response, apiError ApiError) *AlipayUserInfoShareResult { func newAlipayUserInfoShareResult(result AlipayUserInfoShareResponse, body []byte, http gorequest.Response) *AlipayUserInfoShareResult {
return &AlipayUserInfoShareResult{Result: result, Body: body, Http: http, ApiError: apiError} return &AlipayUserInfoShareResult{Result: result, Body: body, Http: http}
} }
// AlipayUserInfoShare 换取授权访问令牌 // AlipayUserInfoShare 换取授权访问令牌
// https://opendocs.alipay.com/open/02xtlb // https://opendocs.alipay.com/open/02xtlb
func (c *Client) AlipayUserInfoShare(ctx context.Context, authToken string) (*AlipayUserInfoShareResult, error) { func (c *Client) AlipayUserInfoShare(ctx context.Context, authToken string, notMustParams ...gorequest.Params) (*AlipayUserInfoShareResult, ApiError, error) {
// 参数 // 参数
params := gorequest.NewParams() params := gorequest.NewParamsWith(notMustParams...)
params.Set("auth_token", authToken) params.Set("auth_token", authToken)
// 请求 // 请求
request, err := c.request(ctx, c.newParamsWithType("alipay.user.info.share", params)) request, err := c.request(ctx, c.newParamsWithType("alipay.user.info.share", params))
if err != nil { if err != nil {
return nil, err return newAlipayUserInfoShareResult(AlipayUserInfoShareResponse{}, request.ResponseBody, request), ApiError{}, err
} }
// 定义 // 定义
var response AlipayUserInfoShareResponse var response AlipayUserInfoShareResponse
err = json.Unmarshal(request.ResponseBody, &response) err = gojson.Unmarshal(request.ResponseBody, &response)
// 错误 // 错误
var apiError ApiError var apiError ApiError
err = json.Unmarshal(request.ResponseBody, &apiError) err = gojson.Unmarshal(request.ResponseBody, &apiError)
return newAlipayUserInfoShareResult(response, request.ResponseBody, request, apiError), err return newAlipayUserInfoShareResult(response, request.ResponseBody, request), apiError, err
} }

@ -0,0 +1,17 @@
package alipayopen
import (
"context"
"go.dtapp.net/gorequest"
)
func (c *Client) Get(ctx context.Context, _method string, notMustParams ...gorequest.Params) ([]byte, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, c.newParamsWithType(_method, params))
if err != nil {
return nil, err
}
return request.ResponseBody, err
}

@ -7,7 +7,6 @@ import (
"errors" "errors"
"go.dtapp.net/golog" "go.dtapp.net/golog"
"go.dtapp.net/gophp" "go.dtapp.net/gophp"
"go.dtapp.net/gorequest"
) )
// ClientConfig 实例配置 // ClientConfig 实例配置
@ -21,18 +20,17 @@ type ClientConfig struct {
// Client 实例 // Client 实例
type Client struct { type Client struct {
requestClient *gorequest.App // 请求服务 privateKey *rsa.PrivateKey // 私钥服务
privateKey *rsa.PrivateKey // 私钥服务 config struct {
config struct {
appId string // 支付宝分配给开发者的应用ID appId string // 支付宝分配给开发者的应用ID
appKey string // 支付宝分配给开发者的应用私钥 appKey string // 支付宝分配给开发者的应用私钥
appRSA2 string // 应用公钥 appRSA2 string // 应用公钥
alipayRSA2 string // 支付宝公钥 alipayRSA2 string // 支付宝公钥
aes string // 接口内容加密方式 aes string // 接口内容加密方式
} }
log struct { slog struct {
status bool // 状态 status bool // 状态
client *golog.ApiClient // 日志服务 client *golog.ApiSLog // 日志服务
} }
} }
@ -59,9 +57,5 @@ func NewClient(config *ClientConfig) (*Client, error) {
} }
c.privateKey = privateKey.(*rsa.PrivateKey) c.privateKey = privateKey.(*rsa.PrivateKey)
// 请求
c.requestClient = gorequest.NewHttp()
c.requestClient.Uri = apiUrl
return c, nil return c, nil
} }

@ -1,12 +1,14 @@
package alipayopen package alipayopen
import "go.dtapp.net/golog" import (
"go.dtapp.net/golog"
)
// ConfigApiClientFun 日志配置 // ConfigSLogClientFun 日志配置
func (c *Client) ConfigApiClientFun(apiClientFun golog.ApiClientFun) { func (c *Client) ConfigSLogClientFun(apiSLogFun golog.ApiSLogFun) {
apiClient := apiClientFun() apiSLog := apiSLogFun()
if apiClient != nil { if apiSLog != nil {
c.log.client = apiClient c.slog.client = apiSLog
c.log.status = true c.slog.status = true
} }
} }

@ -6,7 +6,6 @@ const (
const ( const (
LogTable = "alipayopen" LogTable = "alipayopen"
Version = "1.0.4"
) )
const AuthorizationCode = "authorization_code" // 表示换取使用用户授权码code换取授权令牌 const AuthorizationCode = "authorization_code" // 表示换取使用用户授权码code换取授权令牌

@ -1,7 +1,5 @@
package alipayopen package alipayopen
import "go.dtapp.net/golog"
func (c *Client) GetAppId() string { func (c *Client) GetAppId() string {
return c.config.appId return c.config.appId
} }
@ -21,7 +19,3 @@ func (c *Client) GetAlipayRSA2() string {
func (c *Client) GetAes() string { func (c *Client) GetAes() string {
return c.config.aes return c.config.aes
} }
func (c *Client) GetLog() *golog.ApiClient {
return c.log.client
}

133
go.mod

@ -1,99 +1,80 @@
module go.dtapp.net/alipayopen module go.dtapp.net/alipayopen
go 1.19 go 1.21.5
require ( require (
go.dtapp.net/dorm v1.0.51 go.dtapp.net/dorm v1.0.55
go.dtapp.net/golog v1.0.101 go.dtapp.net/gojson v1.0.2
go.dtapp.net/gophp v1.0.2 go.dtapp.net/golog v1.0.103
go.dtapp.net/gorequest v1.0.32 go.dtapp.net/gophp v1.0.3
go.dtapp.net/gostring v1.0.10 go.dtapp.net/gorequest v1.0.40
go.dtapp.net/gotime v1.0.5 go.dtapp.net/gostring v1.0.12
go.dtapp.net/gotime v1.0.6
) )
require ( require (
github.com/MercuryEngineering/CookieMonster v0.0.0-20180304172713-1584578b3403 // indirect
github.com/basgys/goxml2json v1.1.0 // indirect github.com/basgys/goxml2json v1.1.0 // indirect
github.com/beego/beego/v2 v2.0.5 // indirect github.com/bytedance/sonic v1.10.2 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
github.com/chenzhuoyu/iasm v0.9.1 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect github.com/gin-contrib/sse v0.1.0 // indirect
github.com/gin-gonic/gin v1.8.1 // indirect github.com/gin-gonic/gin v1.9.1 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-playground/locales v0.14.0 // indirect github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.0 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.11.1 // indirect github.com/go-playground/validator/v10 v10.16.0 // indirect
github.com/go-redis/redis/v9 v9.0.0-beta.3 // indirect github.com/go-sql-driver/mysql v1.7.1 // indirect
github.com/go-sql-driver/mysql v1.6.0 // indirect github.com/goccy/go-json v0.10.2 // indirect
github.com/goccy/go-json v0.9.11 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/hashicorp/golang-lru v0.5.4 // indirect
github.com/jackc/chunkreader/v2 v2.0.1 // indirect
github.com/jackc/pgconn v1.13.0 // indirect
github.com/jackc/pgio v1.0.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgproto3/v2 v2.3.1 // indirect github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 // indirect
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect github.com/jackc/pgx/v5 v5.5.1 // indirect
github.com/jackc/pgtype v1.12.0 // indirect github.com/jackc/puddle/v2 v2.2.1 // indirect
github.com/jackc/pgx/v4 v4.17.2 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect github.com/jinzhu/now v1.1.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.15.11 // indirect github.com/klauspost/cpuid/v2 v2.2.6 // indirect
github.com/leodido/go-urn v1.2.1 // indirect github.com/leodido/go-urn v1.2.4 // indirect
github.com/lib/pq v1.10.7 // indirect github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-isatty v0.0.16 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/montanaflynn/stats v0.6.6 // indirect
github.com/natefinch/lumberjack v2.0.0+incompatible // indirect github.com/natefinch/lumberjack v2.0.0+incompatible // indirect
github.com/oschwald/geoip2-golang v1.8.0 // indirect github.com/oschwald/geoip2-golang v1.9.0 // indirect
github.com/oschwald/maxminddb-golang v1.10.0 // indirect github.com/oschwald/maxminddb-golang v1.12.0 // indirect
github.com/pelletier/go-toml/v2 v2.0.5 // indirect github.com/pelletier/go-toml/v2 v2.1.1 // indirect
github.com/pkg/errors v0.9.1 // indirect github.com/redis/go-redis/v9 v9.3.1 // indirect
github.com/saracen/go7z v0.0.0-20191010121135-9c09b6bd7fda // indirect github.com/saracen/go7z v0.0.0-20191010121135-9c09b6bd7fda // indirect
github.com/saracen/solidblock v0.0.0-20190426153529-45df20abab6f // indirect github.com/saracen/solidblock v0.0.0-20190426153529-45df20abab6f // indirect
github.com/segmentio/fasthash v1.0.3 // indirect
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect
github.com/sirupsen/logrus v1.9.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect
github.com/syndtr/goleveldb v1.0.0 // indirect github.com/tklauser/go-sysconf v0.3.13 // indirect
github.com/tklauser/go-sysconf v0.3.10 // indirect github.com/tklauser/numcpus v0.7.0 // indirect
github.com/tklauser/numcpus v0.5.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect github.com/ugorji/go/codec v1.2.12 // indirect
github.com/ugorji/go/codec v1.2.7 // indirect github.com/ulikunitz/xz v0.5.11 // indirect
github.com/ulikunitz/xz v0.5.10 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect
github.com/upper/db/v4 v4.6.0 // indirect go.dtapp.net/goip v1.0.42 // indirect
github.com/uptrace/bun v1.1.8 // indirect go.dtapp.net/gorandom v1.0.2 // indirect
github.com/uptrace/bun/dialect/mysqldialect v1.1.8 // indirect
github.com/uptrace/bun/dialect/pgdialect v1.1.8 // indirect
github.com/uptrace/bun/driver/pgdriver v1.1.8 // indirect
github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
github.com/xdg-go/scram v1.1.1 // indirect
github.com/xdg-go/stringprep v1.0.3 // indirect
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
go.dtapp.net/goip v1.0.38 // indirect
go.dtapp.net/gorandom v1.0.1 // indirect
go.dtapp.net/gotrace_id v1.0.6 // indirect go.dtapp.net/gotrace_id v1.0.6 // indirect
go.dtapp.net/gourl v1.0.0 // indirect go.dtapp.net/gourl v1.0.0 // indirect
go.mongodb.org/mongo-driver v1.10.3 // indirect golang.org/x/arch v0.6.0 // indirect
go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.17.0 // indirect
go.uber.org/multierr v1.8.0 // indirect golang.org/x/mod v0.14.0 // indirect
go.uber.org/zap v1.23.0 // indirect golang.org/x/net v0.19.0 // indirect
golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2 // indirect golang.org/x/sync v0.5.0 // indirect
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect golang.org/x/sys v0.15.0 // indirect
golang.org/x/net v0.0.0-20221004154528-8021a29435af // indirect golang.org/x/text v0.14.0 // indirect
golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0 // indirect golang.org/x/tools v0.16.1 // indirect
golang.org/x/sys v0.0.0-20221010170243-090e33056c14 // indirect google.golang.org/protobuf v1.31.0 // indirect
golang.org/x/text v0.3.8 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
google.golang.org/protobuf v1.28.1 // indirect gorm.io/datatypes v1.2.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect gorm.io/driver/mysql v1.5.2 // indirect
gorm.io/driver/mysql v1.4.1 // indirect gorm.io/driver/postgres v1.5.4 // indirect
gorm.io/driver/postgres v1.4.4 // indirect gorm.io/gen v0.3.24 // indirect
gorm.io/gorm v1.24.0 // indirect gorm.io/gorm v1.25.5 // indirect
mellium.im/sasl v0.3.0 // indirect gorm.io/hints v1.1.2 // indirect
xorm.io/builder v0.3.12 // indirect gorm.io/plugin/dbresolver v1.5.0 // indirect
xorm.io/xorm v1.3.2 // indirect
) )

985
go.sum

File diff suppressed because it is too large Load Diff

@ -6,13 +6,13 @@ import (
"go.dtapp.net/gostring" "go.dtapp.net/gostring"
) )
func (c *Client) request(ctx context.Context, param map[string]interface{}) (gorequest.Response, error) { func (c *Client) request(ctx context.Context, param gorequest.Params) (gorequest.Response, error) {
// 签名 // 签名
params := c.sign(ctx, param) params := c.sign(ctx, param)
// 创建请求 // 创建请求
client := c.requestClient client := gorequest.NewHttp()
// 设置参数 // 设置参数
client.SetParams(params) client.SetParams(params)
@ -27,8 +27,8 @@ func (c *Client) request(ctx context.Context, param map[string]interface{}) (gor
} }
// 记录日志 // 记录日志
if c.log.status { if c.slog.status {
go c.log.client.MiddlewareCustom(ctx, gostring.ToString(params["method"]), request, Version) go c.slog.client.MiddlewareCustom(ctx, gostring.ToString(params.Get("method")), request)
} }
return request, err return request, err

@ -5,12 +5,11 @@ import (
"crypto" "crypto"
"crypto/rand" "crypto/rand"
"encoding/base64" "encoding/base64"
"encoding/json"
"fmt" "fmt"
"go.dtapp.net/gorequest" "go.dtapp.net/gorequest"
"go.dtapp.net/gostring"
"log" "log"
"sort" "sort"
"strconv"
"strings" "strings"
) )
@ -30,10 +29,10 @@ func (c *Client) rsaSign(signContent string, hash crypto.Hash) (string, error) {
return sign, nil return sign, nil
} }
func (c *Client) sign(ctx context.Context, params gorequest.Params) gorequest.Params { func (c *Client) sign(ctx context.Context, param gorequest.Params) gorequest.Params {
// 排序 // 排序
var keys []string var keys []string
for key := range params { for key := range param {
keys = append(keys, key) keys = append(keys, key)
} }
sort.Strings(keys) sort.Strings(keys)
@ -42,7 +41,7 @@ func (c *Client) sign(ctx context.Context, params gorequest.Params) gorequest.Pa
var signStr = "" var signStr = ""
for _, key := range keys { for _, key := range keys {
if key != "" { if key != "" {
signStr += fmt.Sprintf("%s=%s&", key, c.getString(params[key])) signStr += fmt.Sprintf("%s=%s&", key, gostring.GetString(param.Get(key)))
} }
} }
@ -54,23 +53,7 @@ func (c *Client) sign(ctx context.Context, params gorequest.Params) gorequest.Pa
log.Printf("签名失败:%s\n", err) log.Printf("签名失败:%s\n", err)
return nil return nil
} }
params.Set("sign", sign) param.Set("sign", sign)
return params return param
}
func (c *Client) getString(i interface{}) string {
switch v := i.(type) {
case string:
return v
case []byte:
return string(v)
case int:
return strconv.Itoa(v)
case bool:
return strconv.FormatBool(v)
default:
bytes, _ := json.Marshal(v)
return string(bytes)
}
} }

@ -0,0 +1,5 @@
package alipayopen
const (
Version = "1.0.5"
)
Loading…
Cancel
Save