php h5微信分享 JSSDK

1:绑定JS安全域名

登陆微信公众平台,点击"公众号设置"->"功能设置"->"设置"。(测试号绑定方法:进入测试号管理页面,找到JS接口安全域名项绑定)

绑定域名前,首先根据公众平台的提示将指定的txt文件上传到将要设置的域名对应的目录下,并给777权限。

域名格式:这里填写的是一级域名,不带www和http;最多可以设置三个域名;如果你的项目域名是http://test.domain.com,那么JS接口安全域名为test.domain.com;设置完后点击确定。

域名绑定失败或者域名不存在会报错误:invalid url domain

JS接口安全域名官方说法是:开发者可在该域名下调用微信开放的JS接口

(相比以前的分享没有任何域名限制,这里设置安全域名,目的是为了当发现此公众平台发现诱导分享行为时,可以根据此域名追溯到所有分享出去的链接,以及通过这些链接增加的粉丝。这样,微信就可以牢牢控制了你的微信平台,一旦发现违规,让分享链接失效,删除掉诱导行为增加的粉丝,是瞬间就可以完成的。)

2:在开发者中心中获取AppID和AppSecret(作为获取令牌使用)

注意:生成AppSecret后,关闭当前页面之后,公众平台将不再储存和显示AppSecrec,请妥善保存。



php后端首先创建jssdk文件
//jssdk类
class JSSDK 
{
    private $appId='';

    private $appSecret='';
//  public function __construct($appId, $appSecret) {

//    $this->appId = $appId;

//    $this->appSecret = $appSecret;

//  }

    public function getSignPackage()
    {
        $jsapiTicket = $this->getJsApiTicket();
        $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
        $timestamp = time();
        $nonceStr = $this->createNonceStr();
        // 这里参数的顺序要按照 key 值 ASCII 码升序排序
        $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
        $signature = sha1($string);
        $signPackage = array(
            "appId"     => $this->appId,
            "nonceStr"  => $nonceStr,
            "timestamp" => $timestamp,
            "url"       => $url,
            "signature" => $signature,
            "rawString" => $string
        );
        return $signPackage;
    }

    private function createNonceStr($length = 16)
    {
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        $str = "";
        for ($i = 0; $i < $length; $i++) {
            $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
        }
        return $str;
    }

    private function getJsApiTicket()
    {
        // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
        $data = json_decode($this->getCacheTicket());
        if (empty($data)) {
            $accessToken = $this->getAccessToken();

            $url = "http://api.weixin.qq.com/cgi-bin/ticket/getticket?type=1&access_token=$accessToken";
            $res = json_decode($this->httpGet($url));

            $data = new \stdClass();
            $ticket = $res->ticket;
            if ($ticket) {
                $data->expire_time = time() + 7000;
                $data->jsapi_ticket = $ticket;
                $this->setCacheTicket(json_encode($data));
            }
        } else {
            $ticket = $data->jsapi_ticket;
        }
        return $ticket;
    }

    private function getAccessToken()
    {
        // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
        $data = json_decode($this->getCacheToken());
        if (empty($data)) {
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
            $res = json_decode($this->httpGet($url));
            $access_token = $res->access_token;
            $data = new \stdClass();
            if ($access_token) {
                $data->expire_time = time() + 7000;
                $data->access_token = $access_token;
                $this->setCacheToken(json_encode($data));
            }
        } else {
            $access_token = $data->access_token;
        }
        return $access_token;

    }

    private function httpGet($url)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 500);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //不验证证书下同
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        $res = curl_exec($curl);
        curl_close($curl);
        return $res;

    }



    private function getCacheToken()
    {
        return Cache::get("weixin_share_token");
    }

    private function setCacheToken($token)
    {
        return Cache::set("weixin_share_token",$token,7000);
    }



    private function getCacheTicket()
    {
        return Cache::get("weixin_share_ticket");  //缓存获取,也可自己放入数据库存储
    }

    private function setCacheTicket($ticket)
    {
        return Cache::set("weixin_share_ticket",$ticket,7000);  //设置缓存
    }


}

微信接口文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

//前端页面JS部分

你可能感兴趣的:(php h5微信分享 JSSDK)