Skip to content

Commit e465722

Browse files
authored
Merge pull request #615 from ArtisanCloud/develop
由于有用户遇见之前的转账接口失效,微信使用了新的转账场景功能, 添加商户转账功能 https://pay.weixin.qq.com/doc/v3/merchant/4012716434
2 parents 545d1d4 + b17ce77 commit e465722

File tree

5 files changed

+102
-0
lines changed

5 files changed

+102
-0
lines changed

src/payment/application.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/ArtisanCloud/PowerWeChat/v3/src/payment/apply4Sub"
1313
"github.com/ArtisanCloud/PowerWeChat/v3/src/payment/base"
1414
"github.com/ArtisanCloud/PowerWeChat/v3/src/payment/bill"
15+
"github.com/ArtisanCloud/PowerWeChat/v3/src/payment/fundApp"
1516
"github.com/ArtisanCloud/PowerWeChat/v3/src/payment/jssdk"
1617
kernel2 "github.com/ArtisanCloud/PowerWeChat/v3/src/payment/kernel"
1718
"github.com/ArtisanCloud/PowerWeChat/v3/src/payment/merchant"
@@ -50,6 +51,7 @@ type Payment struct {
5051
RedPack *redpack.Client
5152
Transfer *transfer.Client
5253
TransferBatch *transfer.BatchClient
54+
FundApp *fundApp.Client
5355
Reverse *reverse.Client
5456
ProfitSharing *profitSharing.Client
5557

@@ -200,6 +202,11 @@ func NewPayment(config *UserConfig) (*Payment, error) {
200202
return nil, err
201203
}
202204

205+
//-------------- FundApp --------------
206+
app.FundApp, err = fundApp.RegisterProvider(app)
207+
if err != nil {
208+
return nil, err
209+
}
203210
//-------------- Reverse --------------
204211
app.Reverse, err = reverse.RegisterProvider(app)
205212
if err != nil {
@@ -284,6 +291,8 @@ func (app *Payment) GetComponent(name string) interface{} {
284291
return app.RedPack
285292
case "Transfer":
286293
return app.Transfer
294+
case "FundApp":
295+
return app.FundApp
287296
case "Reverse":
288297
return app.Reverse
289298
case "ProfitSharing":

src/payment/fundApp/client.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package fundApp
2+
3+
import (
4+
"context"
5+
"github.com/ArtisanCloud/PowerLibs/v3/object"
6+
"github.com/ArtisanCloud/PowerWeChat/v3/src/payment/fundApp/request"
7+
"github.com/ArtisanCloud/PowerWeChat/v3/src/payment/fundApp/response"
8+
payment "github.com/ArtisanCloud/PowerWeChat/v3/src/payment/kernel"
9+
10+
"net/http"
11+
)
12+
13+
type Client struct {
14+
*payment.BaseClient
15+
}
16+
17+
func NewClient(app *payment.ApplicationPaymentInterface) (*Client, error) {
18+
baseClient, err := payment.NewBaseClient(app)
19+
if err != nil {
20+
return nil, err
21+
}
22+
return &Client{
23+
baseClient,
24+
}, nil
25+
}
26+
27+
// 发起转账
28+
// https://pay.weixin.qq.com/doc/v3/merchant/4012716434
29+
func (comp *Client) TransferBills(ctx context.Context, data *request.RequestTransferBills) (*response.ResponseTransferBills, error) {
30+
31+
result := &response.ResponseTransferBills{}
32+
33+
params, err := object.StructToHashMap(data)
34+
if err != nil {
35+
return nil, err
36+
}
37+
38+
endpoint := comp.Wrap("/v3/fund-app/mch-transfer/transfer-bills")
39+
_, err = comp.SafeRequestV3(ctx, endpoint, nil, http.MethodPost, params, nil, result)
40+
41+
return result, err
42+
}

src/payment/fundApp/provider.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package fundApp
2+
3+
import (
4+
"github.com/ArtisanCloud/PowerWeChat/v3/src/payment/kernel"
5+
)
6+
7+
func RegisterProvider(app kernel.ApplicationPaymentInterface) (*Client, error) {
8+
9+
return NewClient(&app)
10+
11+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package request
2+
3+
type RequestPayTransferToPocket struct {
4+
}
5+
6+
type TransferSceneReportInfo struct {
7+
InfoType string `json:"info_type,omitempty"`
8+
InfoContent string `json:"info_content,omitempty"`
9+
}
10+
11+
type RequestTransferBills struct {
12+
Appid string `json:"appid,omitempty"`
13+
OutBillNo string `json:"out_bill_no,omitempty"`
14+
TransferSceneId string `json:"transfer_scene_id,omitempty"`
15+
Openid string `json:"openid,omitempty"`
16+
UserName string `json:"user_name,omitempty"`
17+
TransferAmount int `json:"transfer_amount,omitempty"`
18+
TransferRemark string `json:"transfer_remark,omitempty"`
19+
NotifyUrl string `json:"notify_url,omitempty"`
20+
UserRecvPerception string `json:"user_recv_perception,omitempty"`
21+
TransferSceneReportInfos []TransferSceneReportInfo `json:"transfer_scene_report_infos,omitempty"`
22+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package response
2+
3+
import (
4+
"github.com/ArtisanCloud/PowerWeChat/v3/src/kernel/response"
5+
"time"
6+
)
7+
8+
// https://work.weixin.qq.com/api/doc/90000/90135/90278
9+
10+
type ResponseTransferBills struct {
11+
response.ResponsePayment
12+
OutBillNo string `json:"out_bill_no"`
13+
TransferBillNo string `json:"transfer_bill_no"`
14+
CreateTime time.Time `json:"create_time"`
15+
State string `json:"state"`
16+
FailReason string `json:"fail_reason"`
17+
PackageInfo string `json:"package_info"`
18+
}

0 commit comments

Comments
 (0)