百恒网络
THINKPHP程序实现微信分享
  • 百恒服务
  • APP开发
  • 网页案例
  • 网页知识
  • 关于我们
  • 联系我们
  • THINKPHP程序实现微信分享

    2016-09-05 12:20:46 5250

    第一步:先登录你的微信公众号,附上登录链接https://mp.weixin.qq.com/

    第二步:获取你的AppID(应用ID) 和 AppSecret(应用密钥) 如下图

    第三步:设置你的JS安全域名 ,在公众号设置->功能设置->JS接口安全域名 填写你的项目域名即可 例如 :http://www.nczwz.com 备注:登录后可在“开发者中心”查看对应的接口权限。 (如下图)

    以上是公众号需要设置的..

    程序方面参考 http://203.195.235.76/jssdk/ 您可以用微信打开这个链接查看拥有的权限接口

    常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html

    1.引入JS文件

    1.1:在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js 详情请查看 JS-SDK 文档

    2.通过config接口注入权限验证配置如下图

    另外附上代码:(在你需要分享的页面地方写入)

      wx.config({
          debug     : false,
          appId     : '{$sign["appId"]}', //appid
          timestamp : {$sign["timestamp"]}, //时间戳
          nonceStr  : '{$sign["noncestr"]}', //签名随机码
          signature : '{$sign["signature"]}', //签名
          jsApiList : ['checkJsApi','onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone']//权限列表
     });
     wx.ready(function () {
      document.querySelector('#checkJsApi').onclick = function () {//检测当前环境是否支持接口
       	  wx.checkJsApi({
    	    jsApiList: [
    		  'getNetworkType',
    		  'previewImage'
    	    ],
    	    success: function (res) {
    		  alert(JSON.stringify(res));
    	    }
    	  });
      };
      wx.onMenuShareAppMessage({//分享给朋友
          title   : '分享的标题',
          desc    : '分享的描述信息',
          link    : '分享的链接 为当前URL 也是签名的URL',
          imgUrl  : '分享的图片',
          trigger : function (res) {
          },
          success: function (res) {
            //您可以操作啦
          },
          cancel: function (res) {
            alert('您已经取消了分享');
          },
          fail: function (res) {
            alert(JSON.stringify(res));
          }
        });
      wx.onMenuShareTimeline({ //分享到朋友圈
          title   : '分享的标题',
          desc    : '分享的描述信息',
          link    : '分享的链接 为当前URL 也是签名的URL',
          imgUrl  : '分享的图片',
          trigger : function (res) {
          },
          success: function (res) {
            //您可以操作啦
          },
          cancel: function (res) {
            alert('您已经取消了分享');
          },
          fail: function (res) {
            alert(JSON.stringify(res));
          }
      });
      wx.onMenuShareQQ({ //分享到QQ
          title   : '分享的标题',
          desc    : '分享的描述信息',
          link    : '分享的链接 为当前URL 也是签名的URL',
          imgUrl  : '分享的图片',
          trigger : function (res) {
          },
          complete: function (res) {
            alert(JSON.stringify(res));
          },
          success: function (res) {
            //您可以操作啦
          },
          cancel: function (res) {
            alert('您已经取消了分享');
          },
          fail: function (res) {
            alert(JSON.stringify(res));
          }
      });
      wx.onMenuShareWeibo({ //分享到腾讯微博
          title   : '分享的标题',
          desc    : '分享的描述信息',
          link    : '分享的链接 为当前URL 也是签名的URL',
          imgUrl  : '分享的图片',
          trigger : function (res) {
          },
          complete: function (res) {
            alert(JSON.stringify(res));
          },
          success: function (res) {
            //您可以操作啦
          },
          cancel: function (res) {
            alert('您已经取消了分享');
          },
          fail: function (res) {
            alert(JSON.stringify(res));
          }
      });
      wx.onMenuShareQZone({ //分享到QQ空间
          title   : '分享的标题',
          desc    : '分享的描述信息',
          link    : '分享的链接 为当前URL 也是签名的URL',
          imgUrl  : '分享的图片',
          trigger : function (res) {
          },
          complete: function (res) {
            alert(JSON.stringify(res));
          },
          success: function (res) {
            //您可以操作啦
          },
          cancel: function (res) {
            alert('您已经取消了分享');
          },
          fail: function (res) {
            alert(JSON.stringify(res));
          }
        });
    });
    wx.error(function (res) {
      alert(res.errMsg); //显示错误
    });
    

    程序部分(数据结构见附件)

      //获取token
      function getToken(){
        $data = M('weixintoken')->where('type=1')->field('token,expire,time,Id,type')->order('time DESC')->find();
        if ($data) {
    	  if($data['time']+$data['expire']-60 > time()){
    	    return array('token'=>$data['token'],'msg'=>'','statue'=>1);
    	  } else {
    	    M('weixintoken')->where(array('Id'=>$data['Id']))->delete(); //删除过期
    	  }
        }
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".C("WEIXIN_APPID")."&secret=".C("WEIXIN_SECRET");
        $key = curl_init();
        curl_setopt($key,CURLOPT_URL,$url);
        curl_setopt($key,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($key, CURLOPT_SSL_VERIFYPEER, false); //不验证证书
        //curl_setopt($_key, CURLOPT_SSL_VERIFYHOST, false); //不验证证书 
        $reslut = curl_exec($key);
        $reslut = json_decode($reslut);
        if (curl_errno($key)) {
    	  return array('token'=>'','msg'=>curl_error($key),'statue'=>0);
        }else{
    	  if (isset($reslut->errcode) && $reslut->errcode!='') {
    	    return array('token'=>'','msg'=>$reslut->errmsg,'statue'=>0);
    	  } else {
    	    $token   = $reslut->access_token;
    	    $expire  = intval($reslut->expires_in);
    	    M('weixintoken')->add(array('token'=>$token,'expire'=>$expire,'type'=>1,'time'=>time()));
    	    return array('token'=>$token,'msg'=>'','statue'=>1);
    	  }
        }
      }
      //获取ticket
      function getTicket(){
    	$token = getToken();
    	if ($token['statue'] && $token['token']!='') {
    	  $data = M('weixintoken')->where('type=2')->field('token,expire,time,Id,type')->order('time DESC')->find();
    	  if ($data) {
    	    if($data['time']+$data['expire']-60 > time()){
    		  return array('token'=>$data['token'],'msg'=>'','statue'=>1);
    	    } else {
    		  M('weixintoken')->where(array('Id'=>$data['Id']))->delete(); //删除过期
    	    }
    	  }
    	  $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$token['token']."&type=jsapi";
    	  $key = curl_init();
    	  curl_setopt($key,CURLOPT_URL,$url);
    	  curl_setopt($key,CURLOPT_RETURNTRANSFER,1);
    	  curl_setopt($key, CURLOPT_SSL_VERIFYPEER, false); //不验证证书
    	  //curl_setopt($_key, CURLOPT_SSL_VERIFYHOST, false); //不验证证书 
    	  $reslut = curl_exec($key);
    	  $reslut = json_decode($reslut);
    	  if (curl_errno($key)) {
    	    return array('token'=>'','msg'=>curl_error($key),'statue'=>0);
    	  }else{
    		if($reslut->errcode == 0) {
    	      $token   = $reslut->ticket;
    	      $expire  = intval($reslut->expires_in);
    	      M('weixintoken')->add(array('token'=>$token,'expire'=>$expire,'type'=>2,'time'=>time()));
    	      return array('token'=>$token,'msg'=>$reslut->errmsg,'statue'=>1);
    		} else {
    		  return array('token'=>'','msg'=>$reslut->errmsg,'statue'=>0);
    		}
    	  }
    	} else {
    	  return $token;
    	}
      }
      //加密
      function jsApiSign($noncestr='',$timestamp='',$url=''){
    	 if ($noncestr!='' && $timestamp!='' && $url!='') {
    		 $ticket = getTicket();
    		 if ($ticket['statue'] && $ticket['token']!='') {
    		   $string = 'jsapi_ticket='.$ticket['token'].'&noncestr='.$noncestr.'×tamp='.$timestamp.'&url='.$url;
    		   writelog('shastring:',$string.'sha1:'.sha1($string));
    		   return sha1($string);
    		 } else {
    		   return FALSE;
    		 }
    	 } else {
    	   return FALSE;
    	 }
      }
      //加密分享返回相应参数
      function shareSign($url=''){
        if ($url!='') {
    	  $time = time();
    	  $noncestr  = substr(md5($time),0,6);
    	  $signature = jsApiSign($noncestr,$time,$url);
    	  if (!$signature) {
    	    return FALSE;
    	  } else {
    		return array('noncestr'=>$noncestr,'signature'=>$signature,'timestamp'=>$time,'appId'=>C("WEIXIN_APPID"));
    	  }
    	} else {
    	  return FALSE;
    	}
      }
    
    展开分享
    服务
    案例
    首页
    动态
    联系
    咨询