@@ -14,9 +14,9 @@ import (
14
14
"github.com/go-resty/resty/v2"
15
15
"github.com/tidwall/gjson"
16
16
17
- "github.com/shenghui0779 /sdk-go/lib "
18
- "github.com/shenghui0779 /sdk-go/lib /value"
19
- "github.com/shenghui0779 /sdk-go/lib /xcrypto"
17
+ "github.com/yiigo /sdk-go/internal "
18
+ "github.com/yiigo /sdk-go/internal /value"
19
+ "github.com/yiigo /sdk-go/internal /xcrypto"
20
20
)
21
21
22
22
// Client 支付宝客户端
@@ -39,46 +39,46 @@ func (c *Client) AppID() string {
39
39
func (c * Client ) Do (ctx context.Context , method string , options ... ActionOption ) (gjson.Result , error ) {
40
40
reqURL := c .gateway + "?charset=utf-8"
41
41
42
- log := lib .NewReqLog (http .MethodPost , reqURL )
42
+ log := internal .NewReqLog (http .MethodPost , reqURL )
43
43
defer log .Do (ctx , c .logger )
44
44
45
45
action := NewAction (method , options ... )
46
46
47
47
body , err := action .Encode (c )
48
48
if err != nil {
49
49
log .SetError (err )
50
- return lib .Fail (err )
50
+ return internal .Fail (err )
51
51
}
52
52
log .SetReqBody (body )
53
53
54
54
resp , err := c .client .R ().
55
55
SetContext (ctx ).
56
- SetHeader (lib .HeaderAccept , lib .ContentJSON ).
57
- SetHeader (lib .HeaderContentType , lib .ContentForm ).
56
+ SetHeader (internal .HeaderAccept , internal .ContentJSON ).
57
+ SetHeader (internal .HeaderContentType , internal .ContentForm ).
58
58
SetBody (body ).
59
59
Post (reqURL )
60
60
if err != nil {
61
61
log .SetError (err )
62
- return lib .Fail (err )
62
+ return internal .Fail (err )
63
63
}
64
64
log .SetRespHeader (resp .Header ())
65
65
log .SetStatusCode (resp .StatusCode ())
66
66
log .SetRespBody (string (resp .Body ()))
67
67
if ! resp .IsSuccess () {
68
- return lib .Fail (fmt .Errorf ("HTTP Request Error, StatusCode = %d" , resp .StatusCode ()))
68
+ return internal .Fail (fmt .Errorf ("HTTP Request Error, StatusCode = %d" , resp .StatusCode ()))
69
69
}
70
70
71
71
// 签名校验
72
72
ret , err := c .verifyResp (action .RespKey (), resp .Body ())
73
73
if err != nil {
74
74
log .SetError (err )
75
- return lib .Fail (err )
75
+ return internal .Fail (err )
76
76
}
77
77
78
78
// JSON串,无需解密
79
79
if strings .HasPrefix (ret .String (), "{" ) {
80
80
if code := ret .Get ("code" ).String (); code != CodeOK {
81
- return lib .Fail (fmt .Errorf ("%s | %s (sub_code = %s, sub_msg = %s)" , code , ret .Get ("msg" ).String (), ret .Get ("sub_code" ).String (), ret .Get ("sub_msg" ).String ()))
81
+ return internal .Fail (fmt .Errorf ("%s | %s (sub_code = %s, sub_msg = %s)" , code , ret .Get ("msg" ).String (), ret .Get ("sub_code" ).String (), ret .Get ("sub_msg" ).String ()))
82
82
}
83
83
return ret , nil
84
84
}
@@ -87,7 +87,7 @@ func (c *Client) Do(ctx context.Context, method string, options ...ActionOption)
87
87
data , err := c .Decrypt (ret .String ())
88
88
if err != nil {
89
89
log .SetError (err )
90
- return lib .Fail (err )
90
+ return internal .Fail (err )
91
91
}
92
92
log .Set ("decrypt" , string (data ))
93
93
@@ -98,46 +98,46 @@ func (c *Client) Do(ctx context.Context, method string, options ...ActionOption)
98
98
//
99
99
// [参考](https://opendocs.alipay.com/apis/api_4/alipay.merchant.item.file.upload)
100
100
func (c * Client ) Upload (ctx context.Context , method string , fieldName , filePath string , formData map [string ]string , options ... ActionOption ) (gjson.Result , error ) {
101
- log := lib .NewReqLog (http .MethodPost , c .gateway )
101
+ log := internal .NewReqLog (http .MethodPost , c .gateway )
102
102
defer log .Do (ctx , c .logger )
103
103
104
104
action := NewAction (method , options ... )
105
105
106
106
query , err := action .Encode (c )
107
107
if err != nil {
108
108
log .SetError (err )
109
- return lib .Fail (err )
109
+ return internal .Fail (err )
110
110
}
111
111
log .Set ("query" , query )
112
112
113
113
resp , err := c .client .R ().
114
114
SetContext (ctx ).
115
- SetHeader (lib .HeaderAccept , lib .ContentJSON ).
115
+ SetHeader (internal .HeaderAccept , internal .ContentJSON ).
116
116
SetFile (fieldName , filePath ).
117
117
SetMultipartFormData (formData ).
118
118
Post (c .gateway + "?" + query )
119
119
if err != nil {
120
120
log .SetError (err )
121
- return lib .Fail (err )
121
+ return internal .Fail (err )
122
122
}
123
123
log .SetRespHeader (resp .Header ())
124
124
log .SetStatusCode (resp .StatusCode ())
125
125
log .SetRespBody (string (resp .Body ()))
126
126
if ! resp .IsSuccess () {
127
- return lib .Fail (fmt .Errorf ("HTTP Request Error, StatusCode = %d" , resp .StatusCode ()))
127
+ return internal .Fail (fmt .Errorf ("HTTP Request Error, StatusCode = %d" , resp .StatusCode ()))
128
128
}
129
129
130
130
// 签名校验
131
131
ret , err := c .verifyResp (action .RespKey (), resp .Body ())
132
132
if err != nil {
133
133
log .SetError (err )
134
- return lib .Fail (err )
134
+ return internal .Fail (err )
135
135
}
136
136
137
137
// JSON串,无需解密
138
138
if strings .HasPrefix (ret .String (), "{" ) {
139
139
if code := ret .Get ("code" ).String (); code != CodeOK {
140
- return lib .Fail (fmt .Errorf ("%s | %s (sub_code = %s, sub_msg = %s)" , code , ret .Get ("msg" ).String (), ret .Get ("sub_code" ).String (), ret .Get ("sub_msg" ).String ()))
140
+ return internal .Fail (fmt .Errorf ("%s | %s (sub_code = %s, sub_msg = %s)" , code , ret .Get ("msg" ).String (), ret .Get ("sub_code" ).String (), ret .Get ("sub_msg" ).String ()))
141
141
}
142
142
return ret , nil
143
143
}
@@ -146,7 +146,7 @@ func (c *Client) Upload(ctx context.Context, method string, fieldName, filePath
146
146
data , err := c .Decrypt (ret .String ())
147
147
if err != nil {
148
148
log .SetError (err )
149
- return lib .Fail (err )
149
+ return internal .Fail (err )
150
150
}
151
151
log .Set ("decrypt" , string (data ))
152
152
@@ -157,46 +157,46 @@ func (c *Client) Upload(ctx context.Context, method string, fieldName, filePath
157
157
//
158
158
// [参考](https://opendocs.alipay.com/apis/api_4/alipay.merchant.item.file.upload)
159
159
func (c * Client ) UploadWithReader (ctx context.Context , method string , fieldName , fileName string , reader io.Reader , formData map [string ]string , options ... ActionOption ) (gjson.Result , error ) {
160
- log := lib .NewReqLog (http .MethodPost , c .gateway )
160
+ log := internal .NewReqLog (http .MethodPost , c .gateway )
161
161
defer log .Do (ctx , c .logger )
162
162
163
163
action := NewAction (method , options ... )
164
164
165
165
query , err := action .Encode (c )
166
166
if err != nil {
167
167
log .SetError (err )
168
- return lib .Fail (err )
168
+ return internal .Fail (err )
169
169
}
170
170
log .Set ("query" , query )
171
171
172
172
resp , err := c .client .R ().
173
173
SetContext (ctx ).
174
- SetHeader (lib .HeaderAccept , lib .ContentJSON ).
174
+ SetHeader (internal .HeaderAccept , internal .ContentJSON ).
175
175
SetMultipartField (fieldName , fileName , "" , reader ).
176
176
SetMultipartFormData (formData ).
177
177
Post (c .gateway + "?" + query )
178
178
if err != nil {
179
179
log .SetError (err )
180
- return lib .Fail (err )
180
+ return internal .Fail (err )
181
181
}
182
182
log .SetRespHeader (resp .Header ())
183
183
log .SetStatusCode (resp .StatusCode ())
184
184
log .SetRespBody (string (resp .Body ()))
185
185
if ! resp .IsSuccess () {
186
- return lib .Fail (fmt .Errorf ("HTTP Request Error, StatusCode = %d" , resp .StatusCode ()))
186
+ return internal .Fail (fmt .Errorf ("HTTP Request Error, StatusCode = %d" , resp .StatusCode ()))
187
187
}
188
188
189
189
// 签名校验
190
190
ret , err := c .verifyResp (action .RespKey (), resp .Body ())
191
191
if err != nil {
192
192
log .SetError (err )
193
- return lib .Fail (err )
193
+ return internal .Fail (err )
194
194
}
195
195
196
196
// JSON串,无需解密
197
197
if strings .HasPrefix (ret .String (), "{" ) {
198
198
if code := ret .Get ("code" ).String (); code != CodeOK {
199
- return lib .Fail (fmt .Errorf ("%s | %s (sub_code = %s, sub_msg = %s)" , code , ret .Get ("msg" ).String (), ret .Get ("sub_code" ).String (), ret .Get ("sub_msg" ).String ()))
199
+ return internal .Fail (fmt .Errorf ("%s | %s (sub_code = %s, sub_msg = %s)" , code , ret .Get ("msg" ).String (), ret .Get ("sub_code" ).String (), ret .Get ("sub_msg" ).String ()))
200
200
}
201
201
return ret , nil
202
202
}
@@ -205,7 +205,7 @@ func (c *Client) UploadWithReader(ctx context.Context, method string, fieldName,
205
205
data , err := c .Decrypt (ret .String ())
206
206
if err != nil {
207
207
log .SetError (err )
208
- return lib .Fail (err )
208
+ return internal .Fail (err )
209
209
}
210
210
log .Set ("decrypt" , string (data ))
211
211
@@ -214,27 +214,27 @@ func (c *Client) UploadWithReader(ctx context.Context, method string, fieldName,
214
214
215
215
func (c * Client ) verifyResp (key string , body []byte ) (gjson.Result , error ) {
216
216
if c .pubKey == nil {
217
- return lib .Fail (errors .New ("public key is nil (forgotten configure?)" ))
217
+ return internal .Fail (errors .New ("public key is nil (forgotten configure?)" ))
218
218
}
219
219
220
220
ret := gjson .ParseBytes (body )
221
221
222
222
signByte , err := base64 .StdEncoding .DecodeString (ret .Get ("sign" ).String ())
223
223
if err != nil {
224
- return lib .Fail (err )
224
+ return internal .Fail (err )
225
225
}
226
226
227
- hash := crypto .SHA256
227
+ xhash := crypto .SHA256
228
228
if ret .Get ("sign_type" ).String () == "RSA" {
229
- hash = crypto .SHA1
229
+ xhash = crypto .SHA1
230
230
}
231
231
232
232
if errResp := ret .Get ("error_response" ); errResp .Exists () {
233
- if err = c .pubKey .Verify (hash , []byte (errResp .Raw ), signByte ); err != nil {
234
- return lib .Fail (err )
233
+ if err = c .pubKey .Verify (xhash , []byte (errResp .Raw ), signByte ); err != nil {
234
+ return internal .Fail (err )
235
235
}
236
236
237
- return lib .Fail (fmt .Errorf ("%s | %s (sub_code = %s, sub_msg = %s)" ,
237
+ return internal .Fail (fmt .Errorf ("%s | %s (sub_code = %s, sub_msg = %s)" ,
238
238
errResp .Get ("code" ).String (),
239
239
errResp .Get ("msg" ).String (),
240
240
errResp .Get ("sub_code" ).String (),
@@ -243,8 +243,8 @@ func (c *Client) verifyResp(key string, body []byte) (gjson.Result, error) {
243
243
}
244
244
245
245
resp := ret .Get (key )
246
- if err = c .pubKey .Verify (hash , []byte (resp .Raw ), signByte ); err != nil {
247
- return lib .Fail (err )
246
+ if err = c .pubKey .Verify (xhash , []byte (resp .Raw ), signByte ); err != nil {
247
+ return internal .Fail (err )
248
248
}
249
249
return resp , nil
250
250
}
@@ -302,7 +302,7 @@ func (c *Client) DecodeEncryptData(hash crypto.Hash, data, sign string) ([]byte,
302
302
}
303
303
304
304
// VerifyNotify 验证回调通知表单数据
305
- func (c * Client ) VerifyNotify (form url.Values ) (value. V , error ) {
305
+ func (c * Client ) VerifyNotify (form url.Values ) (V , error ) {
306
306
if c .pubKey == nil {
307
307
return nil , errors .New ("public key is nil (forgotten configure?)" )
308
308
}
@@ -312,7 +312,7 @@ func (c *Client) VerifyNotify(form url.Values) (value.V, error) {
312
312
return nil , err
313
313
}
314
314
315
- v := value. V {}
315
+ v := V {}
316
316
for key , vals := range form {
317
317
if key == "sign_type" || key == "sign" || len (vals ) == 0 {
318
318
continue
@@ -321,11 +321,11 @@ func (c *Client) VerifyNotify(form url.Values) (value.V, error) {
321
321
}
322
322
str := v .Encode ("=" , "&" , value .WithEmptyMode (value .EmptyIgnore ))
323
323
324
- hash := crypto .SHA256
324
+ xhash := crypto .SHA256
325
325
if form .Get ("sign_type" ) == "RSA" {
326
- hash = crypto .SHA1
326
+ xhash = crypto .SHA1
327
327
}
328
- if err = c .pubKey .Verify (hash , []byte (str ), sign ); err != nil {
328
+ if err = c .pubKey .Verify (xhash , []byte (str ), sign ); err != nil {
329
329
return nil , err
330
330
}
331
331
return v , nil
@@ -368,7 +368,7 @@ func NewClient(appid, aesKey string, options ...Option) *Client {
368
368
appid : appid ,
369
369
aesKey : aesKey ,
370
370
gateway : "https://openapi.alipay.com/gateway.do" ,
371
- client : lib .NewClient (),
371
+ client : internal .NewClient (),
372
372
}
373
373
for _ , f := range options {
374
374
f (c )
@@ -382,7 +382,7 @@ func NewSandbox(appid, aesKey string, options ...Option) *Client {
382
382
appid : appid ,
383
383
aesKey : aesKey ,
384
384
gateway : "https://openapi-sandbox.dl.alipaydev.com/gateway.do" ,
385
- client : lib .NewClient (),
385
+ client : internal .NewClient (),
386
386
}
387
387
for _ , f := range options {
388
388
f (c )
0 commit comments