zoukankan      html  css  js  c++  java
  • 微信分享功能开发代码整理

    微信分享对接php项目:

    做微信分享开发要注意所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”

    1,Jssdk类包的引入Jssdk.class.php生成注册微信官方分享按钮的权限参数,代码如下:

    <?php
    // +----------------------------------------------------------------------
    // | 微信分享核心包类
    // +----------------------------------------------------------------------
    // | Copyright (c) 2012-2014 http://www.bieanju.com/ All rights reserved.
    // +----------------------------------------------------------------------
    // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
    // +----------------------------------------------------------------------
    // | Author: RockCoder(bieanju)
    // | CreateTime : 2015-9-17
    // +----------------------------------------------------------------------
    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&timestamp=$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;
      }
    }

    2,引入微信官方的js demo.html

    程序示例:

    <?php
    class DemoAction extends Action{
    
        public function WxShare(){
            /* 微信分享前置配置数据 */
            import('@.ORG.Jssdk');
            $WxShare = new Jssdk(C('new_appid'),C('appsecret'));
            $this->Share = $WxShare->getSignPackage();//生成注册微信分享按钮参数
        }
    }
    ?>

    模板输出示例:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>微信分享Demo</title>
    <script type="text/javascript" src="./Tpl/js/weixin.js"></script>
    <script>
    /* 注册微信分享按钮权限参数 */
        var WxShareConfig = {
                "AppID":"{$Share.appId}",
                "TimeStamp":"{$Share.timestamp}",
                "NonceStr":"{$Share.nonceStr}",
                "Signature":"{$Share.signature}",
        }
    /* 分享数据参数 */
        window.shareData = {  
                "moduleName":"Store",
                "moduleID":"{$product['id']}",
                "imgUrl": "{$product['logourl']}", 
                "timeLineLink": "{:C('site_url') .  U('Store/product',array('token' => $_GET['token'],'id'=>$product['id'], 'twid' => $mytwid))}",
                "sendFriendLink": "{:C('site_url') .  U('Store/product',array('token' => $_GET['token'],'id'=>$product['id'], 'twid' => $mytwid))}",
                "weiboLink": "{:C('site_url') .  U('Store/product',array('token' => $_GET['token'],'id'=>$product['id'], 'twid' => $mytwid))}",
                "tTitle": "{$metaTitle}",
                "tContent": "{$metaTitle}"
            };
    </script>
    <script type="text/javascript" src="./Tpl/js/wxshare.js"></script>
    <script>
    /* 分享成功处理的业务逻辑 */
        function shareSuccess(){
            $.post("U('Doaction/activity')",function (data) {
                alert(data.msg);
            },"json");
        }
    </script>
    </head>
    <body>
    
    </body>
    </html>

    3,wxshare.js引入demo.html页面处理分享事件(PS:程序所需要的js 传送门 解压密码:http://www.bieanju.com/)

    4,根据3的返回状态进行业务逻辑处理

  • 相关阅读:
    HDU 5744
    HDU 5815
    POJ 1269
    HDU 5742
    HDU 4609
    fzu 1150 Farmer Bill's Problem
    fzu 1002 HangOver
    fzu 1001 Duplicate Pair
    fzu 1150 Farmer Bill's Problem
    fzu 1182 Argus 优先队列
  • 原文地址:https://www.cnblogs.com/bieanju/p/5842908.html
Copyright © 2011-2022 走看看