Skip to content

Commit 75bd082

Browse files
authored
v1.5.71 (#226)
* 新增微信 银行组件(服务商)相关接口 * v1.5.71
1 parent bf69ae1 commit 75bd082

File tree

12 files changed

+323
-9
lines changed

12 files changed

+323
-9
lines changed

alipay/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ func (a *Client) doAliPay(ctx context.Context, bm gopay.BodyMap, method string,
235235
if aat != util.NULL {
236236
pubBody.Set("app_auth_token", aat)
237237
}
238-
if method == "alipay.user.info.share" {
238+
if len(authToken) > 0 {
239239
pubBody.Set("auth_token", authToken[0])
240240
}
241241
if bodyStr != util.NULL {

alipay/member_api.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,9 +394,9 @@ func (a *Client) UserCertdocCertverifyPreconsult(ctx context.Context, bm gopay.B
394394

395395
// alipay.user.certdoc.certverify.consult(实名证件信息比对验证咨询)
396396
// 文档地址:https://opendocs.alipay.com/apis/api_2/alipay.user.certdoc.certverify.consult
397-
func (a *Client) UserCertdocCertverifyConsult(ctx context.Context, bm gopay.BodyMap) (aliRsp *UserCertdocCertverifyConsultRsp, err error) {
397+
func (a *Client) UserCertdocCertverifyConsult(ctx context.Context, bm gopay.BodyMap, authToken string) (aliRsp *UserCertdocCertverifyConsultRsp, err error) {
398398
var bs []byte
399-
if bs, err = a.doAliPay(ctx, bm, "alipay.user.certdoc.certverify.consult"); err != nil {
399+
if bs, err = a.doAliPay(ctx, bm, "alipay.user.certdoc.certverify.consult", authToken); err != nil {
400400
return nil, err
401401
}
402402
aliRsp = new(UserCertdocCertverifyConsultRsp)

alipay/member_api_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ func TestUserCertdocCertverifyConsult(t *testing.T) {
234234
bm := make(gopay.BodyMap)
235235
bm.Set("verify_id", "671ffcda5447bc87e9ed2f669eb143d4")
236236
// 发起请求
237-
aliRsp, err := client.UserCertdocCertverifyConsult(ctx, bm)
237+
aliRsp, err := client.UserCertdocCertverifyConsult(ctx, bm, "auth_token")
238238
if err != nil {
239239
xlog.Error(err)
240240
return

constant.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const (
77
OK = "OK"
88
DebugOff = 0
99
DebugOn = 1
10-
Version = "1.5.70"
10+
Version = "1.5.71"
1111
)
1212

1313
type DebugSwitch int8

doc/wechat_v3.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,13 @@ wechat.V3DecryptScoreNotifyCipherText()
384384
* 查询退款ByNo:`client.V3EcommerceRefundQueryByNo()`
385385
* 垫付退款回补:`client.V3EcommerceRefundAdvance()`
386386
* 查询垫付回补结果:`client.V3EcommerceRefundAdvanceResult()`
387+
* <font color='#07C160' size='4'>银行组件(服务商)</font>
388+
* 获取对私银行卡号开户银行:`client.V3BankSearchBank()`
389+
* 查询支持个人业务的银行列表:`client.V3BankSearchPersonalList()`
390+
* 查询支持对公业务的银行列表:`client.V3BankSearchCorporateList()`
391+
* 查询省份列表:`client.V3BankSearchProvinceList()`
392+
* 查询城市列表:`client.V3BankSearchCityList()`
393+
* 查询支行列表:`client.V3BankSearchBranchList()`
387394

388395

389396
### 微信v3公共 API

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ module github.com/go-pay/gopay
22

33
go 1.16
44

5-
require golang.org/x/crypto v0.0.0-20211202192323-5770296d904e
5+
require golang.org/x/crypto v0.0.0-20220208233918-bba287dce954

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
golang.org/x/crypto v0.0.0-20211202192323-5770296d904e h1:MUP6MR3rJ7Gk9LEia0LP2ytiH6MuCfs7qYz+47jGdD8=
2-
golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
1+
golang.org/x/crypto v0.0.0-20220208233918-bba287dce954 h1:BkypuErRT9A9I/iljuaG3/zdMjd/J6m8tKKJQtGfSdA=
2+
golang.org/x/crypto v0.0.0-20220208233918-bba287dce954/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
33
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
44
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
55
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

release_note.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
版本号:Release 1.5.70
1+
版本号:Release 1.5.71
22
修改记录:
33
(1) 微信V2:去除所有微信小程序、公众号相关接口,请使用 wechat-sdk
4+
(2) 支付宝:client.UserCertdocCertverifyConsult() 方法,增加 authToken 参数
5+
(2) 微信V3:新增 银行组件(服务商) 相关接口,详情查看v3文档最下方的接口列表
46

57
版本号:Release 1.5.69
68
修改记录:

wechat/v3/bank.go

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
package wechat
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"fmt"
7+
"net/http"
8+
9+
"github.com/go-pay/gopay/pkg/util"
10+
)
11+
12+
// 获取对私银行卡号开户银行
13+
// 注意:accountNo 需此方法加密:client.V3EncryptText()
14+
// Code = 0 is success
15+
// 服务商文档:https://pay.weixin.qq.com/wiki/doc/apiv3_partner/Offline/apis/chapter11_2_1.shtml
16+
func (c *ClientV3) V3BankSearchBank(ctx context.Context, accountNo string) (wxRsp *BankSearchBankRsp, err error) {
17+
uri := v3BankSearchBank + "?account_number=" + accountNo
18+
authorization, err := c.authorization(MethodGet, uri, nil)
19+
if err != nil {
20+
return nil, err
21+
}
22+
res, si, bs, err := c.doProdGet(ctx, uri, authorization)
23+
if err != nil {
24+
return nil, err
25+
}
26+
wxRsp = &BankSearchBankRsp{Code: Success, SignInfo: si}
27+
wxRsp.Response = new(BankSearchBank)
28+
if err = json.Unmarshal(bs, wxRsp.Response); err != nil {
29+
return nil, fmt.Errorf("json.Unmarshal(%s):%w", string(bs), err)
30+
}
31+
if res.StatusCode != http.StatusOK {
32+
wxRsp.Code = res.StatusCode
33+
wxRsp.Error = string(bs)
34+
return wxRsp, nil
35+
}
36+
return wxRsp, c.verifySyncSign(si)
37+
}
38+
39+
// 查询支持个人业务的银行列表
40+
// Code = 0 is success
41+
// 服务商文档:https://pay.weixin.qq.com/wiki/doc/apiv3_partner/Offline/apis/chapter11_2_2.shtml
42+
func (c *ClientV3) V3BankSearchPersonalList(ctx context.Context, limit, offset int) (wxRsp *BankSearchPersonalListRsp, err error) {
43+
if limit == 0 {
44+
limit = 20
45+
}
46+
uri := v3BankSearchPersonalList + "&limit=" + util.Int2String(limit) + "&offset=" + util.Int2String(offset)
47+
authorization, err := c.authorization(MethodGet, uri, nil)
48+
if err != nil {
49+
return nil, err
50+
}
51+
res, si, bs, err := c.doProdGet(ctx, uri, authorization)
52+
if err != nil {
53+
return nil, err
54+
}
55+
wxRsp = &BankSearchPersonalListRsp{Code: Success, SignInfo: si}
56+
wxRsp.Response = new(BankSearchList)
57+
if err = json.Unmarshal(bs, wxRsp.Response); err != nil {
58+
return nil, fmt.Errorf("json.Unmarshal(%s):%w", string(bs), err)
59+
}
60+
if res.StatusCode != http.StatusOK {
61+
wxRsp.Code = res.StatusCode
62+
wxRsp.Error = string(bs)
63+
return wxRsp, nil
64+
}
65+
return wxRsp, c.verifySyncSign(si)
66+
}
67+
68+
// 查询支持对公业务的银行列表
69+
// Code = 0 is success
70+
// 服务商文档:https://pay.weixin.qq.com/wiki/doc/apiv3_partner/Offline/apis/chapter11_2_3.shtml
71+
func (c *ClientV3) V3BankSearchCorporateList(ctx context.Context, limit, offset int) (wxRsp *BankSearchCorporateListRsp, err error) {
72+
if limit == 0 {
73+
limit = 20
74+
}
75+
uri := v3BankSearchCorporateList + "&limit=" + util.Int2String(limit) + "&offset=" + util.Int2String(offset)
76+
authorization, err := c.authorization(MethodGet, uri, nil)
77+
if err != nil {
78+
return nil, err
79+
}
80+
res, si, bs, err := c.doProdGet(ctx, uri, authorization)
81+
if err != nil {
82+
return nil, err
83+
}
84+
wxRsp = &BankSearchCorporateListRsp{Code: Success, SignInfo: si}
85+
wxRsp.Response = new(BankSearchList)
86+
if err = json.Unmarshal(bs, wxRsp.Response); err != nil {
87+
return nil, fmt.Errorf("json.Unmarshal(%s):%w", string(bs), err)
88+
}
89+
if res.StatusCode != http.StatusOK {
90+
wxRsp.Code = res.StatusCode
91+
wxRsp.Error = string(bs)
92+
return wxRsp, nil
93+
}
94+
return wxRsp, c.verifySyncSign(si)
95+
}
96+
97+
// 查询省份列表
98+
// Code = 0 is success
99+
// 服务商文档:https://pay.weixin.qq.com/wiki/doc/apiv3_partner/Offline/apis/chapter11_2_4.shtml
100+
func (c *ClientV3) V3BankSearchProvinceList(ctx context.Context) (wxRsp *BankSearchProvinceListRsp, err error) {
101+
authorization, err := c.authorization(MethodGet, v3BankSearchProvinceList, nil)
102+
if err != nil {
103+
return nil, err
104+
}
105+
res, si, bs, err := c.doProdGet(ctx, v3BankSearchProvinceList, authorization)
106+
if err != nil {
107+
return nil, err
108+
}
109+
wxRsp = &BankSearchProvinceListRsp{Code: Success, SignInfo: si}
110+
wxRsp.Response = new(BankSearchProvince)
111+
if err = json.Unmarshal(bs, wxRsp.Response); err != nil {
112+
return nil, fmt.Errorf("json.Unmarshal(%s):%w", string(bs), err)
113+
}
114+
if res.StatusCode != http.StatusOK {
115+
wxRsp.Code = res.StatusCode
116+
wxRsp.Error = string(bs)
117+
return wxRsp, nil
118+
}
119+
return wxRsp, c.verifySyncSign(si)
120+
}
121+
122+
// 查询城市列表
123+
// Code = 0 is success
124+
// 服务商文档:https://pay.weixin.qq.com/wiki/doc/apiv3_partner/Offline/apis/chapter11_2_5.shtml
125+
func (c *ClientV3) V3BankSearchCityList(ctx context.Context, provinceCode int) (wxRsp *BankSearchCityListRsp, err error) {
126+
url := fmt.Sprintf(v3BankSearchCityList, provinceCode)
127+
authorization, err := c.authorization(MethodGet, url, nil)
128+
if err != nil {
129+
return nil, err
130+
}
131+
res, si, bs, err := c.doProdGet(ctx, url, authorization)
132+
if err != nil {
133+
return nil, err
134+
}
135+
wxRsp = &BankSearchCityListRsp{Code: Success, SignInfo: si}
136+
wxRsp.Response = new(BankSearchCity)
137+
if err = json.Unmarshal(bs, wxRsp.Response); err != nil {
138+
return nil, fmt.Errorf("json.Unmarshal(%s):%w", string(bs), err)
139+
}
140+
if res.StatusCode != http.StatusOK {
141+
wxRsp.Code = res.StatusCode
142+
wxRsp.Error = string(bs)
143+
return wxRsp, nil
144+
}
145+
return wxRsp, c.verifySyncSign(si)
146+
}
147+
148+
// 查询支行列表
149+
// Code = 0 is success
150+
// 服务商文档:https://pay.weixin.qq.com/wiki/doc/apiv3_partner/Offline/apis/chapter11_2_6.shtml
151+
func (c *ClientV3) V3BankSearchBranchList(ctx context.Context, bankAliasCode string, cityCode, limit, offset int) (wxRsp *BankSearchBranchListRsp, err error) {
152+
if limit == 0 {
153+
limit = 20
154+
}
155+
uri := fmt.Sprintf(v3BankSearchBranchList, bankAliasCode) + "?city_code=" + util.Int2String(cityCode) + "&limit=" + util.Int2String(limit) + "&offset=" + util.Int2String(offset)
156+
authorization, err := c.authorization(MethodGet, uri, nil)
157+
if err != nil {
158+
return nil, err
159+
}
160+
res, si, bs, err := c.doProdGet(ctx, uri, authorization)
161+
if err != nil {
162+
return nil, err
163+
}
164+
wxRsp = &BankSearchBranchListRsp{Code: Success, SignInfo: si}
165+
wxRsp.Response = new(BankSearchBranch)
166+
if err = json.Unmarshal(bs, wxRsp.Response); err != nil {
167+
return nil, fmt.Errorf("json.Unmarshal(%s):%w", string(bs), err)
168+
}
169+
if res.StatusCode != http.StatusOK {
170+
wxRsp.Code = res.StatusCode
171+
wxRsp.Error = string(bs)
172+
return wxRsp, nil
173+
}
174+
return wxRsp, c.verifySyncSign(si)
175+
}

wechat/v3/client_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,4 +527,20 @@ func TestV3Withdraw(t *testing.T) {
527527
return
528528
}
529529
xlog.Debugf("wxRsp: %#v", wxRsp)
530+
xlog.Debugf("wxRsp.Response: %#v", wxRsp.Response)
531+
}
532+
533+
func TestV3BankSearchBank(t *testing.T) {
534+
encryptText, err := client.V3EncryptText("6213123456781234")
535+
if err != nil {
536+
xlog.Error(err)
537+
return
538+
}
539+
wxRsp, err := client.V3BankSearchBank(ctx, encryptText)
540+
if err != nil {
541+
xlog.Error(err)
542+
return
543+
}
544+
xlog.Debugf("wxRsp: %#v", wxRsp)
545+
xlog.Debugf("wxRsp.Response: %#v", wxRsp.Response)
530546
}

0 commit comments

Comments
 (0)