From 352025650d99655c5a127603e2da63b34f8cf7c6 Mon Sep 17 00:00:00 2001 From: hong <785131182@qq.com> Date: Fri, 21 Feb 2020 11:08:47 +0800 Subject: [PATCH] fix: once init --- client.go | 16 ++++++++++++---- param.go | 13 +++++-------- payCloseOrder.go | 4 ++-- payDownloadBill.go | 2 +- payDownloadComment.go | 2 +- payDownloadFundFlow.go | 2 +- payGetPublicKey.go | 2 +- payRefundApply.go | 4 ++-- payRefundQuery.go | 4 ++-- payReport.go | 2 +- payReverseOrder.go | 4 ++-- payTransfer.go | 2 +- payTransferBank.go | 4 ++-- payTransferBankQuery.go | 4 ++-- payTransferQuery.go | 2 +- payUnifiedMicro.go | 4 ++-- payUnifiedOrder.go | 4 ++-- payUnifiedQuery.go | 4 ++-- 18 files changed, 42 insertions(+), 37 deletions(-) diff --git a/client.go b/client.go index b4abdd1..9517308 100644 --- a/client.go +++ b/client.go @@ -3,6 +3,7 @@ package wechat_sdk import ( "errors" "io" + "sync" ) type ResultParam interface { @@ -74,7 +75,12 @@ type WePayer interface { type option func(*myPayer) +var ( + defaultPayer *myPayer +) + type myPayer struct { + once sync.Once appId string //appid mchId string //mchid secret string //secret用于获取token @@ -83,10 +89,12 @@ type myPayer struct { //不向微信发送接口请求report func NewPayer(options ...option) WePayer { - defaultPayer := &myPayer{} - for _, option := range options { - option(defaultPayer) - } + defaultPayer = &myPayer{} + defaultPayer.once.Do(func() { + for _, option := range options { + option(defaultPayer) + } + }) return defaultPayer } diff --git a/param.go b/param.go index 4e79ce7..496dc73 100644 --- a/param.go +++ b/param.go @@ -71,10 +71,7 @@ func (p Param) SortKey() (keys []string) { return } -func (p Param) Sign(apiKey string, signType string) string { - if apiKey == "" { - return "" - } +func (p Param) Sign(signType string) string { var result string keys := p.SortKey() var signStr string @@ -90,10 +87,10 @@ func (p Param) Sign(apiKey string, signType string) string { } signStr += str } - signStr += fmt.Sprintf("&key=%v", apiKey) + signStr += fmt.Sprintf("&key=%v", defaultPayer.apiKey) switch signType { case e.SignType256: - result = strings.ToUpper(util.SignHMACSHA256(signStr, apiKey)) + result = strings.ToUpper(util.SignHMACSHA256(signStr, defaultPayer.apiKey)) case e.SignTypeMD5: result = strings.ToUpper(util.SignMd5(signStr)) default: @@ -131,12 +128,12 @@ func (r resultMap) Data() map[string]string { return r } -func (r resultMap) Sign(apiKey string, signType string) string { +func (r resultMap) Sign(signType string) string { p := NewParam() for k, v := range r { p[k] = v } - return p.Sign(apiKey, signType) + return p.Sign(signType) } //XML to Param(遍历生成) diff --git a/payCloseOrder.go b/payCloseOrder.go index 3942428..5c45569 100644 --- a/payCloseOrder.go +++ b/payCloseOrder.go @@ -46,7 +46,7 @@ func (m *myPayer) CloseOrder(param Param) (ResultParam, error) { return nil, errors.New("no need param: " + key) } } - sign := param.Sign(m.apiKey, signType) + sign := param.Sign(signType) param.Add("sign", sign) reader, err := param.MarshalXML() @@ -75,7 +75,7 @@ func (m *myPayer) CloseOrder(param Param) (ResultParam, error) { errDes, _ := result.GetString("err_code_des") return nil, errors.New(errDes) } - sign = result.Sign(m.apiKey, signType) + sign = result.Sign(signType) if wxSign, _ := result.GetString("sign"); sign != wxSign { return nil, e.ErrCheckSign } diff --git a/payDownloadBill.go b/payDownloadBill.go index 51eda31..20d8a0f 100644 --- a/payDownloadBill.go +++ b/payDownloadBill.go @@ -52,7 +52,7 @@ func (m *myPayer) DownloadBill(param Param, path string) error { } //签名 - sign := param.Sign(m.apiKey, e.SignTypeMD5) + sign := param.Sign(e.SignTypeMD5) param.Add("sign", sign) reader, err := param.MarshalXML() diff --git a/payDownloadComment.go b/payDownloadComment.go index b54c13f..3bd3f77 100644 --- a/payDownloadComment.go +++ b/payDownloadComment.go @@ -62,7 +62,7 @@ func (m *myPayer) DownloadComment(param Param, p12CertPath string, path string) } } - sign := param.Sign(m.apiKey, signType) + sign := param.Sign(signType) param.Add("sign", sign) reader, err := param.MarshalXML() diff --git a/payDownloadFundFlow.go b/payDownloadFundFlow.go index b3ff3d8..c3a5660 100644 --- a/payDownloadFundFlow.go +++ b/payDownloadFundFlow.go @@ -66,7 +66,7 @@ func (m *myPayer) DownloadFundFlow(param Param, p12CertPath string, path string) } } - sign := param.Sign(m.apiKey, signType) + sign := param.Sign(signType) param.Add("sign", sign) reader, err := param.MarshalXML() diff --git a/payGetPublicKey.go b/payGetPublicKey.go index 9b2d196..b3b8497 100644 --- a/payGetPublicKey.go +++ b/payGetPublicKey.go @@ -33,7 +33,7 @@ func (m *myPayer) GetPublicKey(p12CertPath string, targetPath string) error { param.Add("mch_id", m.mchId) param.Add("nonce_str", nonceStr) param.Add("sign_type", e.SignTypeMD5) - param.Add("sign", param.Sign(m.apiKey, e.SignTypeMD5)) + param.Add("sign", param.Sign(e.SignTypeMD5)) reader, err := param.MarshalXML() if err != nil { diff --git a/payRefundApply.go b/payRefundApply.go index b488f80..b45608c 100644 --- a/payRefundApply.go +++ b/payRefundApply.go @@ -64,7 +64,7 @@ func (m *myPayer) RefundOrder(param Param, p12CertPath string) (ResultParam, err } } - sign := param.Sign(m.apiKey, signType) + sign := param.Sign(signType) param.Add("sign", sign) reader, err := param.MarshalXML() @@ -92,7 +92,7 @@ func (m *myPayer) RefundOrder(param Param, p12CertPath string) (ResultParam, err errDes, _ := result.GetString("err_code_des") return nil, errors.New(errDes) } - sign = result.Sign(m.apiKey, signType) + sign = result.Sign(signType) if resultSign, _ := result.GetString("sign"); resultSign != sign { return nil, e.ErrCheckSign } diff --git a/payRefundQuery.go b/payRefundQuery.go index aacd3d0..55b0cff 100644 --- a/payRefundQuery.go +++ b/payRefundQuery.go @@ -58,7 +58,7 @@ func (m *myPayer) RefundQuery(param Param) (ResultParam, error) { } } - sign := param.Sign(m.apiKey, signType) + sign := param.Sign(signType) param.Add("sign", sign) reader, err := param.MarshalXML() @@ -87,7 +87,7 @@ func (m *myPayer) RefundQuery(param Param) (ResultParam, error) { errDes, _ := result.GetString("err_code_des") return nil, errors.New(errDes) } - sign = result.Sign(m.apiKey, signType) + sign = result.Sign(signType) if resultSign, _ := result.GetString("sign"); resultSign != sign { return nil, e.ErrCheckSign } diff --git a/payReport.go b/payReport.go index ee2640c..2755299 100644 --- a/payReport.go +++ b/payReport.go @@ -63,7 +63,7 @@ func (m *myPayer) Report(param Param) error { } } - sign := param.Sign(m.apiKey, signType) + sign := param.Sign(signType) param.Add("sign", sign) reader, err := param.MarshalXML() diff --git a/payReverseOrder.go b/payReverseOrder.go index 9f21636..0198648 100644 --- a/payReverseOrder.go +++ b/payReverseOrder.go @@ -67,7 +67,7 @@ func (m *myPayer) ReverseOrder(param Param, certPath string) (ResultParam, error } } - sign := param.Sign(m.apiKey, signType) + sign := param.Sign(signType) param.Add("sign", sign) reader, err := param.MarshalXML() @@ -97,7 +97,7 @@ func (m *myPayer) ReverseOrder(param Param, certPath string) (ResultParam, error errDes, _ := result.GetString("err_code_des") return nil, errors.New(errDes) } - sign = result.Sign(m.apiKey, signType) + sign = result.Sign(signType) if wxSign, _ := result.GetString("sign"); sign != wxSign { return nil, e.ErrCheckSign } diff --git a/payTransfer.go b/payTransfer.go index 19d5ac1..be8b16f 100644 --- a/payTransfer.go +++ b/payTransfer.go @@ -44,7 +44,7 @@ func (m *myPayer) Transfers(param Param, p12CertPath string) (ResultParam, error } } - sign := param.Sign(m.apiKey, e.SignTypeMD5) + sign := param.Sign(e.SignTypeMD5) param.Add("sign", sign) reader, err := param.MarshalXML() diff --git a/payTransferBank.go b/payTransferBank.go index 85506b9..17daeb6 100644 --- a/payTransferBank.go +++ b/payTransferBank.go @@ -63,7 +63,7 @@ func (m *myPayer) TransferBank(param Param, p12CertPath string, publicKeyPath st param.Add("enc_bank_no", base64.StdEncoding.EncodeToString(encryptBankCard)) param.Add("enc_true_name", base64.StdEncoding.EncodeToString(encryptBankName)) - sign := param.Sign(m.apiKey, e.SignTypeMD5) + sign := param.Sign(e.SignTypeMD5) param.Add("sign", sign) reader, err := param.MarshalXML() @@ -90,7 +90,7 @@ func (m *myPayer) TransferBank(param Param, p12CertPath string, publicKeyPath st errDes, _ := result.GetString("err_code_des") return nil, errors.New(errDes) } - sign = result.Sign(m.apiKey, e.SignTypeMD5) + sign = result.Sign(e.SignTypeMD5) if wxSign, _ := result.GetString("sign"); sign != wxSign { return nil, e.ErrCheckSign } diff --git a/payTransferBankQuery.go b/payTransferBankQuery.go index 0045c2e..78518dc 100644 --- a/payTransferBankQuery.go +++ b/payTransferBankQuery.go @@ -42,7 +42,7 @@ func (m *myPayer) TransferBankQuery(param Param, p12CertPath string) (ResultPara } } - sign := param.Sign(m.apiKey, e.SignTypeMD5) + sign := param.Sign(e.SignTypeMD5) param.Add("sign", sign) reader, err := param.MarshalXML() @@ -69,7 +69,7 @@ func (m *myPayer) TransferBankQuery(param Param, p12CertPath string) (ResultPara errDes, _ := result.GetString("err_code_des") return nil, errors.New(errDes) } - sign = result.Sign(m.apiKey, e.SignTypeMD5) + sign = result.Sign(e.SignTypeMD5) if wxSign, _ := result.GetString("sign"); sign != wxSign { return nil, e.ErrCheckSign } diff --git a/payTransferQuery.go b/payTransferQuery.go index 8e55a08..5b0abd4 100644 --- a/payTransferQuery.go +++ b/payTransferQuery.go @@ -42,7 +42,7 @@ func (m *myPayer) TransfersQuery(param Param, p12CertPath string) (ResultParam, return nil, errors.New("no need param: " + k) } } - sign := param.Sign(m.apiKey, e.SignTypeMD5) + sign := param.Sign(e.SignTypeMD5) param.Add("sign", sign) reader, err := param.MarshalXML() diff --git a/payUnifiedMicro.go b/payUnifiedMicro.go index e91227b..6460ef6 100644 --- a/payUnifiedMicro.go +++ b/payUnifiedMicro.go @@ -43,7 +43,7 @@ func (m *myPayer) UnifiedMicro(param Param) (ResultParam, error) { } } - sign := param.Sign(m.apiKey, signType) + sign := param.Sign(signType) param.Add("sign", sign) reader, err := param.MarshalXML() @@ -72,7 +72,7 @@ func (m *myPayer) UnifiedMicro(param Param) (ResultParam, error) { errDes, _ := result.GetString("err_code_des") return nil, errors.New(errDes) } - sign = result.Sign(m.apiKey, signType) + sign = result.Sign(signType) if wxSign, _ := result.GetString("sign"); sign != wxSign { return nil, e.ErrCheckSign } diff --git a/payUnifiedOrder.go b/payUnifiedOrder.go index 2a2ebb6..cd37789 100644 --- a/payUnifiedOrder.go +++ b/payUnifiedOrder.go @@ -80,7 +80,7 @@ func (m *myPayer) UnifiedOrder(param Param) (ResultParam, error) { } } - sign := param.Sign(m.apiKey, signType) + sign := param.Sign(signType) //将签名添加到需要发送的参数里 param.Add("sign", sign) @@ -110,7 +110,7 @@ func (m *myPayer) UnifiedOrder(param Param) (ResultParam, error) { errDes, _ := result.GetString("err_code_des") return nil, errors.New(errDes) } - sign = result.Sign(m.apiKey, signType) + sign = result.Sign(signType) if wxSign, _ := result.GetString("sign"); sign != wxSign { return nil, e.ErrCheckSign } diff --git a/payUnifiedQuery.go b/payUnifiedQuery.go index 90a5ddd..018dbc5 100644 --- a/payUnifiedQuery.go +++ b/payUnifiedQuery.go @@ -61,7 +61,7 @@ func (m *myPayer) UnifiedQuery(param Param) (ResultParam, error) { return nil, errors.New("no need param: " + k) } } - sign := param.Sign(m.apiKey, signType) + sign := param.Sign(signType) param.Add("sign", sign) reader, err := param.MarshalXML() @@ -91,7 +91,7 @@ func (m *myPayer) UnifiedQuery(param Param) (ResultParam, error) { errDes, _ := result.GetString("err_code_des") return nil, errors.New(errDes) } - sign = result.Sign(m.apiKey, signType) + sign = result.Sign(signType) if wxSign, _ := result.GetString("sign"); sign != wxSign { return nil, e.ErrCheckSign }