日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

阿里云短信官方的java示例是错误的

發布時間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阿里云短信官方的java示例是错误的 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

阿里云短信前身是大魚,現在移入了阿里云短信。

下載了官方sdk發現一大坨。我不需要啊。

下面自己精簡一下,寫一個。

誰知道一直提示簽名不正確。

看了官網的示例然后對比了一下官方的php sdk

這,java示例是錯的嘛?

?

這個是官方的php里的一段,根本沒有要特殊編碼嘛,只是簡單urlencode

?

然后自己寫了一個,就不用它的官方php sdk了

<?php

class SmsClient
{

public $appKey;
public $secretKey;
public $gatewayUrl = "http://dysmsapi.aliyuncs.com";
public $format = "xml";



public function __construct($appKey = "",$secretKey = ""){
$this->appKey = $appKey;
$this->secretKey = $secretKey ;
}



private function percentEncode($string) {
$res = urlencode($string);
$res = preg_replace('/\+/', '%20', $res);
$res = preg_replace('/\*/', '%2A', $res);
$res = preg_replace('/%7E/', '~', $res);
return $res;
}

private function computeSignature($parameters, $accessKeySecret) {
$signString = '';
foreach($parameters as $key => $value)
{
$signString .= '&' . $this->percentEncode($key). '=' . $this->percentEncode($value);
}
$stringToSign = 'GET&%2F&' . $this->percentEncode(substr($signString, 1));
$signature=base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret."&", true));
return $signature;
}
public function execute($request, $bestUrl = null)
{
header("Content-type: text/html; charset=utf-8");

$sysParams = array(
'SignatureMethod' => 'HMAC-SHA1',
'SignatureNonce' => $this->create_uuid(),
'AccessKeyId' => $this -> appKey,
'SignatureVersion' => '1.0',
'Timestamp' =>gmdate("Y-m-d\TH:i:s\Z"),
'Format' =>$this->format,
'Action'=> 'SendSms',
'Version'=>'2017-05-25',
'RegionId'=>'cn-hangzhou',
'PhoneNumbers' => $request->getRecNum(),
'SignName' => $request->getSmsFreeSignName(),
'TemplateParam' =>$request->getSmsParam(),
'TemplateCode' => $request->getSmsTemplateCode(),
'OutId'=>'12345',
);

//系統參數放入GET請求串
if($bestUrl){
$requestUrl = $bestUrl."/?";
}else{
$requestUrl = $this->gatewayUrl."/?";
}
ksort($sysParams);
$sortedQueryString= "";
foreach ($sysParams as $key => $value) {
$sortedQueryString.= "&".$key."=" . urlencode($value);
}
//簽名
$signature = $this->computeSignature($sysParams,$this->secretKey);
$url=$requestUrl.'Signature='.$signature.$sortedQueryString;

//發起HTTP請求
try
{
$resp =$this->fetchContent($url);

}
catch (Exception $e)
{


}

//解析返回結果
$response=null;
$respWellFormed = false;
if ("JSON" == $this->format)
{
$response = json_decode($resp);

if (null !== $response)
{
$respWellFormed = true;
}
}
else if("XML" == $this->format)
{
$response = @simplexml_load_string($resp);
if (false !== $response)
{
$respWellFormed = true;
}
}

//返回的HTTP文本不是標準JSON或者XML,記下錯誤日志
if (false === $respWellFormed)
{
//提示點什么吧
}

//如果返回了錯誤碼,記錄到業務錯誤日志中
if (isset($response->Code)&&$response->Code!='OK')
{
//自己做點什么吧
}
return $response;
}


private function fetchContent($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"x-sdk-client" => "php/2.0.0"
));

if(substr($url, 0,5) == 'https') {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
}

$rtn = curl_exec($ch);

if($rtn === false) {
trigger_error("[CURL_" . curl_errno($ch) . "]: " . curl_error($ch), E_USER_ERROR);
}
curl_close($ch);

return $rtn;
}
function create_uuid($prefix = ""){ //可以指定前綴
$str = md5(uniqid(mt_rand(), true));
$uuid = substr($str,0,8) . '-';
$uuid .= substr($str,8,4) . '-';
$uuid .= substr($str,12,4) . '-';
$uuid .= substr($str,16,4) . '-';
$uuid .= substr($str,20,12);
return $prefix . $uuid;
}
}

轉載于:https://www.cnblogs.com/etiao/p/9519209.html

總結

以上是生活随笔為你收集整理的阿里云短信官方的java示例是错误的的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。