七牛雲短信 - Java PHP Python Go 語言接入


目錄

代碼的接入,基於七牛官方 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)
    }

}

運行結果

參考

七牛雲短信

建議

  1. 不要叫管理憑證,容易和存儲混淆


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM