1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
use super::post_send;
use crate::{wechat::WxApiRequestBuilder, SdkResult};
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct Generate {
/// 跳转到的目标小程序信息。
#[serde(default)]
pub jump_wxa: Option<JumpWxa>,
/// 生成的 scheme 码类型,到期失效:true,永久有效:false。 <br/>
/// 注意,永久有效 scheme 和有效时间超过31天的到期失效 scheme 的总数上限为10万个,
/// 详见获取 URL scheme,生成 scheme 码前请仔细确认。 <br/>
/// 默认值:`false`
#[serde(default)]
pub is_expire: Option<bool>,
/// 到期失效的 scheme 码失效类型,失效时间:0,失效间隔天数:1 <br/>
/// 默认值:`0`
#[serde(default)]
pub expire_type: Option<i32>,
/// 到期失效的 scheme 码的失效时间,为 Unix 时间戳。生成的到期失效 scheme 码在该时间前有效。 <br/>
/// 最长有效期为1年。is_expire 为 true 且 expire_type 为 0 时必填
#[serde(default)]
pub expire_time: Option<i64>,
/// 到期失效的 scheme 码的失效间隔天数。生成的到期失效 scheme 码在该间隔时间到达前有效。 <br/>
/// 最长间隔天数为365天。is_expire 为 true 且 expire_type 为 1 时必填
#[serde(default)]
pub expire_interval: Option<i64>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct JumpWxa {
/// 通过 scheme 码进入的小程序页面路径,必须是已经发布的小程序存在的页面,不可携带 query。
/// path 为空时会跳转小程序主页。
#[serde(default)]
pub path: Option<String>,
/// 通过 scheme 码进入小程序时的 query,最大1024个字符,
/// 只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~%
#[serde(default)]
pub query: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Openlink {
openlink: String,
}
pub struct UrlSchemeModule<'a, T: WxApiRequestBuilder>(pub(crate) &'a T);
impl<'a, T: WxApiRequestBuilder> UrlSchemeModule<'a, T> {
/// 获取小程序 scheme 码,适用于短信、邮件、外部网页、微信内等拉起小程序的业务场景。
/// 通过该接口,可以选择生成到期失效和永久有效的小程序码,有数量限制,
/// 目前仅针对国内非个人主体的小程序开放,详见获取 URL scheme。
pub async fn generate(&self, data: &Generate) -> SdkResult<Openlink> {
let url = "https://api.weixin.qq.com/wxa/generatescheme";
post_send(self.0, url, data).await
}
}