马来西亚短信 API
从你自己的系统直接发短信

从你自己的应用发送验证码、订单通知、预约提醒 —— 用的是一个专门设计过的 REST API:你这边网络超时重试,也不会被扣两次钱。

拿来做什么

大多数短信 API 做错的地方

你的 HTTP 客户端有超时,我们这边也有网络。迟早会遇到这种情况:请求在我们已经建好短信、但你还没收到回应时超时了 —— 你的重试逻辑就会再发一次。没有防护的话,就是扣两次钱、每个收件人收到两条,而且两次都退不了,因为运营商两次都收了费。

每个发送请求都接受 Idempotency-Key 请求头。同一个请求重试多少次都可以:第一次真正发送,之后每一次都返回完全相同的结果(包括同一个短信 ID),不会重复扣费。

curl https://hantarsms.com/api/v1/messages \
  -H "X-API-Key: $HANTARSMS_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-48213-reminder" \
  -d '{"to":["60123456789"],"text":"您的订单 #48213 已可取货。"}'

逐个号码的送达报告

活动效果不好的时候,总数没什么用。API 会返回每一个号码的结果,并且把很多平台混在一起的两种状态分开:

状态含义是否收费
delivered运营商确认已送到手机收费
undelivered运营商已接收,但没送到手机收费
rejected根本没提交出去 —— 号码无效或内容被拦不收费,自动退回
sent已提交,最终回执还没回来收费

把 rejected 并进 undelivered 的话,账单根本对不上 —— 一个要收费,一个不收。

还有这些

完整文档

接口、参数、所有错误码,以及 PHP、Python、Node.js、Java 的可运行示例,都在 API 文档。不用注册就能看 —— 注册前先看一眼,确认适不适合你的系统。用 WordPress 的话,WordPress 插件不用写代码就能接上验证码、WooCommerce 订单短信和营销群发。

常见问题

API 要月费吗?

不用。API 每段的价格和网页后台一样,没有平台费、没有最低用量、也没有单独的 API 套餐,只按短信收费。

请求超时后我重试,会怎样?

如果带了 Idempotency-Key 请求头,什么都不会多发 —— 重试会返回原来的结果和同一个短信 ID,只扣一次钱。没带这个请求头的话,重试会被当成一条新短信,所以每个请求都要带上。

可以用 API 发验证码吗?

可以,这是最主要的用途之一。短信从共享的 5 位短号码发出,正是用户习惯收验证码的发件形式。费用和设置见 短信验证码,短号码见 短代码 SMS。

怎么拿到送达状态?

查询短信接口拿汇总,查询收件人接口拿每个号码的明细。读取时会从运营商刷新状态。Webhook 推送在规划中,目前支持的方式是轮询。

有哪些语言的示例?

API 文档 里有 curl、PHP、Python、Node.js、Java 的完整示例。它是普通的 REST + JSON 接口,任何 HTTP 客户端都能用,不需要安装 SDK。

两分钟拿到 API 密钥

注册,在控制台生成密钥,WhatsApp 领 RM1 试用额度,给自己的手机发一条测试。