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

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

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

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

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

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

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

    我的 PHP SDK 是完全可用的 用很久了
    horsley
        3
    horsley  
    OP
       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"
    }
    shiny
        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 版签名,可以对比下签名有没有写对。
    chinafeng
        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;
    }
    chinafeng
        6
    chinafeng  
       2016-08-13 20:46:09 +08:00
    把正在使用的模块稍微改了改发了出来...没测试, 应该能用, 不能用稍微修一下就行
    ranran
        7
    ranran  
       2016-08-13 20:47:43 +08:00
    @shiny

    我用的官方 api php 不大熟悉 反正用着没问题
    https://www.v2ex.com/t/297900#reply5
    2123123
        8
    2123123  
       2016-08-13 21:35:36 +08:00
    直接用 PHP SDK 没问题,很好奇你哪里弄错了
    horsley
        9
    horsley  
    OP
       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);
    ranran
        10
    ranran  
       2016-08-14 00:43:41 +08:00
    @horsley 找客服吧。
    jlj224
        11
    jlj224  
       2017-05-24 17:05:54 +08:00
    我用的是 SUBMAIL 的 SDK ,反正直接下载就行 https://www.mysubmail.com/chs/documents/developer/BSx2b3
    你可以参考一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3303 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:41 · PVG 18:41 · LAX 02:41 · JFK 05:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.