github.com/fastwego/offiaccount@v1.0.1/doc/api.md (about)

     1  ## API 使用
     2  
     3  微信公众号提供的接口多达近 300 个,但无非就是两大类:
     4  
     5  - GET 请求:拉取数据,例如数据统计、用户列表等
     6  - POST 请求:操作数据或配置,例如设置公众号菜单、用户管理、卡券管理等
     7  
     8  每个接口的需要的参数和返回的响应格式都不一样,如果过分关注细节,那么不得不定义种类繁杂的 `struct` 类型来表示这些参数或响应
     9  
    10  这会让开发者崩溃 ;(
    11  
    12  ### 统一参数抽象
    13  
    14  为了保持简洁和灵活性,框架将接口参数统一定义为:
    15  - `payload []byte` 用于 `POST` 类请求
    16  - `params url.Values` 用于 `GET` 类请求
    17  
    18  例如,设置菜单:
    19  ```go
    20  payload := []byte(`
    21  {
    22       "button":[
    23       {
    24             "name":"菜单",
    25             "sub_button":[
    26             {	
    27                 "type":"view",
    28                 "name":"搜索",
    29                 "url":"http://www.soso.com/"
    30              }]
    31         }]
    32  }`)
    33  resp, err := menu.Create(ctx, payload)
    34  ```
    35  
    36  获取用户信息:
    37  ```go
    38  params := url.Values{}
    39  params.Add("openid", "useropenid")
    40  params.Add("lang","zh_CN")
    41  
    42  resp, err := user.GetUserInfo(App, params)
    43  ```
    44  
    45  ### 统一响应抽象
    46  
    47  同样地,接口响应的 json 字符串都用 `resp []byte` 来表示
    48  
    49  开发者可以根据具体的业务来决定是否要解析 json 为 `struct` 类型
    50  
    51  
    52  ### 文件上传
    53  
    54  还有一类特殊的接口,需要上传文件,例如:素材管理、客服头像设置等
    55  
    56  这类接口,框架会提供额外的文件路径参数
    57  
    58  例如,上传图片素材:
    59  ```go
    60  media := "/path/to/image/file.jpg"
    61  
    62  resp, err := material.MediaUploadImg(ctx, media)
    63  ```
    64  
    65  ### API 列表
    66  
    67  {{#include ./apilist.md}}