微信分享我的好友,分享朋友圈需要注意的问题

首先我明确的一点是,要实现微信分享我的好友,分享朋友圈需要两个步骤(1)前端js调用(2)后台参数等设置。

第一部分:前端js调用

    第一部分十分简单,按照微信公众平台的手册去做,就没有问题。

第一步很简单,但是容易忘记。第二步,要看手册最新的js版本,之前网上大部分是1.0.0.js。第三步,这里debug最好先弄成true,开启调试模式,方便测试。

第二部分 后台参数等设置


后台配置主要是获得这四个参数。

1.第一个参数,是随机字符串,可以写死,就是16位,大小写数字都可以有。

2第二个参数,是通过票据接口,获得了,它的前提条件是获取到access_toke。

3第三个参数,时间戳,直接time() 就可以

4第四个参数,是当前页面地址。可以通过全局数组获得,例如PHP,就直接填写,

'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
 
 
 然后把这四个参数填写进字符串
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value

进行sha1加密,并把参数$this->assign到前端页面就可以了。
示例代码如下:
前端页面
<script type="text/javascript">
    wx.config({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: 'wx2ca4b0ef4a3a99c2', // 必填,公众号的唯一标识
        timestamp:"{$timestamp}" , // 必填,生成签名的时间戳
        nonceStr: '{$noncestr}', // 必填,生成签名的随机串
        signature: '{$signature}',// 必填,签名,见附录1
        jsApiList: [
            'onMenuShareTimeline',
            'onMenuShareAppMessage'
        ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    });
    wx.ready(function(){
        // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
        wx.onMenuShareTimeline({
            title: 'tt', // 分享标题
            link: 'http://rbs.shaseng999.com/fenxiang.html', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
            imgUrl: 'https://www.baidu.com/img/bd_logo1.png', // 分享图标
            success: function () { 
                // 用户确认分享后执行的回调函数
            },
            cancel: function () { 
                // 用户取消分享后执行的回调函数
            }
        });
        wx.onMenuShareAppMessage({
            title: 'tt', // 分享标题
            desc: 'dd', // 分享描述
            link: 'http://rbs.shaseng999.com/fenxiang.html', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
            imgUrl: 'https://www.baidu.com/img/bd_logo1.png', // 分享图标
            type: '', // 分享类型,music、video或link,不填默认为link
            dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
            success: function () { 
                // 用户确认分享后执行的回调函数
            },
            cancel: function () { 
                // 用户取消分享后执行的回调函数
            }
        });
    });
    wx.error(function(res){
        // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
    });
</script>
2后台代码
<?php
namespace App\Controller;

use Common\Controller\HomebaseController;

class ShareController extends HomebaseController {
    public function index(){
      $ticket=$this->get_ticket();
      $timestamp=time();
      $noncestr=$this->get_code();
      $url="http://rbs.shaseng999.com/index.php?g=app&m=share&a=index";
      $signature="jsapi_ticket=".$ticket."&noncestr=".$noncestr."×tamp=".$timestamp."&url=".$url;
      $oo=$signature;
      $signature=sha1($signature);
      $this->assign('timestamp',$timestamp);
      $this->assign('noncestr',$noncestr);
      $this->assign('oo',$oo);
      $this->assign('signature',$signature);
      $this->display();
    }
    public function get_ticket(){
      if($_SESSION['ticket_time']>time()&&$_SESSION['ticket']){
        $ticket=$_SESSION['ticket'];
      }else{
        $access_token=$this->get_token();
        $url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi";
        $res = $this->https_request($url);
        $res = json_decode($res, true);
        $_SESSION['ticket']=$res['ticket'];
        $_SESSION['ticket_time']=time()+7000;
        $ticket=$_SESSION['ticket'];
      }
      return $ticket;
      
    }
    public function get_token(){
      $appid='wx2ca4b0ef4a3a99c2';
      $appsecret='f540c03eff6bfd5a2753b763bb0cb05a';
      $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
      $res = $this->https_request($url);
      $res = json_decode($res, true);
      return $res['access_token'];
    }
    public function get_code(){
      $arr=array(
          'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
          'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
          '0','1','2','3','4','5','6','7','8','9'
        );
      $str='';
      for($i=1;$i<=16;$i++){
        $key=rand(0,62);
        $str.=$arr[$key];
      }
      return $str;

    }
// cURL函数简单封装
 public function https_request($url, $data = null)
 {
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
  if (!empty($data)){
   curl_setopt($curl, CURLOPT_POST, 1);
   curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  }
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  $output = curl_exec($curl);
  curl_close($curl);
  return $output;
 } 





}




 
 

 

猜你喜欢

转载自blog.csdn.net/dyfc3sfd3s/article/details/75219397