添加腾讯支持
This commit is contained in:
63
platformapi/wxpay/callback.go
Normal file
63
platformapi/wxpay/callback.go
Normal file
@@ -0,0 +1,63 @@
|
||||
package wxpay
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
)
|
||||
|
||||
type CDData string
|
||||
|
||||
func (c CDData) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
||||
return e.EncodeElement(struct {
|
||||
string `xml:",cdata"`
|
||||
}{string(c)}, start)
|
||||
}
|
||||
|
||||
type CallbackResponse struct {
|
||||
XMLName xml.Name `json:"-" xml:"xml"`
|
||||
|
||||
ReturnCode string `json:"return_code" xml:"return_code"`
|
||||
ReturnMsg CDData `json:"return_msg" xml:"return_msg"`
|
||||
}
|
||||
|
||||
var (
|
||||
SuccessResponse = &CallbackResponse{
|
||||
ReturnCode: ResponseCodeSuccess,
|
||||
ReturnMsg: "OK",
|
||||
}
|
||||
)
|
||||
|
||||
func Err2CallbackResponse(err error, data string) *CallbackResponse {
|
||||
if err == nil {
|
||||
return SuccessResponse
|
||||
}
|
||||
returnMsg := err.Error()
|
||||
if data != "" {
|
||||
returnMsg = fmt.Sprintf("%s,%s", returnMsg, data)
|
||||
}
|
||||
return &CallbackResponse{
|
||||
ReturnCode: ResponseCodeFail,
|
||||
ReturnMsg: CDData(returnMsg),
|
||||
}
|
||||
}
|
||||
|
||||
func (a *API) GetCallbackMsg(request *http.Request) (msg map[string]interface{}, callbackResponse *CallbackResponse) {
|
||||
data, err := ioutil.ReadAll(request.Body)
|
||||
if err != nil {
|
||||
return nil, Err2CallbackResponse(err, "")
|
||||
}
|
||||
msg, _, err = a.checkResultAsMap(string(data))
|
||||
if err != nil {
|
||||
return nil, Err2CallbackResponse(err, "")
|
||||
}
|
||||
sign := utils.Interface2String(msg[sigKey])
|
||||
desiredSign := a.signParam(msg)
|
||||
if desiredSign != sign {
|
||||
return nil, Err2CallbackResponse(fmt.Errorf("desiredSign:%s <> sign:%s", desiredSign, sign), "")
|
||||
}
|
||||
return msg, nil
|
||||
}
|
||||
Reference in New Issue
Block a user