weChatServer.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package server
  2. import (
  3. "encoding/json"
  4. "github.com/shopspring/decimal"
  5. "github.com/spf13/viper"
  6. "go_zh/pkg/http"
  7. "sync"
  8. )
  9. type WeChatServer struct {
  10. MchId string
  11. PrivateKey string
  12. CertFile string
  13. KeyFile string
  14. AppId string
  15. AppSecret string
  16. AppletId string
  17. AppletKey string
  18. }
  19. type AppletsOpenData struct {
  20. Errormsg string `json:"errmsg"`
  21. Errorcode int `json:"errcode"`
  22. Unionid string `json:"unionid"`
  23. SessionKey string `json:"session_key"`
  24. Openid string `json:"openid"`
  25. }
  26. var (
  27. weChatServerInstance *WeChatServer
  28. weChatServerOnce sync.Once
  29. )
  30. // GetWeChatServerInstance 获取单例实例
  31. func GetWeChatServerInstance() *WeChatServer {
  32. weChatServerOnce.Do(func() {
  33. weChatServerInstance = &WeChatServer{
  34. MchId: viper.GetString("weChat.mchId"),
  35. PrivateKey: viper.GetString("weChat.privateKey"),
  36. CertFile: viper.GetString("weChat.certFile"),
  37. KeyFile: viper.GetString("weChat.keyFile"),
  38. AppId: viper.GetString("weChat.appId"),
  39. AppSecret: viper.GetString("weChat.appSecret"),
  40. AppletId: viper.GetString("weChat.appletId"),
  41. AppletKey: viper.GetString("weChat.appletKey"),
  42. }
  43. })
  44. return weChatServerInstance
  45. }
  46. // GetAppletsOpenId 微信小程序获取登录openId
  47. func (wx *WeChatServer) GetAppletsOpenId(code string) (AppletsOpenData, error) {
  48. url := "https://api.weixin.qq.com/sns/jscode2session"
  49. //发起http get请求
  50. var appletsOpenRes AppletsOpenData
  51. requestData := http.RequestData{}
  52. err := requestData.ConstructRequest(url)
  53. if err != nil {
  54. return appletsOpenRes, err
  55. }
  56. requestData.SetData("grant_type", "authorization_code")
  57. requestData.SetData("appid", wx.AppletId)
  58. requestData.SetData("secret", wx.AppletKey)
  59. requestData.SetData("js_code", code)
  60. ret, err := requestData.GetRequest()
  61. _ = json.Unmarshal(ret, &appletsOpenRes)
  62. return appletsOpenRes, nil
  63. }
  64. func (wx *WeChatServer) WeChatJsPay(orderSn string, payMoney decimal.Decimal, notifyUrl string, boby string, wxOpenid string) {
  65. }