您的位置:首页 > 移动开发 > 微信开发

JSSDK,微信JS接口,分享朋友圈狀態捕獲,項目實例

2015-09-24 14:29 746 查看
實例:手機網頁,用戶分享狀態

模板代碼:

<?php

//微信JS接口驗證,START,BY TC

require_once "JSSDK/jssdk.php";

$jssdk = new JSSDK("應用ID", "應用密鑰");

$signPackage = $jssdk->GetSignPackage();

//微信JS接口驗證,END,BY TC

?>

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <title></title>

</head>

<body>

</body>

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

<script>

    //微信分享狀態捕獲,START,BY TC

    wx.config({

        debug: false,

        appId: '<?php echo $signPackage["appId"];?>',

        timestamp: <?php echo $signPackage["timestamp"];?>,

        nonceStr: '<?php echo $signPackage["nonceStr"];?>',

        signature: '<?php echo $signPackage["signature"];?>',

        jsApiList:["onMenuShareTimeline","onMenuShareAppMessage"]

    });

    wx.error(function(res){

      alert("jssdk config false");

    });

    wx.ready(function(){

        wx.onMenuShareAppMessage({

            title:'XXXXX',

            desc:'XXXXX',

            link:'http://www.haocaimao.com/mobile/index.php',

            imgUrl:'http://www.haocaimao.com/mobile/shareIcon2/shareImg.png',

            success:function(){

                $.ajax({

                    url:'http://www.haocaimao.com/mobile/JSSDK/XXXX.php',

                    success:function(re){
...;

                    },

                    error:function(re){
...;

                    }

                })

                alert('share success(jssdk)');

            },

            cancel:function(){

                alert('share cancel(jssdk)');

            }

        });

    });

    //微信分享狀態捕獲,END,BY TC

</script>
</html>

JS接口驗證代碼:

<?php

/*

*

*微信JS接口驗證,BY TC

*

*/

class JSSDK{

  private $appId;

  private $appSecret;

  public function __construct($appId, $appSecret){

    $this->appId = $appId;

    $this->appSecret = $appSecret;

  }

  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]";

    $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(file_get_contents("jsapi_ticket.json"));

    if ($data->expire_time < time()) {

      $accessToken = $this->getAccessToken();

      // 如果是企業號用以下 URL 獲取 ticket

      // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";

      $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";

      $res = json_decode($this->httpGet($url));

      $ticket = $res->ticket;

      if ($ticket) {

        $data->expire_time = time() + 7000;

        $data->jsapi_ticket = $ticket;

        $fp = fopen("jsapi_ticket.json", "w");

        fwrite($fp, json_encode($data));

        fclose($fp);

      }

    } else {

      $ticket = $data->jsapi_ticket;

    }

    return $ticket;

  }

  private function getAccessToken() {

    // access_token 應該全局存儲與更新,以下代碼以寫入到文件中做示例

    $data = json_decode(file_get_contents("access_token.json"));

    if ($data->expire_time < time()) {

      // 如果是企業號用以下URL獲取access_token

      // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";

      $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;

      if ($access_token) {

        $data->expire_time = time() + 7000;

        $data->access_token = $access_token;

        $fp = fopen("access_token.json", "w");

        fwrite($fp, json_encode($data));

        fclose($fp);

      }

    } 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_SSL_VERIFYPEER, false);

    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

    curl_setopt($curl, CURLOPT_URL, $url);

    $res = curl_exec($curl);

    curl_close($curl);

    return $res;

  }

}

備註:

錯誤->微信分享接口,可以在自己的網頁上面自定義一個按鈕,當用戶點擊的時候完成分享

實際->只有當妳用微信客戶端打開,按上面右邊的 “分享到朋友圈”按鈕的時候效果才觸發出來
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息