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

2016-08-13 18:51:59 +08:00
 horsley

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

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

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

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

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

我用的官方 api php 不大熟悉 反正用着没问题
https://www.v2ex.com/t/297900#reply5
2123123
2016-08-13 21:35:36 +08:00
直接用 PHP SDK 没问题,很好奇你哪里弄错了
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);
ranran
2016-08-14 00:43:41 +08:00
@horsley 找客服吧。
jlj224
2017-05-24 17:05:54 +08:00
我用的是 SUBMAIL 的 SDK ,反正直接下载就行 https://www.mysubmail.com/chs/documents/developer/BSx2b3
你可以参考一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/299097

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX