代码拉取完成,页面将自动刷新
同步操作将从 jf/wechat-go 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package wx
import (
"crypto/sha1"
"encoding/xml"
"fmt"
"github.com/blusewang/wx/mp_api"
"github.com/youkale/go-querystruct/params"
"net/http"
"strings"
"time"
)
// 应用账号
// ServerHost 默认为:mp_api.ServerHostUniversal
type MpAccount struct {
AppId string `json:"app_id"`
AccessToken string `json:"access_token"`
AppSecret string `json:"app_secret"`
PrivateToken string `json:"private_token"`
EncodingAESKey string `json:"encoding_aes_key"`
JsSdkTicket string `json:"js_sdk_ticket"`
ServerHost mp_api.ServerHost `json:"server_host"`
}
// 读取通知消息
func (ma MpAccount) ReadMessage(req *http.Request) (msg mp_api.MessageData, err error) {
var q mp_api.MessageQuery
if err = params.Unmarshal(req.URL.Query(), &q); err != nil {
return
}
if q.EchoStr != "" {
return
}
if err = q.Validate(ma.PrivateToken); err != nil {
return
}
if err = xml.NewDecoder(req.Body).Decode(&msg); err != nil {
return
}
if msg.Encrypt != "" {
if err = msg.ShouldDecode(ma.EncodingAESKey); err != nil {
return
}
}
return
}
// 微信网页的网址签名
func (ma MpAccount) UrlSign(u string) (d map[string]interface{}) {
data := make(map[string]interface{})
data["noncestr"] = NewRandStr(32)
data["jsapi_ticket"] = ma.JsSdkTicket
data["timestamp"] = time.Now().Unix()
data["url"] = u
d = make(map[string]interface{})
d["appId"] = ma.AppId
d["timestamp"] = data["timestamp"]
d["nonceStr"] = data["noncestr"]
str := mapSortByKey(data)
raw := sha1.Sum([]byte(str))
d["signature"] = strings.ToUpper(fmt.Sprintf("%x", raw))
d["jsApiList"] = []string{}
return
}
// 新建一个请求
func (ma MpAccount) NewMpReq(path mp_api.MpApi) *mpReq {
return &mpReq{account: ma, path: path}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。