云服务器内容精选

  • 消息通知服务支持的传输协议有哪些? 消息通知服务支持的协议有“邮件”、“短信”、“HTTP”和“HTTPS”、“FunctionGraph(函数)”、“FunctionGraph(工作流)”等。 “邮件”:消息以电子邮件形式发送到订阅的邮箱地址。 “短信”:消息以短信文本消息发送到订阅的电话号码。 “HTTP”、“HTTPS”: 消息以HTTP/HTTPS请求的形式发送到订阅的URL,目前只支持公网域名或者公网IP地址。 “FunctionGraph(函数)”:使用已发布的消息的负载调用订阅的FunctionGraph(函数)终端。 “FunctionGraph(工作流)”:使用已发布的消息触发执行订阅的FunctionGraph(工作流)终端。 语音通知:将消息转化为语音,通知到订阅的电话号码。消息内容只支持云服务推送,不支持用户直接发送语音消息。 语音只支持中国大陆部分地区拨打,具体支持地区请参考语音通话服务区域限制。 钉钉群消息:将消息通过钉钉机器人发送到钉钉群。 企业微信群消息:将消息通过企业微信群机器人发送到企业微信群。 飞书群消息:将消息通过飞书机器人发送到飞书群。 其中,“语音通知”、“钉钉群消息”、“企业微信群消息”、“飞书群消息”当前是公测功能,如果需要使用请提交工单申请开通公测。 开通公测后,会导致用户当前token失效,需要重新登录才能继续使用(使用API调用时,需要重新获取token)。 企业微信群消息,钉钉群消息,飞书群消息有发送条数限制和接收方系统故障情况,可能会导致消息发送失败。 当出现上述原因时,SMN不保证消息成功送达。
  • 取消订阅 不同的订阅协议对应不同的取消订阅方式: 短信取消订阅:因为短信长度有限,无法每次推送消息时候附带取消订阅的链接,用户需通过请求确认的链接进入WEB页面进行取消订阅。 具体流程如下: 添加订阅后,消息通知服务会向订阅终端发送订阅确认短信,如图1所示,短信中包含订阅确认的链接。 图1 订阅确认短信 单击短信中的确认链接 ,进入WEB页面提示“订阅成功”。该页面下方有提示信息:如果您不希望订阅这个主题,点击“这里”取消订阅。 图2 订阅成功 单击“这里”,进入取消订阅页面,确认待取消订阅的相关信息,包含主题名称、主题URN、订阅URN。 图3 确认取消订阅 确认无误后,单击“确定”,取消订阅成功。 图4 取消订阅成功 邮件取消订阅:消息通知服务向指定邮箱地址发送电子邮件消息,其中包含取消订阅的链接,订阅者单击进入取消订阅的页面。如果取消成功,页面会显示取消订阅成功,稍后消息通知服务会向这个订阅者发送一封确认取消订阅的邮件(48小时内有效)。如果误操作了取消订阅,可以通过该消息重新订阅。 具体流程如下: 添加订阅后,消息通知服务会向指定邮箱地址发送电子邮件消息,如图5所示,邮件中包含订阅确认的链接。 图5 订阅确认邮件 单击邮件中的“订阅确认”链接 ,进入WEB页面提示“订阅成功”。该页面下方有提示信息:如果您不希望订阅这个主题,点击“这里”取消订阅。 图6 订阅成功 单击“这里”,进入取消订阅页面,确认待取消订阅的相关信息,包含主题名称、主题URN、订阅URN。 图7 确认取消订阅 确认无误后,单击“确定”,取消订阅成功。 图8 取消订阅成功 HTTP(S)取消订阅,消息通知服务向指定的URL发送消息。消息体中包含取消订阅的链接,订阅者需要访问该链接,如果取消订阅成功,将获取HTTPS协议的200返回码,稍后消息通知服务会向这个订阅者发送一次取消订阅的消息(48小时内有效)。如果误操作了取消订阅,可以通过访问重新订阅的链接重新订阅。HTTP(S)消息头和消息体参数含义请参见HTTP(S)终端节点使用样例简介。
  • 操作场景 消息通知服务能够根据用户的需求,向订阅终端主动推送消息。消息通知服务支持发布模板消息,该功能用于以下场景: 在用户发送的通知消息中,大部分内容是固定的,只有少数内容随着每次事件指标变化而变化。在这种场景下,用户可以通过创建一个消息模板,用模板变量代替变化的内容。这样在每次发布消息通知时,选择消息模板并设置模板变量便可完成特定的消息通知。 本章节以创建主题并发布模板消息为例,指导您快速上手消息通知服务。 在本示例中,某公司定期举行展览会,需要邀请相关人员,邀请通知消息中消息内容不变,仅需更改展览会的举办时间。 创建一个主题“Mytopic”。 为主题“Mytopic”添加协议类型为“短信”和“邮件”的订阅。 向订阅者发布消息“The Arts and Crafts Exposition will be held from {startdate} through {enddate}. We sincerely invite you to join us. ” 其中,“{startdate} ”表示展览会的开始时间,“{enddate}”表示展览会的结束时间。
  • 操作场景 消息通知服务能够根据用户的需求,向订阅终端主动推送消息。消息通知服务支持发布JSON消息,可通过一次消息发布,向不同类型的订阅者发布不同内容的消息。 本章节以创建主题并发布JSON消息为例,指导您快速上手消息通知服务。 在本示例中, 创建一个主题“Mytopic”。 为主题“Mytopic”添加协议类型为“短信”和“邮件”的订阅。 向“短信”类型的订阅者发布消息“Dear Sir or Madam, this is an SMS message.”。 向“邮件”类型的订阅者发布消息“Dear Sir or Madam, this is an Email message.”
  • 查看访问日志 当您配置了消息传输日志,可以查看消息传输日志的详细信息。 日志显示格式如下: {"message_id":"$message_id","project_id":"$project_id","topic_urn":"$topic_urn","subscriber_urn":"$subscriber_urn","protocol_name":"$protocol_name","endpoint":"$endpoint","status":"$status","http_code":$http_code,"create_time":"$create_time","send_time":"$send_time"} 不支持修改日志格式。日志字段说明如表1所示。 表1 字段说明 参数 参数类型 描述 message_id String 消息ID。 project_id String 项目ID。 topic_urn String Topic的唯一的资源标识 subscriber_urn String 订阅者的唯一资源标识。 protocol_name String 不同协议对应不同的endpoint(接受消息的接入点)。目前支持的协议包括: “email”:邮件传输协议,endpoint为邮箱地址。 “sms”:短信传输协议,endpoint为手机号码。 “functiongraph” FunctionGraph(函数)传输协议,endpoint为一个函数 “functionstage”:。FunctionStage(工作流)传输协议,endpoint为一个函数工作流 “http”、“https”:HTTP/HTTPS传输协议,endpoint为URL。 endpoint String 接受消息的接入点。 status String 消息状态。目前包括以下状态: “DELIVERED”:已送达。 “FAIL_DELIVERED”:发送失败。 “REJECTS”:已拒绝。触发流控机制。 http_code Integer HTTP返回码,仅支持HTTP/HTTPS协议消息。 create_time String 消息创建时间。时间格式为UTC时间,YYYY-MM-DDTHH:MM:SSZ。 send_time String 消息发送时间。时间格式为UTC时间,YYYY-MM-DDTHH:MM:SSZ。
  • 日志示例 {"message_id":"1ae49922602a42fc83acb9689a2eb5f4","project_id":"5a9f32e4f1ec4bbe9695ff9da51c2925","topic_urn":"urn:smn:regionid:5a9f32e4f1ec4bbe9695ff9da51c2925:demo","subscriber_urn":"urn:smn:regionid:5a9f32e4f1ec4bbe9695ff9da51c2925:demo:b55c3c6fa7cd471b9f24818d530a8740","protocol_name":"https","endpoint":"https://127.0.0.1:443/https","status":"DELIVERED","http_code":200,"create_time":"2022-11-01T00:00:00Z","send_time":"2022-11-01T00:00:10Z"} 以上日志示例对应的字段如下: 表2 日志示例对应的字段 参数 示例 message_id 1ae49922602a42fc83acb9689a2eb5f4 project_id 5a9f32e4f1ec4bbe9695ff9da51c2925 topic_urn urn:smn:regionid:5a9f32e4f1ec4bbe9695ff9da51c2925:demo subscriber_urn urn:smn:regionid:5a9f32e4f1ec4bbe9695ff9da51c2925:demo:b55c3c6fa7cd471b9f24818d530a8740 protocol_name https endpoint https://127.0.0.1:443/https status DELIVERED http_code 200 create_time 2022-11-01T00:00:00Z send_time 2022-11-01T00:00:10Z
  • 操作场景 SMN的终端节点订阅主题且确认订阅后,终端节点才能够接收到向该主题发布的所有消息。当用户在多个区域均需要创建同样的订阅时,终端节点会多次收到确认订阅信息,且需要在每一条订阅消息内确认订阅。为防止这种场景下对终端节点的消息干扰,建议使用订阅用户功能,一次创建用户后即可导入其他区域的订阅。 订阅用户是提供跨区域统一管理订阅者信息的功能。订阅者可以先创建多个订阅用户,当主题需要添加订阅时,再将订阅用户批量添加到该主题上。 当前订阅用户数据仅支持存储在国内,且仅支持国内站点查询订阅用户数据。 当订阅者需要创建订阅用户时,可参考本章节。
  • 操作场景 消息模板指消息的固定格式。如果您要发布的消息内容丰富,并且这条消息需要多次发布,每次发布时需要变更的内容极少,此时您可以套用已创建的消息模板向订阅者发送消息。 在相同的消息模板名称下面,可创建一个或多个不同协议类型的消息模板来适配不同协议的订阅者,但必须包含一个Default协议类型的模板。不同协议类型的消息模板可以设置不同的模板内容,使用{tag}占位符代替变量。如果没有预置的Default协议的模板,将不允许发送该模板。 使用模板格式发送消息时,需要选择模板名称,名称选定后,系统会按照Default、SMS、Email、HTTP、HTTPS、FunctionGraph(函数)、FunctionGraph(工作流)的协议顺序,将该模板名称下不同协议的所有模板内容中的{tag}标签列出,重复的{tag}只列出一次,并在右侧显示拥有该{tag}的协议名称。设置{tag}值之后,消息通知服务会自动替换模板的{tag}标签为对应的参数值。如果{tag}没有设置参数值,模板内容不做替换。消息通知服务会按照模板名称和订阅者协议类型获取模板内容,如果对应订阅协议的模板内容不存在,将使用Default模板内容发送。 在这一部分中,您可以按照模板格式进行消息推送至您设定的订阅终端地址。在发送模板消息之前,您需要先创建好消息模板,关于消息模板的详细信息请参见《消息通知服务用户指南》的“消息模板管理”章节。
  • 操作场景 消息模板指消息的固定格式,发布消息时可以使用已创建的消息模板向订阅者发送消息。使用模板发送消息,发送时会自动替换模板变量为对应的参数值。 消息模板通过消息名称进行分组,消息名称下面可以根据不同的协议创建不同的模板。每个模板名称下面都必须要创建一个Default模板。当按照模板格式推送消息时,不同协议订阅者优先会选择模板名称下面对应的协议模板,如果对应的协议模板不存在,则采用默认Default的模板。如果没有预置的Default协议的模板,将不允许发送该模板。 当您需要发送模板格式的消息时,可参考本章节管理消息模板。
  • 计费项 华为云消息通知服务对消息通知费用、外网下行流量计费,具体的计费详情请参见价格详情。 表1 计费项说明 计费项 计费说明 消息通知 SMS:统计每月每个区域每个主题的发送条数,按数量收费。短信条数计算规则请参考《消息&短信服务产品介绍》中“内容长度计算规则”章节。 说明: 全球短信:发送即计费,即SMN侧调用供应商接口成功则计费。 中国大陆短信:短信发送成功才计费。 电子邮件:统计每月每个区域每个主题的发送邮件数,按数量收费。 HTTP(S):统计每月每个区域每个主题的发送请求数量,每月100万次为单位计费。 FunctionGraph:发送到FunctionGraph免费。 发送请求订阅消息也会作为发送条数进行计费。 外网下行流量 仅在您有数据传输到Internet时收取,每月前1GB流量免费,之后按照华为云标准流量费用每GB收取。 所有的用量统计按照自然月计算。
  • 修订记录 版本日期 变更说明 2024-04-17 第二十二次正式发布。 新增“订阅用户管理”章节。 2023-06-30 第二十一次正式发布。 新增“监控”章节。 2023-01-31 第二十次正式发布。 新增“消息传输日志”章节。 2022-03-30 第十九次正式发布。 下线: 应用订阅协议。 DMS订阅协议。 2020-09-30 第十八次正式发布。 本次变更说明如下: 整体优化文档。 2020-01-20 第十七次正式发布。 变更说明: “权限管理”章节删除IAM相关概念及操作内容,修改为链接至IAM手册。 2019-07-05 第十六次正式发布。 变更说明: 新增“权限管理”章节。 2019-03-30 第十五次正式发布。 变更说明: 修改标签键的校验规则。 2018-11-30 第十四次正式发布。 变更说明: 新增“移动推送管理”章节 新增应用协议 2018-07-18 第十三次正式发布。 变更说明: 新增常见问题“短信发送失败,如何查看发送失败原因?” 更新截图 2018-07-02 第十二次正式发布。 变更说明: 将FunctionGraph协议修改为 FunctionGraph(工作流)协议 将FunctionStage协议修改为FunctionGraph(函数)协议 新增设置主题标签 更新部分截图 2018-04-30 第十一次正式发布。 修改: 海外短信支持的国家和地区 短信签名、短信模板和发送短信章节截图刷新 修改“记录消息通知服务”章节 2018-01-30 第十次正式发布。 修改: 主题别名修改为显示名。 全文截图刷新 新增: 短信模板 发送推广类短信 短信回调事件字段说明 短信发送限制 2017-10-30 第九次正式发布。 新增: FunctionGraph订阅协议。 DMS订阅协议。 发送短信功能。 短信配置事件功能。 2017-8-18 第八次正式发布。 修改: 所有页面截图。 新增: FunctionStage订阅协议。 2017-06-30 第七次正式发布。 新增: 创建短信签名。 2017-05-30 第六次正式发布。 新增: 删除创建主题页面的发布消息按钮。 输入主题别名不允许换行。 2017-3-13 第五次发布。 新增: 修改主题简介。 2016-11-30 第四次发布。 新增: 高级策略配置。 2016-10-29 第三次正式发布。 新增: 对接云审计服务记录资源操作。 2016-09-30 第二次正式发布。 新增: 修改主题策略。 2016-08-25 第一次正式发布。
  • 日志记录条目 云审计中每个日志条目都由一个JSON格式的事件组成。一个日志条目表示一条SMN接口请求,内容主要包括所请求的操作、操作的时间和日期、所操作的参数以及生成该请求的用户信息,其中用户信息来自统一身份认证服务。 以下示例显示了CreateTopic、DeleteTopic和UpdateTopic操作的CloudTrace记录条目。 { "time": "2017-02-15 14:21:50 GMT+08:00", "user": "xxx", "request": "xxx", "response": "xxx", "code": 200, "service_type": "SMN", "resource_type": "topic", "resource_id": "topicUrn instance", "source_ip": "127.0.0.1", "trace_name": "createTopic", "trace_rating": "normal", "trace_type": "ApiCall", "api_version": "2.0", "project_id": "tenantId instance", "record_time": "2017-02-15 14:21:50 GMT+08:00", "trace_id": "xxx" } { "time": "2017-02-15 14:12:15 GMT+08:00", "user": "xxx", "response": "xxx", "code": 200, "service_type": "SMN", "resource_type": "topic", "resource_id": "topicUrn instance", "source_ip": "127.0.0.1", "trace_name": "deleteTopic", "trace_rating": "normal", "trace_type": "ApiCall", "api_version": "2.0", "project_id": "tenantId instance", "record_time": "2017-02-15 14:12:15 GMT+08:00", "trace_id": "xxx" } { "time": "2017-02-13 15:38:30 GMT+08:00", "user": "xxx", "request": "xxx", "response": "xxx", "code": 200, "service_type": "SMN", "resource_type": "topic", "resource_id": "topicUrn instance", "source_ip": "127.0.0.1", "trace_name": "updateTopic", "trace_rating": "normal", "trace_type": "ApiCall", "api_version": "2.0", "project_id": "tenantId instance", "record_time": "2017-02-13 15:38:30 GMT+08:00", "trace_id": "xxx" }
  • Go语言 package demo import ( "bytes" "crypto" "crypto/rsa" "crypto/x509" "encoding/base64" "encoding/json" "encoding/pem" "fmt" "io/ioutil" ) type Message struct { Signature string `json:"signature"` Subject *string `json:"subject"` TopicUrn string `json:"topic_urn"` MessageId string `json:"message_id"` SignatureVersion string `json:"signature_version"` Type string `json:"type"` Message string `json:"message"` SubscribeUrl string `json:"subscribe_url"` UnsubscribeUrl string `json:"unsubscribe_url"` SigningCertUrl string `json:"signing_cert_url"` Timestamp string `json:"timestamp"` } func VerifyMessage(pemFile string, message string) bool { msg := Message{} err := json.Unmarshal([]byte(message), &msg) if err != nil { fmt.Println("Convert json to struct failed") return false } pemContent, err := ioutil.ReadFile(pemFile) if err != nil { fmt.Println("Read pem file failed") return false } certDerblock, _ := pem.Decode(pemContent) if certDerblock == nil { fmt.Println("Decode pem file failed") return false } cert, err := x509.ParseCertificate(certDerblock.Bytes) if err != nil { fmt.Println("Parse cert failed") return false } msgString := buildMessage(&msg) msgHash := crypto.SHA256.New() msgHash.Write([]byte(msgString)) msgHashSum := msgHash.Sum(nil) decodeSign, _ := base64.StdEncoding.DecodeString(msg.Signature) publicKey := cert.PublicKey.(*rsa.PublicKey) err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, msgHashSum, decodeSign) if err != nil { fmt.Println("Verify failed") return false } else { fmt.Println("Verify success") return true } } func buildMessage(msg *Message) string { if msg.Type == "Notification" { return buildNotificationMessage(msg) } else if msg.Type == "SubscriptionConfirmation" || msg.Type == "UnsubscribeConfirmation" { return buildSubscriptionMessage(msg) } return "" } func buildNotificationMessage(msg *Message) string { buf := bytes.Buffer{} buf.WriteString("message\n" + msg.Message + "\n") buf.WriteString("message_id\n" + msg.MessageId + "\n") // msg中存在Subject字段不存在的场景,需要特殊处理 if msg.Subject != nil { buf.WriteString("subject\n" + *msg.Subject + "\n") } buf.WriteString("timestamp\n" + msg.Timestamp + "\n") buf.WriteString("topic_urn\n" + msg.TopicUrn + "\n") buf.WriteString("type\n" + msg.Type + "\n") return buf.String() } func buildSubscriptionMessage(msg *Message) string { buf := bytes.Buffer{} buf.WriteString("message\n" + msg.Message + "\n") buf.WriteString("message_id\n" + msg.MessageId + "\n") buf.WriteString("subscribe_url\n" + msg.SubscribeUrl + "\n") buf.WriteString("timestamp\n" + msg.Timestamp + "\n") buf.WriteString("topic_urn\n" + msg.TopicUrn + "\n") buf.WriteString("type\n" + msg.Type + "\n") return buf.String() } 该示例代码已在go 1.15版本上测试通过。
  • 支持审计的关键操作列表 在您的账户中启用云审计服务后,当SMN服务的API被调用时,日志文件将跟踪记录该操作,并依据时间和数据的变化将日志文件转储到对象存储桶。 如果您在没有登录的情况下调用SMN的取消订阅(Unsubscribe)操作,云审计则不会记录这些操作。例如,当您需要取消订阅时,在电子邮件通知中单击取消订阅的链接,此时会在未登录的情况下调用Unsubscribe,这种情况下您的取消订阅操作则不会被云审计记录。 云审计支持的消息通知服务操作列表如表1所示。 表1 云审计支持的SMN操作列表 操作名称 资源类型 事件名称 创建主题 topic createTopic 删除主题 topic deleteTopic 更新主题 topic updateTopic 更新主题策略 topic updateTopicAttribute 删除所有主题策略 topic deleteTopicAttributes 删除指定名称的主题策略 topic deleteTopicAttributeByName 添加订阅 subscription subscribe 删除订阅 subscription delsubscribe 创建消息模板 message_template createMessageTemplate 批量创建消息模板 message_template batchCreateMessageTemplate 更新消息模板 message_template updateMessageTemplate 删除消息模板 message_template deleteMessageTemplate 创建短信签名 sms createSmsSign 删除短信签名 sms deleteSmsSign 更新短信回调事件 sms updateSmsEvent 父主题: 记录消息通知服务
  • 国家(或地区)码 国家(或地区) 中文名 国家(或地区)码 Afghanistan 阿富汗 93 Albania 阿尔巴尼亚 355 Algeria 阿尔及利亚 213 American Samoa 美属萨摩亚 1684 Andorra 安道尔 376 Angola 安哥拉 244 Anguilla 安圭拉 1264 Antigua and Barbuda 安提瓜和巴布达 1268 Argentina 阿根廷 54 Armenia 亚美尼亚 374 Aruba 阿鲁巴 297 Australia 澳大利亚 61 Austria 奥地利 43 Azerbaijan 阿塞拜疆 994 Bahamas 巴哈马 1242 Bahrain 巴林 973 Bangladesh 孟加拉国 880 Barbados 巴巴多斯 1246 Belarus 白俄罗斯 375 Belgium 比利时 32 Belize 伯利兹 501 Benin 贝宁 229 Bermuda 百慕大群岛 1441 Bhutan 不丹 975 Bolivia 玻利维亚 591 Bosnia and Herzegovina 波斯尼亚和黑塞哥维那 387 Botswana 博茨瓦纳 267 Brazil 巴西 55 British Indian Ocean Territory 英属印度洋领地 246 Brunei 文莱 673 Bulgaria 保加利亚 359 Burkina Faso 布基纳法索 226 Burundi 布隆迪 257 Cambodia 柬埔寨 855 Cameroon 喀麦隆 237 Canada 加拿大 1 Cape Verde 佛得角 238 Cayman Islands 开曼群岛 1345 Central African Republic 中非共和国 236 Chad 乍得 235 Chile 智利 56 Colombia 哥伦比亚 57 Comoros 科摩罗 269 Republic Of the Congo 刚果共和国 242 Democratic Republic of the Congo 刚果民主共和国 243 Cook Islands 库克群岛 682 Costa Rica 哥斯达黎加 506 Croatia 克罗地亚 385 Curacao 库拉索 599 Cyprus 塞浦路斯 357 Czechia 捷克 420 Denmark 丹麦 45 Djibouti 吉布提 253 Dominica 多米尼克 1767 Dominican Republic 多米尼加共和国 1809 Ecuador 厄瓜多尔 593 Egypt 埃及 20 El Salvador 萨尔瓦多 503 Equatorial Guinea 赤道几内亚 240 Eritrea 厄立特里亚 291 Estonia 爱沙尼亚 372 Eswatini 史瓦帝尼王国 268 Ethiopia 埃塞俄比亚 251 Falkland Islands 福克兰群岛 500 Faroe Islands 法罗群岛 298 Fiji 斐济 679 Finland 芬兰 358 France 法国 33 French Guiana 法属圭亚那 594 French Polynesia 法属波利尼西亚 689 Gabon 加蓬 241 Gambia 冈比亚 220 Georgia 格鲁吉亚 995 Germany 德国 49 Ghana 加纳 233 Gibraltar 直布罗陀 350 Greece 希腊 30 Greenland 格陵兰岛 299 Grenada 格林纳达 1473 Guadeloupe 瓜德罗普岛 590 Guatemala 瓜地马拉 502 Guernsey 根西 44 Guinea 几内亚 224 Guinea-Bissau 几内亚比绍 245 Guyana 圭亚那 592 Haiti 海地 509 Honduras 洪都拉斯 504 Hong Kong (China) 中国香港 852 Hungary 匈牙利 36 Iceland 冰岛 354 India 印度 91 Indonesia 印度尼西亚 62 Iraq 伊拉克 964 Ireland 爱尔兰 353 Isle of Man 马恩岛 44 Israel 以色列 972 Italy 意大利 39 Ivory Coast 科特迪瓦 225 Jamaica 牙买加 1876 Japan 日本 81 Jersey 泽西岛 44 Jordan 约旦 962 Kazakhstan 哈萨克斯坦 7 Kenya 肯尼亚 254 Kuwait 科威特 965 Kyrgyzstan 吉尔吉斯斯坦 996 Laos 老挝 856 Latvia 拉脱维亚 371 Lebanon 黎巴嫩 961 Lesotho 莱索托 266 Liberia 利比里亚 231 Libya 利比亚 218 Liechtenstein 列支敦士登 423 Lithuania 立陶宛 370 Luxembourg 卢森堡 352 Macau (China) 中国澳门 853 North Macedonia 北马其顿 389 Madagascar 马达加斯加 261 Malawi 马拉维 265 Malaysia 马来西亚 60 Maldives 马尔代夫 960 Mali 马里 223 Malta 马耳他 356 Marshall Islands 马绍尔群岛 692 Martinique 马提尼克 596 Mauritania 毛里塔尼亚 222 Mauritius 毛里求斯 230 Mexico 墨西哥 52 Moldova 摩尔多瓦 373 Monaco 摩纳哥 377 Mongolia 蒙古 976 Montenegro 黑山 382 Montserrat 蒙特塞拉特岛 1664 Morocco 摩洛哥 212 Mozambique 莫桑比克 258 Myanmar 缅甸 95 Namibia 纳米比亚 264 Nauru 瑙鲁 674 Nepal 尼泊尔 977 Netherlands 荷兰 31 New Caledonia 新喀里多尼亚 687 New Zealand 新西兰 64 Nicaragua 尼加拉瓜 505 Niger 尼日尔 227 Nigeria 尼日利亚 234 Niue 纽埃岛 683 Norfolk Island 诺福克岛 672 Norway 挪威 47 Oman 阿曼 968 Pakistan 巴基斯坦 92 Palau 帕劳 680 Palestinian Territory 巴勒斯坦 970 Panama 巴拿马 507 Papua New Guinea 巴布亚新几内亚 675 Paraguay 巴拉圭 595 Peru 秘鲁 51 Philippines 菲律宾 63 Poland 波兰 48 Portugal 葡萄牙 351 Qatar 卡塔尔 974 Réunion Island 留尼汪 262 Romania 罗马尼亚 40 Rwanda 卢旺达 250 Saint Kitts and Nevis 圣基茨和尼维斯 1869 Saint Lucia 圣卢西亚 1758 Saint Pierre and Miquelon 圣皮埃尔和密克隆 508 Saint Vincent and the Grenadines 圣文森特和格林纳丁斯 1784 Samoa 萨摩亚 685 San Marino 圣马力诺 378 Sao Tome and Principe 圣多美和普林西比 239 Saudi Arabia 沙特阿拉伯 966 Senegal 塞内加尔 221 Serbia 塞尔维亚 381 Seychelles 塞舌尔 248 Sierra Leone 塞拉利昂 232 Singapore 新加坡 65 Sint Maarten (Dutch Part) 荷属圣马丁 1721 Slovakia 斯洛伐克 421 Slovenia 斯洛文尼亚 386 Solomon Islands 所罗门群岛 677 Somalia 索马里 252 South Africa 南非 27 South Korea 韩国 82 Spain 西班牙 34 Sri Lanka 斯里兰卡 94 Suriname 苏里南 597 Sweden 瑞典 46 Switzerland 瑞士 41 Taiwan (China) 中国台湾 886 Tajikistan 塔吉克斯坦 992 Tanzania 坦桑尼亚 255 Thailand 泰国 66 Timor-Leste 东帝汶 670 Togo 多哥 228 Tonga 汤加 676 Trinidad and Tobago 特立尼达和多巴哥 1868 Tunisia 突尼斯 216 Türkiye 土耳其 90 Turkmenistan 土库曼斯坦 993 Turks and Caicos Islands 特克斯和凯科斯群岛 1649 Tuvalu 图瓦卢 688 Uganda 乌干达 256 Ukraine 乌克兰 380 United Arab Emirates 阿拉伯联合酋长国 971 United Kingdom 英国 44 United States 美国 1 Uruguay 乌拉圭 598 Uzbekistan 乌兹别克斯坦 998 Vanuatu 瓦努阿图 678 Venezuela 委内瑞拉 58 Vietnam 越南 84 Virgin Islands, British 英属维尔京群岛 1284 Wallis and Futuna 瓦利斯和富图纳 681 Yemen 也门 967 Zambia 赞比亚 260 Zimbabwe 津巴布韦 263 父主题: 附录