zoukankan      html  css  js  c++  java
  • 微信分享自定义分享链接图文

    1、 绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”(就是发布用的那个域名)

    2、获取access_token和生成签名

     1 <?php
     2 class WXShare {
     3     private $appId;
     4     private $appSecret;
     5 
     6     public function __construct($appId, $appSecret) {
     7         $this->appId = $appId;
     8         $this->appSecret = $appSecret;
     9     }
    10 
    11     public function getSignPackage() {
    12         $jsapiTicket = $this->getJsApiTicket();
    13 
    14         // 注意 URL 一定要动态获取,不能 hardcode.
    15         $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    16         $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    17         //二次分享会带form=,会导致签名错误,所以需要单独处理
    18         $pos = strpos($url,'form=');
    19         if($pos !== false){
    20             $url = substr($url,0,$pos-1);
    21         }
    22 
    23 
    24         $timestamp = time();
    25         $nonceStr = $this->createNonceStr();
    26 
    27         // 这里参数的顺序要按照 key 值 ASCII 码升序排序
    28         $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
    29 
    30         $signature = sha1($string);
    31 
    32         $signPackage = array(
    33             "appId"     => $this->appId,
    34             "nonceStr"  => $nonceStr,
    35             "timestamp" => $timestamp,
    36             "url"       => $url,
    37             "signature" => $signature,
    38             "rawString" => $string
    39         );
    40         return $signPackage;
    41     }
    42 
    43     private function createNonceStr($length = 16) {
    44         $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    45         $str = "";
    46         for ($i = 0; $i < $length; $i++) {
    47             $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    48         }
    49         return $str;
    50     }
    51 
    52     private function getJsApiTicket() {
    53         //将数据存储在redis,防止达到上限
    54         $redis = PublicOperationRedis::getInstance();
    55         if($redis->get($this->appId.":ticket")){
    56             return $redis->get($this->appId.":ticket");
    57         }
    58         $accessToken = $this->getAccessToken();
    59         $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
    60         $res = json_decode($this->httpGet($url));
    61         $ticket = $res->ticket;
    62         if($ticket){
    63             $redis->set($this->appId.":ticket",$ticket,7200);
    64         }
    65         return $ticket;
    66     }
    67 
    68     private function getAccessToken() {
    69         $redis = PublicOperationRedis::getInstance();
    70         if($redis->get($this->appId)){
    71             return $redis->get($this->appId);
    72         }
    73         $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
    74         $res = json_decode($this->httpGet($url));
    75         $access_token = $res->access_token;
    76         if($access_token){
    77             $redis->set($this->appId,$access_token,7200);
    78         }
    79         return $access_token;
    80     }
    81 
    82     private function httpGet($url) {
    83         $curl = curl_init();
    84         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    85         curl_setopt($curl, CURLOPT_TIMEOUT, 500);
    86         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    87         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    88         curl_setopt($curl, CURLOPT_URL, $url);
    89 
    90         $res = curl_exec($curl);
    91         curl_close($curl);
    92 
    93         return $res;
    94     }
    95 }

    3、编写js代码

      

    <script type="text/javascript" src='https://res.wx.qq.com/open/js/jweixin-1.0.0.js'></script>
      <script type="text/javascript">
      wx.config({
        debug: false,
        appId: '{$signPackage["appId"]}',
        timestamp: '{$signPackage["timestamp"]}',
        nonceStr: '{$signPackage["nonceStr"]}',
        signature: '{$signPackage["signature"]}',
        jsApiList: [
            'checkJsApi',
            'onMenuShareTimeline',
            'onMenuShareAppMessage',
            'onMenuShareQQ',
            'onMenuShareWeibo',
            'onMenuShareQZone'
        ]
      });
      </script>
    
    wx.ready(function () {
            //分享到朋友圈
            wx.onMenuShareTimeline({
                title: "title",
                link:'url',
                imgUrl: 'pic', // 分享图标
                success: function () {
                    // 分享成功执行此回调函数
                   // alert('分享成功');
                },
                cancel: function () {
                    //alert('分享失败');
                }
            });
    
            //分享给朋友
            wx.onMenuShareAppMessage({
                title: "title",
                link:'utl',
                desc: "desc",
                imgUrl: "pic", // 分享图标
                trigger: function (res) {
                    // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
                },
                success: function (res) {
                    // 分享成功执行此回调函数
                    //alert('已分享');
                },
                cancel: function (res) {
                    alert('已取消');
                },
                fail: function (res) {
                    //alert(JSON.stringify(res));
                }
            });
        });
    

     

    以上为微信分享图文链接操作方式

  • 相关阅读:
    周末之个人杂想(十三)
    PowerTip of the DaySorting Multiple Properties
    PowerTip of the DayCreate Remoting Solutions
    PowerTip of the DayAdd Help to Your Functions
    PowerTip of the DayAcessing Function Parameters by Type
    PowerTip of the DayReplace Text in Files
    PowerTip of the DayAdding Extra Information
    PowerTip of the DayPrinting Results
    Win7下IIS 7.5配置SSAS(2008)远程访问
    PowerTip of the DayOpening Current Folder in Explorer
  • 原文地址:https://www.cnblogs.com/tm2015/p/7760030.html
Copyright © 2011-2022 走看看