Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
C
cy-sdk-go
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
base
cy-sdk-go
Commits
31d25dca
Commit
31d25dca
authored
Aug 04, 2022
by
wuerqiQs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cdp -> base all
parent
c20c223e
Pipeline
#18954
failed with stages
Changes
15
Pipelines
1
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
196 additions
and
196 deletions
+196
-196
alert.go
exception/alert.go
+2
-2
sentry.go
exception/sentry.go
+1
-1
dailylogger.go
logger/dailylogger.go
+1
-1
build.sh
sdktool/build.sh
+1
-1
mail.go
sdktool/cmd/mail.go
+1
-1
partner.go
sdktool/cmd/partner.go
+2
-2
root.go
sdktool/cmd/root.go
+2
-2
splistener.go
sdktool/cmd/splistener.go
+26
-26
tkserver.go
sdktool/cmd/tkserver.go
+2
-2
main.go
sdktool/main.go
+1
-1
engine.go
sdktool/tkserver/engine.go
+4
-4
splistener.go
supervisor/splistener.go
+0
-0
client.go
wechat/client/client.go
+0
-0
context.go
wechat/context/context.go
+152
-152
mch_pay.go
wechat/mch_pay.go
+1
-1
No files found.
exception/alert.go
View file @
31d25dca
...
@@ -16,8 +16,8 @@ import (
...
@@ -16,8 +16,8 @@ import (
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4"
"github.com/spf13/viper"
"github.com/spf13/viper"
cmq
"github.com/yougg/cmq-go-tdmq"
cmq
"github.com/yougg/cmq-go-tdmq"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/crypt"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/crypt"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/wechat"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/wechat"
"gopkg.in/gomail.v2"
"gopkg.in/gomail.v2"
)
)
...
...
exception/sentry.go
View file @
31d25dca
...
@@ -5,7 +5,7 @@ import (
...
@@ -5,7 +5,7 @@ import (
"github.com/getsentry/sentry-go"
"github.com/getsentry/sentry-go"
"github.com/spf13/viper"
"github.com/spf13/viper"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/version"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/version"
)
)
var
host
,
_
=
os
.
Hostname
()
var
host
,
_
=
os
.
Hostname
()
...
...
logger/dailylogger.go
View file @
31d25dca
...
@@ -10,7 +10,7 @@ import (
...
@@ -10,7 +10,7 @@ import (
rotatelogs
"github.com/lestrrat-go/file-rotatelogs"
rotatelogs
"github.com/lestrrat-go/file-rotatelogs"
"github.com/rs/zerolog"
"github.com/rs/zerolog"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/exception"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/exception"
"go.uber.org/zap"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
"gopkg.in/natefinch/lumberjack.v2"
...
...
sdktool/build.sh
View file @
31d25dca
...
@@ -7,4 +7,4 @@ if [ -x "$(command -v git)" ];then
...
@@ -7,4 +7,4 @@ if [ -x "$(command -v git)" ];then
fi
fi
basepath
=
$(
cd
`
dirname
$0
`
;
pwd
)
basepath
=
$(
cd
`
dirname
$0
`
;
pwd
)
CGO_ENABLED
=
0
GOOS
=
linux
GOARCH
=
amd64 go build
-tags
netgo
-ldflags
"-X 'gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/version.GitHash=
$(
git show
-s
--format
=
%h
)
' -X 'gitlab-ce.k8s.tools.vchangyi.com/cdp/cy-sdk-go/version.Version=1.0.0'"
CGO_ENABLED
=
0
GOOS
=
linux
GOARCH
=
amd64 go build
-tags
netgo
-ldflags
"-X 'gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/version.GitHash=
$(
git show
-s
--format
=
%h
)
' -X 'gitlab-ce.k8s.tools.vchangyi.com/cdp/cy-sdk-go/version.Version=1.0.0'"
sdktool/cmd/mail.go
View file @
31d25dca
...
@@ -17,7 +17,7 @@ package cmd
...
@@ -17,7 +17,7 @@ package cmd
import
(
import
(
"github.com/spf13/cobra"
"github.com/spf13/cobra"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/exception"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/exception"
)
)
// mailCmd represents the mail command
// mailCmd represents the mail command
...
...
sdktool/cmd/partner.go
View file @
31d25dca
...
@@ -20,8 +20,8 @@ import (
...
@@ -20,8 +20,8 @@ import (
"github.com/jmoiron/sqlx"
"github.com/jmoiron/sqlx"
"github.com/spf13/cobra"
"github.com/spf13/cobra"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/exception"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/exception"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/wechat"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/wechat"
// mysql
// mysql
_
"github.com/go-sql-driver/mysql"
_
"github.com/go-sql-driver/mysql"
...
...
sdktool/cmd/root.go
View file @
31d25dca
...
@@ -20,8 +20,8 @@ import (
...
@@ -20,8 +20,8 @@ import (
"os"
"os"
"github.com/spf13/cobra"
"github.com/spf13/cobra"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/exception"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/exception"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/version"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/version"
"github.com/spf13/viper"
"github.com/spf13/viper"
)
)
...
...
sdktool/cmd/splistener.go
View file @
31d25dca
package
cmd
package
cmd
import
(
import
(
"github.com/spf13/cobra"
"github.com/spf13/cobra"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp/cy-sdk-go/exception"
"gitlab-ce.k8s.tools.vchangyi.com/
base/cy-sdk-go/exception"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp/cy-sdk-go/supervisor"
"gitlab-ce.k8s.tools.vchangyi.com/
base/cy-sdk-go/supervisor"
)
)
/*
/*
由于Supervirsor 通过stdin/stdout 和EventListener 进行协议通信,所以EventListener 不能通过stdout输入其他非协议内容,不然EventListener的状态就会不正常
由于Supervirsor 通过stdin/stdout 和EventListener 进行协议通信,所以EventListener 不能通过stdout输入其他非协议内容,不然EventListener的状态就会不正常
这个暂时还没找到解决方案,暂时把initConfig里的输出注释掉
这个暂时还没找到解决方案,暂时把initConfig里的输出注释掉
*/
*/
// mailCmd represents the mail command
// mailCmd represents the mail command
var
spListenerCmd
=
&
cobra
.
Command
{
var
spListenerCmd
=
&
cobra
.
Command
{
Use
:
"splisten"
,
Use
:
"splisten"
,
Short
:
"supervisor 进程状态监听报警"
,
Short
:
"supervisor 进程状态监听报警"
,
Long
:
`supervisor 进程状态监听报警`
,
Long
:
`supervisor 进程状态监听报警`
,
Run
:
func
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
Run
:
func
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
exception
.
SetAlertViper
()
exception
.
SetAlertViper
()
supervisor
.
NewListener
()
.
Start
()
supervisor
.
NewListener
()
.
Start
()
},
},
}
}
func
init
()
{
func
init
()
{
rootCmd
.
AddCommand
(
spListenerCmd
)
rootCmd
.
AddCommand
(
spListenerCmd
)
}
}
sdktool/cmd/tkserver.go
View file @
31d25dca
...
@@ -17,8 +17,8 @@ package cmd
...
@@ -17,8 +17,8 @@ package cmd
import
(
import
(
"github.com/spf13/cobra"
"github.com/spf13/cobra"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/exception"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/exception"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/sdktool/tkserver"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/sdktool/tkserver"
)
)
// tkserverCmd represents the tkserver command
// tkserverCmd represents the tkserver command
...
...
sdktool/main.go
View file @
31d25dca
...
@@ -15,7 +15,7 @@ limitations under the License.
...
@@ -15,7 +15,7 @@ limitations under the License.
*/
*/
package
main
package
main
import
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/sdktool/cmd"
import
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/sdktool/cmd"
func
main
()
{
func
main
()
{
cmd
.
Execute
()
cmd
.
Execute
()
...
...
sdktool/tkserver/engine.go
View file @
31d25dca
...
@@ -8,10 +8,10 @@ import (
...
@@ -8,10 +8,10 @@ import (
"github.com/douyu/jupiter/pkg/server/xgrpc"
"github.com/douyu/jupiter/pkg/server/xgrpc"
"github.com/getsentry/sentry-go"
"github.com/getsentry/sentry-go"
"github.com/spf13/viper"
"github.com/spf13/viper"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/exception"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/exception"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/wechat/cache"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/wechat/cache"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/wechat/client"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/wechat/client"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/wechat/crypt"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/wechat/crypt"
)
)
type
tkServerEngine
struct
{
type
tkServerEngine
struct
{
...
...
supervisor/splistener.go
View file @
31d25dca
This diff is collapsed.
Click to expand it.
wechat/client/client.go
View file @
31d25dca
This diff is collapsed.
Click to expand it.
wechat/context/context.go
View file @
31d25dca
package
context
package
context
import
(
import
(
"encoding/xml"
"encoding/xml"
"errors"
"errors"
"io/ioutil"
"io/ioutil"
"net/http"
"net/http"
"net/url"
"net/url"
"strconv"
"strconv"
"time"
"time"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp/cy-sdk-go/wechat/crypt"
"gitlab-ce.k8s.tools.vchangyi.com/
base/cy-sdk-go/wechat/crypt"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp/cy-sdk-go/wechat/message"
"gitlab-ce.k8s.tools.vchangyi.com/
base/cy-sdk-go/wechat/message"
)
)
var
(
var
(
// ErrSign wechat sign error
// ErrSign wechat sign error
ErrSign
=
errors
.
New
(
"invalid sign"
)
ErrSign
=
errors
.
New
(
"invalid sign"
)
)
)
type
Context
interface
{
type
Context
interface
{
Query
(
key
string
)
(
string
,
bool
)
Query
(
key
string
)
(
string
,
bool
)
ParseRawMessage
()
(
*
message
.
MixMessage
,
error
)
ParseRawMessage
()
(
*
message
.
MixMessage
,
error
)
Render
([]
byte
)
Render
([]
byte
)
RenderString
(
string
)
RenderString
(
string
)
RenderXML
(
interface
{})
RenderXML
(
interface
{})
RenderMessage
(
message
.
Reply
)
RenderMessage
(
message
.
Reply
)
}
}
func
NewContext
(
req
*
http
.
Request
,
w
http
.
ResponseWriter
,
cfg
*
crypt
.
WechatConfig
)
Context
{
func
NewContext
(
req
*
http
.
Request
,
w
http
.
ResponseWriter
,
cfg
*
crypt
.
WechatConfig
)
Context
{
ctx
:=
&
ctxImpl
{
Writer
:
w
,
Request
:
req
,
cfg
:
cfg
}
ctx
:=
&
ctxImpl
{
Writer
:
w
,
Request
:
req
,
cfg
:
cfg
}
ctx
.
parse
()
ctx
.
parse
()
return
ctx
return
ctx
}
}
// Context struct
// Context struct
type
ctxImpl
struct
{
type
ctxImpl
struct
{
Writer
http
.
ResponseWriter
Writer
http
.
ResponseWriter
Request
*
http
.
Request
Request
*
http
.
Request
isSafeMode
bool
isSafeMode
bool
params
url
.
Values
params
url
.
Values
random
[]
byte
random
[]
byte
cfg
*
crypt
.
WechatConfig
cfg
*
crypt
.
WechatConfig
}
}
func
(
ctx
*
ctxImpl
)
parse
()
{
func
(
ctx
*
ctxImpl
)
parse
()
{
ctx
.
params
=
ctx
.
Request
.
URL
.
Query
()
ctx
.
params
=
ctx
.
Request
.
URL
.
Query
()
if
enctype
,
ok
:=
ctx
.
Query
(
"encrypt_type"
);
ok
{
if
enctype
,
ok
:=
ctx
.
Query
(
"encrypt_type"
);
ok
{
ctx
.
isSafeMode
=
enctype
==
"aes"
ctx
.
isSafeMode
=
enctype
==
"aes"
}
}
}
}
func
(
ctx
*
ctxImpl
)
ParseRawMessage
()
(
*
message
.
MixMessage
,
error
)
{
func
(
ctx
*
ctxImpl
)
ParseRawMessage
()
(
*
message
.
MixMessage
,
error
)
{
timestamp
,
_
:=
ctx
.
Query
(
"timestamp"
)
timestamp
,
_
:=
ctx
.
Query
(
"timestamp"
)
nonce
,
_
:=
ctx
.
Query
(
"nonce"
)
nonce
,
_
:=
ctx
.
Query
(
"nonce"
)
signature
,
_
:=
ctx
.
Query
(
"signature"
)
signature
,
_
:=
ctx
.
Query
(
"signature"
)
if
signature
!=
crypt
.
Signature
(
ctx
.
cfg
.
Token
,
timestamp
,
nonce
)
{
if
signature
!=
crypt
.
Signature
(
ctx
.
cfg
.
Token
,
timestamp
,
nonce
)
{
return
nil
,
ErrSign
return
nil
,
ErrSign
}
}
var
rawXMLMsgBytes
[]
byte
var
rawXMLMsgBytes
[]
byte
var
err
error
var
err
error
if
ctx
.
isSafeMode
{
if
ctx
.
isSafeMode
{
var
encryptedXMLMsg
message
.
EncryptedXMLMsg
var
encryptedXMLMsg
message
.
EncryptedXMLMsg
if
err
=
xml
.
NewDecoder
(
ctx
.
Request
.
Body
)
.
Decode
(
&
encryptedXMLMsg
);
err
!=
nil
{
if
err
=
xml
.
NewDecoder
(
ctx
.
Request
.
Body
)
.
Decode
(
&
encryptedXMLMsg
);
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
msgSignature
,
_
:=
ctx
.
Query
(
"msg_signature"
)
msgSignature
,
_
:=
ctx
.
Query
(
"msg_signature"
)
msgSignatureGen
:=
crypt
.
Signature
(
ctx
.
cfg
.
Token
,
timestamp
,
nonce
,
encryptedXMLMsg
.
EncryptedMsg
)
msgSignatureGen
:=
crypt
.
Signature
(
ctx
.
cfg
.
Token
,
timestamp
,
nonce
,
encryptedXMLMsg
.
EncryptedMsg
)
if
msgSignature
!=
msgSignatureGen
{
if
msgSignature
!=
msgSignatureGen
{
return
nil
,
ErrSign
return
nil
,
ErrSign
}
}
//解密
//解密
ctx
.
random
,
rawXMLMsgBytes
,
err
=
crypt
.
DecryptMsg
(
ctx
.
cfg
.
AppID
,
encryptedXMLMsg
.
EncryptedMsg
,
ctx
.
cfg
.
AESKey
)
ctx
.
random
,
rawXMLMsgBytes
,
err
=
crypt
.
DecryptMsg
(
ctx
.
cfg
.
AppID
,
encryptedXMLMsg
.
EncryptedMsg
,
ctx
.
cfg
.
AESKey
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
}
else
{
}
else
{
rawXMLMsgBytes
,
err
=
ioutil
.
ReadAll
(
ctx
.
Request
.
Body
)
rawXMLMsgBytes
,
err
=
ioutil
.
ReadAll
(
ctx
.
Request
.
Body
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
}
}
msg
:=
&
message
.
MixMessage
{}
msg
:=
&
message
.
MixMessage
{}
err
=
xml
.
Unmarshal
(
rawXMLMsgBytes
,
msg
)
err
=
xml
.
Unmarshal
(
rawXMLMsgBytes
,
msg
)
return
msg
,
err
return
msg
,
err
}
}
// GetQuery is like Query(), it returns the keyed url query value
// GetQuery is like Query(), it returns the keyed url query value
func
(
ctx
*
ctxImpl
)
Query
(
key
string
)
(
string
,
bool
)
{
func
(
ctx
*
ctxImpl
)
Query
(
key
string
)
(
string
,
bool
)
{
if
values
,
ok
:=
ctx
.
params
[
key
];
ok
&&
len
(
values
)
>
0
{
if
values
,
ok
:=
ctx
.
params
[
key
];
ok
&&
len
(
values
)
>
0
{
return
values
[
0
],
true
return
values
[
0
],
true
}
}
return
""
,
false
return
""
,
false
}
}
//Render render from bytes
//Render render from bytes
func
(
ctx
*
ctxImpl
)
Render
(
bytes
[]
byte
)
{
func
(
ctx
*
ctxImpl
)
Render
(
bytes
[]
byte
)
{
ctx
.
Writer
.
WriteHeader
(
200
)
ctx
.
Writer
.
WriteHeader
(
200
)
_
,
err
:=
ctx
.
Writer
.
Write
(
bytes
)
_
,
err
:=
ctx
.
Writer
.
Write
(
bytes
)
if
err
!=
nil
{
if
err
!=
nil
{
panic
(
err
)
panic
(
err
)
}
}
}
}
//String render from string
//String render from string
func
(
ctx
*
ctxImpl
)
RenderString
(
str
string
)
{
func
(
ctx
*
ctxImpl
)
RenderString
(
str
string
)
{
ctx
.
Writer
.
Header
()
.
Set
(
"Content-Type"
,
"text/plain; charset=utf-8"
)
ctx
.
Writer
.
Header
()
.
Set
(
"Content-Type"
,
"text/plain; charset=utf-8"
)
ctx
.
Render
([]
byte
(
str
))
ctx
.
Render
([]
byte
(
str
))
}
}
//XML render to xml
//XML render to xml
func
(
ctx
*
ctxImpl
)
RenderXML
(
obj
interface
{})
{
func
(
ctx
*
ctxImpl
)
RenderXML
(
obj
interface
{})
{
ctx
.
Writer
.
Header
()
.
Set
(
"Content-Type"
,
"application/xml; charset=utf-8"
)
ctx
.
Writer
.
Header
()
.
Set
(
"Content-Type"
,
"application/xml; charset=utf-8"
)
bytes
,
err
:=
xml
.
Marshal
(
obj
)
bytes
,
err
:=
xml
.
Marshal
(
obj
)
if
err
!=
nil
{
if
err
!=
nil
{
panic
(
err
)
panic
(
err
)
}
}
ctx
.
Render
(
bytes
)
ctx
.
Render
(
bytes
)
}
}
func
(
ctx
*
ctxImpl
)
RenderMessage
(
reply
message
.
Reply
)
{
func
(
ctx
*
ctxImpl
)
RenderMessage
(
reply
message
.
Reply
)
{
var
replyMsg
interface
{}
=
reply
var
replyMsg
interface
{}
=
reply
if
ctx
.
isSafeMode
{
if
ctx
.
isSafeMode
{
rawMsg
,
err
:=
xml
.
Marshal
(
replyMsg
)
rawMsg
,
err
:=
xml
.
Marshal
(
replyMsg
)
if
err
!=
nil
{
if
err
!=
nil
{
return
return
}
}
//安全模式下对消息进行加密
//安全模式下对消息进行加密
encryptedMsg
,
err
:=
crypt
.
EncryptMsg
(
ctx
.
random
,
rawMsg
,
ctx
.
cfg
.
AppID
,
ctx
.
cfg
.
AESKey
)
encryptedMsg
,
err
:=
crypt
.
EncryptMsg
(
ctx
.
random
,
rawMsg
,
ctx
.
cfg
.
AppID
,
ctx
.
cfg
.
AESKey
)
if
err
!=
nil
{
if
err
!=
nil
{
return
return
}
}
timestamp
:=
time
.
Now
()
.
Unix
()
timestamp
:=
time
.
Now
()
.
Unix
()
strts
:=
strconv
.
FormatInt
(
timestamp
,
64
)
strts
:=
strconv
.
FormatInt
(
timestamp
,
64
)
nonce
:=
crypt
.
RandomStr
(
16
)
nonce
:=
crypt
.
RandomStr
(
16
)
msgSignature
:=
crypt
.
Signature
(
ctx
.
cfg
.
Token
,
strts
,
nonce
,
string
(
encryptedMsg
))
msgSignature
:=
crypt
.
Signature
(
ctx
.
cfg
.
Token
,
strts
,
nonce
,
string
(
encryptedMsg
))
replyMsg
=
message
.
ResponseEncryptedXMLMsg
{
replyMsg
=
message
.
ResponseEncryptedXMLMsg
{
EncryptedMsg
:
string
(
encryptedMsg
),
EncryptedMsg
:
string
(
encryptedMsg
),
MsgSignature
:
msgSignature
,
MsgSignature
:
msgSignature
,
Timestamp
:
timestamp
,
Timestamp
:
timestamp
,
Nonce
:
nonce
,
Nonce
:
nonce
,
}
}
}
}
ctx
.
RenderXML
(
replyMsg
)
ctx
.
RenderXML
(
replyMsg
)
return
return
}
}
wechat/mch_pay.go
View file @
31d25dca
...
@@ -5,7 +5,7 @@ import (
...
@@ -5,7 +5,7 @@ import (
"encoding/xml"
"encoding/xml"
"io/ioutil"
"io/ioutil"
"gitlab-ce.k8s.tools.vchangyi.com/
cdp
/cy-sdk-go/wechat/crypt"
"gitlab-ce.k8s.tools.vchangyi.com/
base
/cy-sdk-go/wechat/crypt"
)
)
type
MchBaseRes
struct
{
type
MchBaseRes
struct
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment