目錄
代碼的接入,基於七牛官方 sdk。
產品定價
注意
短信發送頻率限制
短信內容長度計算規則
- 短信字數 = 短信模版內容字數 + 簽名字數
- 短信字數 ≤ 70 個字數,按照 70 個字數一條短信計算
- 短信字數 > 70 個字數,即為長短信,按照 67 個字數記為一條短信計算
Java 接入
代碼具體見 Github
1. 創建簽名代碼
創建好后需要等待審核
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Client;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.util.Auth;
import com.qiniu.util.Base64;
import com.qiniu.util.Json;
import com.qiniu.util.StringMap;
import me.lj.qiniu.config.Config;
/**
* 創建簽名
* https://developer.qiniu.com/sms/api/5844/sms-api-create-signature
*/
public class CreateSignature {
public static void main(String[] args) throws QiniuException {
String ACCESS_KEY = "";
String SECRET_KEY = "";
Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
String url = "https://sms.qiniuapi.com/v1/signature";
String host = "sms.qiniuapi.com";
String contentType = "application/json";
String body = "{\"signature\":\"Test1\",\"source\":\"website\"}";
String qiniuToken = "Qiniu "+auth.signRequestV2(url, "POST", body.getBytes(), contentType);
System.out.println(qiniuToken);
StringMap header = new StringMap();
header.put("Host", host);
header.put("Authorization", qiniuToken);
header.put("Content-Type", contentType);
Configuration c = new Configuration(Zone.zone1());
Client client = new Client(c);
Response response = client.post(url, body.getBytes(), header, contentType);
System.out.println("Response: " + response.bodyString());
}
}
運行結果
運行成功,返回 signature_id
2. 創建和列舉模板
public class CreateAndListTemplate {
public static void main(String[] args) throws QiniuException {
String accessKey = Config.SMS_ACCESS_KEY;
String secretKey = Config.SMS_SECRET_KEY;
Auth auth = Auth.create(accessKey, secretKey);
String url;
String host;
String contentType;
String method;
String body;
Response response;
//create
url = "https://sms.qiniuapi.com/v1/template";
host = "sms.qiniuapi.com";
contentType = "application/json";
method = "POST";
//{ "name": "test-template", "template": "Test1", "type": "verification", "description": "測試", "signature_id": "1131017766455742464" }
body = "{ \"name\": \"test-t\", \"template\": \"Test1\", \"type\": \"verification\", \"description\": \"測試\", \"signature_id\": \"1131017766455742464\" }";
response = RPCCall.call(auth, url, host, contentType, method, body);
System.out.println("Create Res: " + response.bodyString());
//list
url = "https://sms.qiniuapi.com/v1/template";
contentType = "application/x-www-form-urlencoded";
method = "GET";
response = RPCCall.call(auth, url, host, contentType, method, "");
System.out.println("List Res: " + response.bodyString());
}
}
運行結果
創建好后需要等待審核
3. 發送短信
/**
* 短信
* https://developer.qiniu.com/sms/api/5897/sms-api-send-message
*/
public class SnedMessage {
public static void main(String[] args) throws QiniuException {
String accessKey = Config.SMS_ACCESS_KEY;
String secretKey = Config.SMS_SECRET_KEY;
Auth auth = Auth.create(accessKey, secretKey);
String url;
String host;
String contentType;
String method;
String body;
Response response;
//send
url = "https://sms.qiniuapi.com/v1/message";
host = "sms.qiniuapi.com";
contentType = "application/json";
method = "POST";
body = "{ \"signature_id\": \"1131017766455742464\", \"template_id\": \"1131211147840589824\", \"mobiles\": [ \"18801732070\" ], \"parameters\": { \"code\": 123456 } }";
response = RPCCall.call(auth, url, host, contentType, method, body);
System.out.println("send Res: " + response.bodyString());
}
}
運行結果
調用成功,返回 job_id。
接收到短信
Python 接入
代碼
運行結果
運行成功,返回 signature_id
七牛 portal 界面顯示新創建的簽名
PHP 接入
代碼
<?php
require_once __DIR__ . '/../../autoload.php';
use \Qiniu\Auth;
use Qiniu\Http\Client;
// https://developer.qiniu.com/sms/api/5844/sms-api-create-signature
$accessKey = "DP4FyFXIHuThsAqZec6ykFkqjMy6EmSzC1Amd3hd";
$secretKey = "BoG_hT6idwA85rFQ4vpmJGiHXzVOur9RtQm6RtaQ";
// 初始化Auth狀態
$auth = new Auth($accessKey, $secretKey);
// 初始化請求參數
$url = "https://sms.qiniuapi.com/v1/signature";
$method = "POST";
$host = "sms.qiniuapi.com";
$contentType = "application/json";
$body = "{\"signature\":\"php\",\"source\":\"website\"}";
// 鑒權憑證
$headers = $auth->authorizationV2($url, $method, $body, $contentType);
$headers['Content-Type'] = $contentType;
$headers['Host'] = $host;
$response = Client::post($url, $bodyJson, $headers);
$r = $response->json();
var_dump($r);
if ($response->ok()) {
$r = $response->json();
var_dump($r);
}
運行結果
返回
{
'signature_id' =>
string(19) "1131051944643665920"
}
GO 接入
sdk 代碼見:https://github.com/qiniu/api.v7/tree/master/sms
代碼
package sms_test
import (
"testing"
"github.com/qiniu/api.v7/sms"
)
func TestSignature(t *testing.T) {
// CreateSignature
args := sms.SignatureRequest{
Signature: "Test",
Source: sms.Website,
}
ret, err := manager.CreateSignature(args)
if err != nil {
t.Fatalf("CreateSignature() error: %v\n", err)
}
if len(ret.SignatureID) == 0 {
t.Fatal("CreateSignature() error: The signature ID cannot be empty")
}
// QuerySignature
query := sms.QuerySignatureRequest{}
pagination, err := manager.QuerySignature(query)
if err != nil {
t.Fatalf("QuerySignature() error: %v\n", err)
}
if len(pagination.Items) == 0 {
t.Fatal("QuerySignature() error: signatures cannot be empty")
}
if pagination.Total == 0 {
t.Fatal("QuerySignature() error: total cannot be 0")
}
// UpdateSignature
update := sms.SignatureRequest{
Signature: "test",
}
err = manager.UpdateSignature(ret.SignatureID, update)
if err != nil {
t.Fatalf("UpdateSignature() error: %v\n", err)
}
// DeleteSignature
err = manager.DeleteSignature(ret.SignatureID)
if err != nil {
t.Fatalf("DeleteSignature() error: %v\n", err)
}
}
運行結果
參考
建議
- 不要叫管理憑證,容易和存儲混淆