美文网首页
IIS+PHP下微信二次开发JS-SDK签名失败(已解决)

IIS+PHP下微信二次开发JS-SDK签名失败(已解决)

作者: 老4 | 来源:发表于2016-02-03 13:58 被阅读931次

    今天朋友丢个页面给我让配置下微信分享信息(标题,摘要,图片)。
    二话不说,从微信开发文档里面把JS-SDK的下载下来,然后按开发文档说的那样做好配置。但是签名一直失败啊~~~~,我想很多新手跟我一样,也会遇到或多或少这样的问题,如果你遇到的问题跟我一样,那这篇文章一定对你有所帮助。
    服务器环境
    IIS6.0+PHP5.2.9 (ISAPI模式)

    • 问题一:报错“Call to undelfined function curl_init()
      解决方案:打开php.ini,找到;extension=php_curl.dll,把前面的;去掉重启服务器,开始我是在服务里面重启IIS server,但是重启了还是同样的报错,用命令行模式运行下curl_init()没报错,看来是没重启成功,继续去IIS里面进行下步操作:
      QQ图片20160203133325.png
      好啦,这下没有报错了,但是签名还是失败。
      好吧~~~又去看jssdk.php函数:
    private function httpGet($url) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 500);
        // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
        // 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
        curl_setopt($curl, CURLOPT_URL, $url);
    
        $res = curl_exec($curl);
        curl_close($curl);
    
        return $res;
      }
    

    这里我想应该是CURLOPT_SSL的问题,可以试试把php.ini里面的extension=php_openssl.dll开启,这里我跳过了这部,直接修改了httpGet这个函数,改成下面这样子咯~

      private function httpGet($url) {
        $res = file_get_contents($url);
        return $res;
      }
    

    到这里以为万事大吉了,可是刷新页面,继续出现如下错误

    • 问题二:警告“iis php file_get_contents failed to open stream
      继续打开php.ini,保证下面2行是开启状态,重启ISAPI_筛选器
    allow_url_fopen = On
    allow_url_include = On
    

    好啦,警告也没有啦,签名也成功!但是问题又来了

     public function getSignPackage() {
        $jsapiTicket = $this->getJsApiTicket();
    
        // 注意 URL 一定要动态获取,不能 hardcode.
        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    

    说明:
    1.在apache+php下面,上面2个链接的$_SERVER[REQUEST_URI]分别对应"/index.php"和“/”
    2.在IIS+php中两个链接的$_SERVER[REQUEST_URI]都是"/index.php",在IIS环境下只需要把

    $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    

    改成

    $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[HTTP_X_REWRITE_URL]";
    

    因为微信浏览器打开的url必须跟签名sdk里面传入的url一致!

    相关文章

      网友评论

          本文标题:IIS+PHP下微信二次开发JS-SDK签名失败(已解决)

          本文链接:https://www.haomeiwen.com/subject/mvlekttx.html