-
Notifications
You must be signed in to change notification settings - Fork 0
/
transfer.go
98 lines (83 loc) · 2.82 KB
/
transfer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package pay
import (
"fmt"
"github.com/imokyou/wechat/mch/core"
wechatutil "github.com/imokyou/wechat/util"
)
type TransferRequest struct {
MchAppid string `json:"mch_appid"`
Mchid string `json:"mchid"`
DeviceInfo string `json:"device_info"`
NonceStr string `json:"nonce_str"`
PartnerTradeNo string `json:"partner_trade_no"`
Openid string `json:"openid"`
CheckName string `json:"check_name"`
ReUserName string `json:"re_user_name"`
Amount int `json:"amount"`
Desc string `json:"desc"`
SpbillCreateIp string `json:"spbill_create_ip"`
}
type TransferResponse struct {
ReturnCode string `json:"return_code"`
ReturnMsg string `json:"return_msg"`
MchAppid string `json:"mch_appid"`
Mchid string `json:"mchid"`
DeviceInfo string `json:"device_info"`
NonceStr string `json:"nonce_str"`
ResultCode string `json:"result_code"`
ErrCode string `json:"err_code"`
ErrCodeDes string `json:"err_code_des"`
PartnerTradeNo string `json:"partner_trade_no"`
PaymentNo string `json:"payment_no"`
PaymentTime string `json:"payment_time"`
}
// Transfer 企业付款.
// NOTE: 请求需要证书.
func Transfer(clt *core.Client, req *TransferRequest) (resp *TransferResponse, err error) {
params := make(map[string]string)
respParams := make(map[string]string)
params["mch_appid"] = req.MchAppid
params["mchid"] = req.Mchid
if req.DeviceInfo != "" {
params["DeviceInfo"] = req.DeviceInfo
}
if req.NonceStr != "" {
params["nonce_str"] = req.NonceStr
} else {
params["nonce_str"] = wechatutil.NonceStr()
}
params["partner_trade_no"] = req.PartnerTradeNo
params["openid"] = req.Openid
if req.CheckName != "" {
params["check_name"] = req.CheckName
} else {
params["check_name"] = "NO_CHECK"
}
if req.ReUserName != "" {
params["re_user_name"] = req.ReUserName
}
params["amount"] = fmt.Sprintf("%d", req.Amount)
params["desc"] = req.Desc
if req.SpbillCreateIp != "" {
params["spbill_create_ip"] = req.SpbillCreateIp
} else {
params["spbill_create_ip"] = "127.0.0.1"
}
respParams, err = transfer(clt, params)
resp.ReturnCode = respParams["return_code"]
resp.ReturnMsg = respParams["return_msg"]
resp.MchAppid = respParams["mch_appid"]
resp.Mchid = respParams["mchid"]
resp.DeviceInfo = respParams["device_info"]
resp.NonceStr = respParams["nonce_str"]
resp.ResultCode = respParams["result_code"]
resp.ErrCode = respParams["err_code"]
resp.ErrCodeDes = respParams["err_code_res"]
resp.PartnerTradeNo = respParams["partner_trade_no"]
resp.PaymentNo = respParams["payment_no"]
resp.PaymentTime = respParams["payment_time"]
return
}
func transfer(clt *core.Client, req map[string]string) (resp map[string]string, err error) {
return clt.PostXML(core.APIBaseURL()+"/mmpaymkttransfers/promotion/transfers", req)
}