按照文档呼哧呼哧撸了 go 代码,一跑, code 25 签名错,难道是我自己撸的算法不对?
看见官方有部分语言的 sdk , sdk 包含生成签名算法,下载个 php 的来,测试发送代码写上,一跑,签名错,对了一下生成签名的原文和摘要和我自己写的代码生成的是对的上的。
再下载一份 python 版本的,结果一样……你们到底要怎样生成签名,你们 sdk 真的 work 吗?
1
alex321 2016-08-13 19:11:36 +08:00
一直在用啊。
已经几十万的量了,还是能让我满意的稳定。。 |
2
ranran 2016-08-13 20:11:57 +08:00
签名错?到底是你短信的签名还是传输时的签名?这类问题尽量提供反馈给你的报错原文比较好。
我的 PHP SDK 是完全可用的 用很久了 |
3
horsley OP @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
|
8
2123123 2016-08-13 21:35:36 +08:00
直接用 PHP SDK 没问题,很好奇你哪里弄错了
|
9
horsley OP @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); |
11
jlj224 2017-05-24 17:05:54 +08:00
我用的是 SUBMAIL 的 SDK ,反正直接下载就行 https://www.mysubmail.com/chs/documents/developer/BSx2b3
你可以参考一下 |