wechat-vendor-sdk 0.4.0

wechat miniprogram and wechat corp sdk (微信小程序、公众号和企业微信部分 sdk 封装)
Documentation
use serde::{Deserialize, Serialize};
use serde_json::Value;

use crate::{wxmini_api_get, wxmini_api_post};

#[derive(Debug, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ActionScene {
    Str { scene_str: String },
    Id { scene_id: u32 },
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ActionInfo {
    pub scene: ActionScene,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct QrcodeCreateRequestBody {
    pub expire_seconds: Option<i32>,
    pub action_name: String,
    pub action_info: ActionInfo,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct QrcodeCreateResponseData {
    pub ticket: String,
    pub expire_seconds: Option<i32>,
    pub url: String,
}

wxmini_api_post!(
    /// [生成带参数的二维码](https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html)
    request_qrcode_create,
    "api.weixin.qq.com/cgi-bin/qrcode/create",
    (access_token: Option<&str>),
    &QrcodeCreateRequestBody,
    QrcodeCreateResponseData
);

#[derive(Debug, Serialize, Deserialize)]
pub struct MenuCreateRequestBody {
    pub button: Vec<Value>,
}
wxmini_api_post!(
    /// [自定义菜单-创建接口](https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html)
    request_menu_create,
    "api.weixin.qq.com/cgi-bin/menu/create",
    (access_token: Option<&str>),
    &MenuCreateRequestBody,
    Value
);

#[derive(Debug, Serialize, Deserialize)]
pub struct TagsCreateRequestItem {
    pub name: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TagsCreateRequestBody {
    pub tag: TagsCreateRequestItem,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct TagsCreateResponseItem {
    pub id: i32,
    pub name: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TagsCreateResponseData {
    pub tag: TagsCreateResponseItem,
}
wxmini_api_post!(
    /// [用户标签管理-创建标签](https://developers.weixin.qq.com/doc/offiaccount/User_Management/User_Tag_Management.html)
    request_tags_create,
    "api.weixin.qq.com/cgi-bin/tags/create",
    (access_token: Option<&str>),
    &TagsCreateRequestBody,
    TagsCreateResponseData
);

#[derive(Debug, Serialize, Deserialize)]
pub struct TagsGetResponseItem {
    pub id: i32,
    pub name: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct TagsGetResponseData {
    pub tags: Vec<TagsCreateResponseItem>,
}
wxmini_api_get!(
    /// [用户标签管理-获取公众号已创建的标签](https://developers.weixin.qq.com/doc/offiaccount/User_Management/User_Tag_Management.html)
    request_tags_get,
    "api.weixin.qq.com/cgi-bin/tags/get",
    (access_token: Option<&str>),
    TagsGetResponseData
);

#[derive(Debug, Serialize, Deserialize)]
pub struct TagsMembersBatchtaggingRequestBody {
    pub openid_list: Vec<String>,
    pub tagid: i32,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct TagsMembersBatchtaggingResponseData {}
wxmini_api_post!(
    /// [用户标签管理-批量为用户打标签](https://developers.weixin.qq.com/doc/offiaccount/User_Management/User_Tag_Management.html)
    request_tags_members_batchtagging,
    "api.weixin.qq.com/cgi-bin/tags/members/batchtagging",
    (access_token: Option<&str>),
    &TagsMembersBatchtaggingRequestBody,
    Value
);

#[derive(Debug, Serialize, Deserialize)]
pub struct UserGetResponseItemData {
    pub openid: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct UserGetResponseData {
    pub total: i32,
    pub count: i32,
    pub data: Option<UserGetResponseItemData>,
    pub next_openid: String,
}
wxmini_api_get!(
    /// [获取用户列表](https://developers.weixin.qq.com/doc/offiaccount/User_Management/Getting_a_User_List.html)
    request_user_get,
    "api.weixin.qq.com/cgi-bin/user/get",
    (access_token: Option<&str>, next_openid: Option<&str>),
    UserGetResponseData
);

#[derive(Debug, Serialize, Deserialize)]
pub struct GetTicketResponseData {
    pub ticket: String,
    pub expires_in: i32,
}
wxmini_api_get!(
    /// [jssdk签名](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62)
    request_getticket,
    "api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi",
    // TODO: 待使用 bon.rs 改造,支持每个接口 builder 形式传入下述参数,from_appid 是用于云托管资源复用场景区别以哪个调用方身份的
    (access_token: Option<&str>, from_appid: Option<&str>),
    GetTicketResponseData
);

#[derive(Debug, Serialize, Deserialize)]
pub struct MessageTemplateSendMiniprogramData {
    pub appid: String,
    pub pagepath: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct MessageTemplateSendRequestBody {
    pub touser: String,
    pub template_id: String,
    pub url: Option<String>,
    pub miniprogram: Option<MessageTemplateSendMiniprogramData>,
    pub data: Value,
    pub client_msg_id: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct MessageTemplateSendResponseData {}
wxmini_api_post!(
    /// [发送模板消息](https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html#%E5%8F%91%E9%80%81%E6%A8%A1%E6%9D%BF%E6%B6%88%E6%81%AF)
    request_message_template_send,
    "api.weixin.qq.com/cgi-bin/message/template/send",
    (access_token: Option<&str>),
    &MessageTemplateSendRequestBody,
    MessageTemplateSendResponseData
);

#[derive(Debug, Serialize, Deserialize)]
pub struct UserInfoBatchgetItem {
    pub openid: String,
    pub lang: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct UserInfoBatchgetRequestBody {
    pub user_list: Vec<UserInfoBatchgetItem>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct UserInfo {
    /// subscribe 为 0 时表示未关注,不会有下述字段
    pub subscribe: i32,
    pub openid: Option<String>,
    pub language: Option<String>,
    pub subscribe_time: Option<i64>,
    pub unionid: Option<String>,
    pub remark: Option<String>,
    pub groupid: Option<i32>,
    pub tagid_list: Vec<i32>,
    pub subscribe_scene: Option<String>,
    pub qr_scene: Option<i32>,
    pub qr_scene_str: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct UserInfoBatchgetResponseData {
    pub user_info_list: Vec<UserInfo>,
}
wxmini_api_post!(
    /// [批量获取用户基本信息](https://developers.weixin.qq.com/doc/offiaccount/User_Management/Get_users_basic_information_UnionID.html#UinonId)
    request_user_info_batchget,
    "api.weixin.qq.com/cgi-bin/user/info/batchget",
    (access_token: Option<&str>),
    &UserInfoBatchgetRequestBody,
    UserInfoBatchgetResponseData
);