V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

有人用过阿里大于的发短信 api 么?

  •  
  •   horsley · 2016-08-13 18:51:59 +08:00 · 1519 次点击
    这是一个创建于 374 天前的主题,其中的信息可能已经有所发展或是发生改变。

    按照文档呼哧呼哧撸了 go 代码,一跑, code 25 签名错,难道是我自己撸的算法不对?

    看见官方有部分语言的 sdk , sdk 包含生成签名算法,下载个 php 的来,测试发送代码写上,一跑,签名错,对了一下生成签名的原文和摘要和我自己写的代码生成的是对的上的。

    再下载一份 python 版本的,结果一样……你们到底要怎样生成签名,你们 sdk 真的 work 吗?

    11 回复  |  直到 2017-05-24 17:05:54 +08:00
        1
    alex321   2016-08-13 19:11:36 +08:00
    一直在用啊。
    已经几十万的量了,还是能让我满意的稳定。。
        2
    ranran   2016-08-13 20:11:57 +08:00
    签名错?到底是你短信的签名还是传输时的签名?这类问题尽量提供反馈给你的报错原文比较好。

    我的 PHP SDK 是完全可用的 用很久了
        3
    horsley   2016-08-13 20:14:53 +08:00
    @ranran 这是 php sdk 的报错
    object(stdClass)#5 (3) {
    ["code"]=>
    int(25)
    ["msg"]=>
    string(17) "Invalid signature"
    ["request_id"]=>
    string(12) "r4lzrco492px"
    }
        4
    shiny   2016-08-13 20:18:59 +08:00
    function sign($params)
    {
    ksort($params);
    $str = '';
    foreach($params as $key=>$value) {
    $str = $str.$key.$value;
    }
    return strtoupper(hash_hmac('md5', $str, $this->secret));
    }
    自己写的 PHP 版签名,可以对比下签名有没有写对。
        5
    chinafeng   2016-08-13 20:45:31 +08:00
    /**
    * sms_send
    * @TODO 发送短信
    * @return bool 发送状态
    */
    function sms_send($mobile, $data, $template_code)
    {
    // 基本参数
    $api_url = 'https://eco.taobao.com/router/rest';
    $app_key = '';
    $app_secret = '';
    $sign_name = ''; // 短信签名

    // 公共参数
    $params["method"] = 'alibaba.aliqin.fc.sms.num.send';
    $params["app_key"] = $app_key;
    $params["timestamp"] = date("Y-m-d H:i:s");
    $params["format"] = 'json';
    $params["v"] = '2.0';
    $params["sign_method"] = 'md5';

    // 请求参数
    $params["sms_type"] = 'normal';
    $params["sms_free_sign_name"] = $sign_name;
    $params["sms_param"] = json_encode($data);
    $params["rec_num"] = $mobile;
    $params["sms_template_code"] = $template_code;

    // 签名过程
    ksort($params);
    $signed = $app_secret;

    foreach ($params as $key => $value)
    {
    if(is_string($value) && "@" != substr($value, 0, 1))
    {
    $signed .= "$key$value";
    }
    }
    unset($key, $value);

    $signed .= $app_secret;
    $params["sign"] = strtoupper(md5($signed));

    // 发送短信
    $result = get_api($api_url, $params);
    return $result;
    }
        6
    chinafeng   2016-08-13 20:46:09 +08:00
    把正在使用的模块稍微改了改发了出来...没测试, 应该能用, 不能用稍微修一下就行
        7
    ranran   2016-08-13 20:47:43 +08:00
    @shiny

    我用的官方 api php 不大熟悉 反正用着没问题
    https://www.v2ex.com/t/297900#reply5
        8
    2123123   2016-08-13 21:35:36 +08:00
    直接用 PHP SDK 没问题,很好奇你哪里弄错了
        9
    horsley   2016-08-14 00:39:13 +08:00
    @ranran @shiny @2123123
    我也觉得很奇怪,我下载 sdk 在测试 test.php 里面按照示例写的,如下方代码(关键部位有打码) 直接运行就是上面我说的签名错误错误码返回,按理说签名是 sdk 内部代码计算的不会错

    <?php
    include "TopSdk.php";


    $c = new TopClient;
    $c->appkey = "121xxxxx";
    $c->secretKey = "b5684f430749xxxxxxxxxxxxxxxxxxxx";
    $req = new AlibabaAliqinFcSmsNumSendRequest;
    $req->setSmsType("normal");
    $req->setSmsFreeSignName("XXXX");
    $req->setSmsParam("{\"code\":\"123455\",\"product\":\"XXXX\"}");
    $req->setRecNum("186888888888");
    $req->setSmsTemplateCode("SMS_13017117");
    $resp = $c->execute($req);

    var_dump($resp);
        10
    ranran   2016-08-14 00:43:41 +08:00
    @horsley 找客服吧。
        11
    jlj224   90 天前
    我用的是 SUBMAIL 的 SDK ,反正直接下载就行 https://www.mysubmail.com/chs/documents/developer/BSx2b3
    你可以参考一下
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   2610 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 57ms · UTC 02:16 · PVG 10:16 · LAX 19:16 · JFK 22:16
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1