basic.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. package basic
  2. import (
  3. "fmt"
  4. openContext "github.com/silenceper/wechat/v2/openplatform/context"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. const (
  8. getAccountBasicInfoURL = "https://api.weixin.qq.com/cgi-bin/account/getaccountbasicinfo"
  9. checkNickNameURL = "https://api.weixin.qq.com/cgi-bin/wxverify/checkwxverifynickname"
  10. setNickNameURL = "https://api.weixin.qq.com/wxa/setnickname"
  11. setSignatureURL = "https://api.weixin.qq.com/cgi-bin/account/modifysignature"
  12. setHeadImageURL = "https://api.weixin.qq.com/cgi-bin/account/modifyheadimage"
  13. getSearchStatusURL = "https://api.weixin.qq.com/wxa/getwxasearchstatus"
  14. setSearchStatusURL = "https://api.weixin.qq.com/wxa/changewxasearchstatus"
  15. )
  16. // Basic 基础信息设置
  17. type Basic struct {
  18. *openContext.Context
  19. appID string
  20. }
  21. // NewBasic new
  22. func NewBasic(opContext *openContext.Context, appID string) *Basic {
  23. return &Basic{Context: opContext, appID: appID}
  24. }
  25. // AccountBasicInfo 基础信息
  26. type AccountBasicInfo struct {
  27. util.CommonError
  28. }
  29. // GetAccountBasicInfo 获取小程序基础信息
  30. //
  31. //reference:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/Mini_Program_Information_Settings.html
  32. func (basic *Basic) GetAccountBasicInfo() (*AccountBasicInfo, error) {
  33. ak, err := basic.GetAuthrAccessToken(basic.AppID)
  34. if err != nil {
  35. return nil, err
  36. }
  37. url := fmt.Sprintf("%s?access_token=%s", getAccountBasicInfoURL, ak)
  38. data, err := util.HTTPGet(url)
  39. if err != nil {
  40. return nil, err
  41. }
  42. result := &AccountBasicInfo{}
  43. if err := util.DecodeWithError(data, result, "account/getaccountbasicinfo"); err != nil {
  44. return nil, err
  45. }
  46. return result, nil
  47. }
  48. // modify_domain 设置服务器域名
  49. // TODO
  50. // func (encryptor *Basic) modifyDomain() {
  51. // }
  52. // CheckNickNameResp 小程序名称检测结果
  53. type CheckNickNameResp struct {
  54. util.CommonError
  55. HitCondition bool `json:"hit_condition"` // 是否命中关键字策略。若命中,可以选填关键字材料
  56. Wording string `json:"wording"` // 命中关键字的说明描述
  57. }
  58. // CheckNickName 检测微信认证的名称是否符合规则
  59. // ref: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/basic-info-management/checkNickName.html
  60. func (basic *Basic) CheckNickName(nickname string) (*CheckNickNameResp, error) {
  61. ak, err := basic.GetAuthrAccessToken(basic.AppID)
  62. if err != nil {
  63. return nil, err
  64. }
  65. url := fmt.Sprintf("%s?access_token=%s", checkNickNameURL, ak)
  66. data, err := util.PostJSON(url, map[string]string{
  67. "nick_name": nickname,
  68. })
  69. if err != nil {
  70. return nil, err
  71. }
  72. res := &CheckNickNameResp{}
  73. err = util.DecodeWithError(data, res, "CheckNickName")
  74. return res, err
  75. }
  76. // SetNickNameResp 设置小程序名称结果
  77. type SetNickNameResp struct {
  78. util.CommonError
  79. AuditID int64 `json:"audit_id"` // 审核单 Id,通过用于查询改名审核状态
  80. Wording string `json:"wording"` // 材料说明
  81. }
  82. // SetNickNameParam 设置小程序名称参数
  83. type SetNickNameParam struct {
  84. NickName string `json:"nick_name"` // 昵称,不支持包含“小程序”关键字的昵称
  85. IDCard string `json:"id_card,omitempty"` // 身份证照片 mediaid,个人号必填
  86. License string `json:"license,omitempty"` // 组织机构代码证或营业执照 mediaid,组织号必填
  87. NameingOtherStuff1 string `json:"naming_other_stuff_1,omitempty"` // 其他证明材料 mediaid,选填
  88. NameingOtherStuff2 string `json:"naming_other_stuff_2,omitempty"` // 其他证明材料 mediaid,选填
  89. NameingOtherStuff3 string `json:"naming_other_stuff_3,omitempty"` // 其他证明材料 mediaid,选填
  90. NameingOtherStuff4 string `json:"naming_other_stuff_4,omitempty"` // 其他证明材料 mediaid,选填
  91. NameingOtherStuff5 string `json:"naming_other_stuff_5,omitempty"` // 其他证明材料 mediaid,选填
  92. }
  93. // SetNickName 设置小程序名称
  94. func (basic *Basic) SetNickName(nickname string) (*SetNickNameResp, error) {
  95. return basic.SetNickNameFull(&SetNickNameParam{
  96. NickName: nickname,
  97. })
  98. }
  99. // SetNickNameFull 设置小程序名称
  100. // ref: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/basic-info-management/setNickName.html
  101. func (basic *Basic) SetNickNameFull(param *SetNickNameParam) (*SetNickNameResp, error) {
  102. ak, err := basic.GetAuthrAccessToken(basic.AppID)
  103. if err != nil {
  104. return nil, err
  105. }
  106. url := fmt.Sprintf("%s?access_token=%s", setNickNameURL, ak)
  107. data, err := util.PostJSON(url, param)
  108. if err != nil {
  109. return nil, err
  110. }
  111. res := &SetNickNameResp{}
  112. err = util.DecodeWithError(data, res, "SetNickName")
  113. return res, err
  114. }
  115. // SetSignatureResp 小程序功能介绍修改结果
  116. type SetSignatureResp struct {
  117. util.CommonError
  118. }
  119. // SetSignature 小程序修改功能介绍
  120. // ref: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/basic-info-management/setSignature.html
  121. func (basic *Basic) SetSignature(signature string) error {
  122. ak, err := basic.GetAuthrAccessToken(basic.AppID)
  123. if err != nil {
  124. return err
  125. }
  126. url := fmt.Sprintf("%s?access_token=%s", setSignatureURL, ak)
  127. data, err := util.PostJSON(url, map[string]string{
  128. "signature": signature,
  129. })
  130. if err != nil {
  131. return err
  132. }
  133. return util.DecodeWithError(data, &SetSignatureResp{}, "SetSignature")
  134. }
  135. // GetSearchStatusResp 查询小程序当前是否可被搜索
  136. type GetSearchStatusResp struct {
  137. util.CommonError
  138. Status int `json:"status"` // 1 表示不可搜索,0 表示可搜索
  139. }
  140. // GetSearchStatus 查询小程序当前是否可被搜索
  141. // ref: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/basic-info-management/getSearchStatus.html
  142. func (basic *Basic) GetSearchStatus(signature string) (*GetSearchStatusResp, error) {
  143. ak, err := basic.GetAuthrAccessToken(basic.AppID)
  144. if err != nil {
  145. return nil, err
  146. }
  147. url := fmt.Sprintf("%s?access_token=%s", getSearchStatusURL, ak)
  148. data, err := util.HTTPGet(url)
  149. if err != nil {
  150. return nil, err
  151. }
  152. res := &GetSearchStatusResp{}
  153. err = util.DecodeWithError(data, res, "GetSearchStatus")
  154. return res, err
  155. }
  156. // SetSearchStatusResp 小程序是否可被搜索修改结果
  157. type SetSearchStatusResp struct {
  158. util.CommonError
  159. }
  160. // SetSearchStatus 修改小程序是否可被搜索
  161. // status: 1 表示不可搜索,0 表示可搜索
  162. // ref: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/basic-info-management/setSearchStatus.html
  163. func (basic *Basic) SetSearchStatus(status int) error {
  164. ak, err := basic.GetAuthrAccessToken(basic.AppID)
  165. if err != nil {
  166. return err
  167. }
  168. url := fmt.Sprintf("%s?access_token=%s", setSearchStatusURL, ak)
  169. data, err := util.PostJSON(url, map[string]int{
  170. "status": status,
  171. })
  172. if err != nil {
  173. return err
  174. }
  175. return util.DecodeWithError(data, &SetSearchStatusResp{}, "SetSearchStatus")
  176. }
  177. // SetHeadImageResp 小程序头像修改结果
  178. type SetHeadImageResp struct {
  179. util.CommonError
  180. }
  181. // SetHeadImageParam 小程序头像修改参数
  182. type SetHeadImageParam struct {
  183. HeadImageMediaID string `json:"head_img_media_id"` // 头像素材 media_id
  184. X1 string `json:"x1"` // 裁剪框左上角 x 坐标(取值范围:[0, 1])
  185. Y1 string `json:"y1"` // 裁剪框左上角 y 坐标(取值范围:[0, 1])
  186. X2 string `json:"x2"` // 裁剪框右下角 x 坐标(取值范围:[0, 1])
  187. Y2 string `json:"y2"` // 裁剪框右下角 y 坐标(取值范围:[0, 1])
  188. }
  189. // SetHeadImage 修改小程序头像
  190. func (basic *Basic) SetHeadImage(imgMediaID string) error {
  191. return basic.SetHeadImageFull(&SetHeadImageParam{
  192. HeadImageMediaID: imgMediaID,
  193. X1: "0",
  194. Y1: "0",
  195. X2: "1",
  196. Y2: "1",
  197. })
  198. }
  199. // SetHeadImageFull 修改小程序头像
  200. // 新增临时素材:https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/New_temporary_materials.html
  201. // ref: https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/miniprogram-management/basic-info-management/setHeadImage.html
  202. func (basic *Basic) SetHeadImageFull(param *SetHeadImageParam) error {
  203. ak, err := basic.GetAuthrAccessToken(basic.AppID)
  204. if err != nil {
  205. return err
  206. }
  207. url := fmt.Sprintf("%s?access_token=%s", setHeadImageURL, ak)
  208. data, err := util.PostJSON(url, param)
  209. if err != nil {
  210. return err
  211. }
  212. return util.DecodeWithError(data, &SetHeadImageResp{}, "account/setheadimage")
  213. }