开发者社区> 问答> 正文

请教ONS(PHP)的问题。。。

代码:

//签名加密
public function calSignatue($str,$key)
{
    $sign = "";
    if(function_exists("hash_hmac"))
    {
        $sign = base64_encode(hash_hmac("sha1",$str,$key,true));
    }
    else
    {
        $blockSize = 64;
        $hashfunc = "sha1";
        if(strlen($key) > $blockSize)
        {
            $key = pack('H*',$hashfunc($key));
        }
        $key = str_pad($key,$blockSize,chr(0x00));
        $ipad = str_repeat(chr(0x36),$blockSize);
        $opad = str_repeat(chr(0x5c),$blockSize);
        $hmac = pack(
            'H*',$hashfunc(
                ($key^$opad).pack(
                    'H*',$hashfunc($key^$ipad).$str
                )
            )
        );
        $sign = base64_encode($hmac);
    }
    return $sign;
}
//消息发布
public function producerProcess($bodyString,$topic,$producerId,$url,$ak,$sk)
{
    //请求内容
    $request_body = utf8_encode($bodyString);
    //$request_body = $bodyString;
    //计算时间戳毫秒
    $millisecond = time()*1000;
    //请求url
    $request_url = $url."/message/?topic=".$topic."&time=".$millisecond."&tag=http&key=http";
    //签名字符串
    $signString = $topic."\n".$producerId."\n".md5($request_body)."\n".$millisecond;
    $sign = $this->calSignatue($signString,$sk);
    //请求头部
    $request_header = [
        'Signature:'.$sign,
        'AccessKey:'.$ak,
        'ProducerId:'.$producerId,
        'Content-Type:text/html;charset=UTF-8',
    ];

    //干活
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, 0);
    curl_setopt($ch,CURLOPT_HEADER, 1);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$request_header);
    curl_setopt($ch,CURLOPT_URL,$request_url);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$request_body);
    curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');
    $result = curl_exec($ch);
    var_dump($ch);
    var_dump($result);
    curl_close($ch);
    exit;
}

折腾2天了,都是返回:HTTP/1.1 403 Forbidden Server: Tengine Date: Tue, 18 Oct 2016 07:29:07 GMT Content-Length: 0 Connection: keep-alive resource(9) of type (curl) bool(true)。

也不知道是哪里的问题,亲熟悉ONS的大牛给看看。。

展开
收起
mybizsite 2016-10-18 15:34:07 2649 0
1 条回答
写回答
取消 提交回答
  • 403 Forbidden,是服务器返回的错误,你手工直接访问时什么错误,检查下服务器配置吧。

    2019-07-17 20:17:41
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
The Next Gen of PHP 立即下载
使用C++开发PHP7扩展 立即下载
低代码开发师(初级)实战教程 立即下载