From 297c6340de2152c6627b8f82eb09293cf0b3fadd Mon Sep 17 00:00:00 2001 From: jgao Date: Mon, 22 Jun 2020 09:50:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(1.=E5=A2=9E=E5=8A=A0=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=95=86=E6=A8=A1=E5=BC=8F=E6=94=AF=E6=8C=812.=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=88=86=E8=B4=A6api):?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- account.go | 8 +++-- client.go | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++ constants.go | 8 +++++ go.mod | 2 ++ util.go | 9 ++++++ 5 files changed, 111 insertions(+), 2 deletions(-) diff --git a/account.go b/account.go index 9809274..929c1d7 100644 --- a/account.go +++ b/account.go @@ -7,19 +7,23 @@ import ( type Account struct { appID string + subAppId string mchID string + subMchId string apiKey string certData []byte isSandbox bool } // 创建微信支付账号 -func NewAccount(appID string, mchID string, apiKey string, isSanbox bool) *Account { +func NewAccount(appID string, subAppId string, mchID string, subMchId string, apiKey string, isSandbox bool) *Account { return &Account{ appID: appID, + subAppId: subAppId, mchID: mchID, + subMchId: subMchId, apiKey: apiKey, - isSandbox: isSanbox, + isSandbox: isSandbox, } } diff --git a/client.go b/client.go index d9d4e20..daa807e 100644 --- a/client.go +++ b/client.go @@ -53,6 +53,12 @@ func (c *Client) SetAccount(account *Account) { func (c *Client) fillRequestData(params Params) Params { params["appid"] = c.account.appID params["mch_id"] = c.account.mchID + if c.account.subAppId != "" { + params["sub_appid"] = c.account.subAppId + } + if c.account.subMchId != "" { + params["sub_mch_id"] = c.account.subMchId + } params["nonce_str"] = nonceStr() params["sign_type"] = c.signType params["sign"] = c.Sign(params) @@ -386,3 +392,83 @@ func (c *Client) AuthCodeToOpenid(params Params) (Params, error) { } return c.processResponseXml(xmlStr) } + +// 添加分账接收方 +func (c *Client) ProfitSharingAddReceiver(params Params) (Params, error) { + url := ProfitSharingAddReceiverUrl + xmlStr, err := c.postWithoutCert(url, params) + if err != nil { + return nil, err + } + return c.processResponseXml(xmlStr) +} + +// 删除分账接收方 +func (c *Client) ProfitSharingRemoveReceiver(params Params) (Params, error) { + url := ProfitSharingRemoveReceiverUrl + xmlStr, err := c.postWithoutCert(url, params) + if err != nil { + return nil, err + } + return c.processResponseXml(xmlStr) +} + +// 提交单次分账 +func (c *Client) ProfitSharing(params Params) (Params, error) { + url := ProfitSharingUrl + xmlStr, err := c.postWithCert(url, params) + if err != nil { + return nil, err + } + return c.processResponseXml(xmlStr) +} + +// 查询分账结果 +func (c *Client) ProfitSharingQuery(params Params) (Params, error) { + url := ProfitSharingQueryUrl + xmlStr, err := c.postWithoutCert(url, params) + if err != nil { + return nil, err + } + return c.processResponseXml(xmlStr) +} + +// 分账回退 +func (c *Client) ProfitSharingReturn(params Params) (Params, error) { + url := ProfitSharingReturnUrl + xmlStr, err := c.postWithCert(url, params) + if err != nil { + return nil, err + } + return c.processResponseXml(xmlStr) +} + +// 分账回退结果查询 +func (c *Client) ProfitSharingReturnQuery(params Params) (Params, error) { + url := ProfitSharingReturnQueryUrl + xmlStr, err := c.postWithoutCert(url, params) + if err != nil { + return nil, err + } + return c.processResponseXml(xmlStr) +} + +// 分账完结 +func (c *Client) ProfitSharingFinish(params Params) (Params, error) { + url := ProfitSharingFinishUrl + xmlStr, err := c.postWithoutCert(url, params) + if err != nil { + return nil, err + } + return c.processResponseXml(xmlStr) +} + +// 请求多次分账 +func (c *Client) MultiProfitSharing(params Params) (Params, error) { + url := MultiProfitSharingUrl + xmlStr, err := c.postWithoutCert(url, params) + if err != nil { + return nil, err + } + return c.processResponseXml(xmlStr) +} \ No newline at end of file diff --git a/constants.go b/constants.go index ce52fd1..21dd0de 100644 --- a/constants.go +++ b/constants.go @@ -18,6 +18,14 @@ const ( ReportUrl = "https://api.mch.weixin.qq.com/payitil/report" ShortUrl = "https://api.mch.weixin.qq.com/tools/shorturl" AuthCodeToOpenidUrl = "https://api.mch.weixin.qq.com/tools/authcodetoopenid" + ProfitSharingUrl = "https://api.mch.weixin.qq.com/secapi/pay/profitsharing" + MultiProfitSharingUrl = "https://api.mch.weixin.qq.com/secapi/pay/multiprofitsharing" + ProfitSharingQueryUrl = "https://api.mch.weixin.qq.com/pay/profitsharingquery" + ProfitSharingAddReceiverUrl= "https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver" + ProfitSharingRemoveReceiverUrl= "https://api.mch.weixin.qq.com/pay/profitsharingremovereceiver" + ProfitSharingReturnUrl = "https://api.mch.weixin.qq.com/secapi/pay/profitsharingreturn" + ProfitSharingReturnQueryUrl = "https://api.mch.weixin.qq.com/pay/profitsharingreturnquery" + ProfitSharingFinishUrl = "https://api.mch.weixin.qq.com/secapi/pay/profitsharingfinish" SandboxMicroPayUrl = "https://api.mch.weixin.qq.com/sandboxnew/pay/micropay" SandboxUnifiedOrderUrl = "https://api.mch.weixin.qq.com/sandboxnew/pay/unifiedorder" SandboxOrderQueryUrl = "https://api.mch.weixin.qq.com/sandboxnew/pay/orderquery" diff --git a/go.mod b/go.mod index a0f62d5..005a02a 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module github.com/objcoding/wxpay +go 1.14 + require golang.org/x/crypto v0.0.0-20180910181607-0e37d006457b diff --git a/util.go b/util.go index 02bc1ca..841dd88 100644 --- a/util.go +++ b/util.go @@ -3,6 +3,7 @@ package wxpay import ( "bytes" "crypto/tls" + "encoding/json" "encoding/pem" "encoding/xml" "golang.org/x/crypto/pkcs12" @@ -57,6 +58,14 @@ func MapToXml(params Params) string { return buf.String() } +func MapToJson(params Params) string { + paramData, err := json.Marshal(params) + if err != nil { + return "{}" + } + return string(paramData) +} + // 用时间戳生成随机字符串 func nonceStr() string { return strconv.FormatInt(time.Now().UTC().UnixNano(), 10)