分享功能校验未通过 微信开发
2018-06-20 10:47:31 zhao_teng 阅读数 484

内嵌在微信中的网页,右上角都会有一个默认的分享功能。如下图所示,第一个为自定义的效果,第二个为默认的效果。实现了自定义的分享链接是不是更让人有点击的欲望?下面讲解下开发的过程。

一:准备设置js 借口安全域名:

这需要使用微信的jssdk,先需要在微信公众号后台进行设置:公众号设置-->功能设置-->JS接口安全域名。

二:前端配置

首先在前端页面引入jssdk 的js 文件

 

[html] view plain copy

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

然后进行前端配置:

 

[html] view plain copy

  1. <span style="font-family:Georgia, 'Times New Roman', Times, sans-serif;color:#333333;">  wx.config({  
  2.      debug: true,//调试模式  
  3.     appId: '<?php echo $signPackage["appId"];?>',// </span><span style="font-family:Georgia, 'Times New Roman', Times, sans-serif;color:#333333;">  
  4.     timestamp: <?php echo $signPackage["timestamp"];?>,//生成签名的时间戳  
  5.     nonceStr: '<?php echo $signPackage["nonceStr"];?>',//生成签名的随机串  
  6.     signature: '<?php echo $signPackage["signature"];?>',  
  7.      
  8.     jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline']// 所有要调用的 API 都要加到这个列表中  
  9.   });  
  10.          wx.ready(function() {   
  11.             wx.onMenuShareAppMessage({ //分享给朋友  
  12.                 title: '体验更有温度的日本', // 分享标题,可在控制器端传递  
  13.                 desc: '非常舒适的旅途',//分享的描述,可在控制器端传递  
  14.                     
  15.                 link: 'URL', // 分享链接,可在控制器端传递   
  16.                 imgUrl: 'URL', // 分享图标 ,可在控制器端传递  
  17.                 success: function() {   
  18.                     // 用户确认分享后执行的回调函数   
  19.                 },   
  20.                 cancel: function() {   
  21.                     // 用户取消分享后执行的回调函数   
  22.                 }   
  23.             });   
  24.   
  25.             wx.onMenuShareTimeline({ //分享到朋友圈  
  26.                 title: '体验更有温度的日本',   
  27.                 desc: '分享的描述',  
  28.                   
  29.                 link: 'url', // 分享链接   
  30.                 imgUrl: 'url', // 分享图标   
  31.                 success: function() {   
  32.                     // 用户确认分享后执行的回调函数   
  33.                 },   
  34.                 cancel: function() {   
  35.                     // 用户取消分享后执行的回调函数   
  36.                 }   
  37.             });   
  38.         });   
  39.    
  40.     </script></span>  

三 后端php 代码:jssdk.php 可以从此处下载

jssdk-php.zip

[html] view plain copy

  1. <?php  
  2. namespace Home\Controller;  
  3. use Think\Controller;  
  4. class IndexController extends Controller {  
  5.     public function index(){  
  6.         
  7.       //分享朋友圈  
  8.       $jssdk = new JSSDK("你的自己的appid", "你自己的appsecret");  
  9.       $signPackage = $jssdk->GetSignPackage();  
  10.       $this->assign('signPackage',$signPackage);  
  11.        
  12.        $this->display();  
  13.     }  
  14.      
  15.  class JSSDK {  
  16.     private $appId;  
  17.     private $appSecret;  
  18.     public function __construct($appId, $appSecret) {  
  19.       $this->appId = $appId;  
  20.       $this->appSecret = $appSecret;  
  21.     }  
  22.     public function getSignPackage() {  
  23.       $jsapiTicket = $this->getJsApiTicket();  
  24.       $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";  
  25.       $timestamp = time();  
  26.       $nonceStr = $this->createNonceStr();  
  27.       // 这里参数的顺序要按照 key 值 ASCII 码升序排序  
  28.       $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";  
  29.       $signature = sha1($string);  
  30.       $signPackage = array(  
  31.         "appId"     => $this->appId,  
  32.         "nonceStr"  => $nonceStr,  
  33.         "timestamp" => $timestamp,  
  34.         "url"       => $url,  
  35.         "signature" => $signature,  
  36.         "rawString" => $string  
  37.       );  
  38.       return $signPackage;   
  39.     }  
  40.     private function createNonceStr($length = 16) {  
  41.       $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  
  42.       $str = "";  
  43.       for ($i = 0; $i < $length; $i++) {  
  44.         $str .substr($chars, mt_rand(0, strlen($chars) - 1), 1);  
  45.       }  
  46.       return $str;  
  47.     }  
  48.     private function getJsApiTicket() {  
  49.       // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例  
  50.       $data = json_decode(file_get_contents("jsapi_ticket.json"));  
  51.       if ($data->expire_time < time()) {  
  52.         $accessToken = $this->getAccessToken();  
  53.         $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";  
  54.         $res = json_decode($this->httpGet($url));  
  55.         $ticket = $res->ticket;  
  56.         if ($ticket) {  
  57.           $data->expire_time = time() + 7000;  
  58.           $data->jsapi_ticket = $ticket;  
  59.           $fp = fopen("jsapi_ticket.json", "w");  
  60.           fwrite($fp, json_encode($data));  
  61.           fclose($fp);  
  62.         }  
  63.       } else {  
  64.         $ticket = $data->jsapi_ticket;  
  65.       }  
  66.       return $ticket;  
  67.     }  
  68.     private function getAccessToken() {  
  69.       // access_token 应该全局存储与更新,以下代码以写入到文件中做示例  
  70.       $data = json_decode(file_get_contents("access_token.json"));  
  71.       if ($data->expire_time < time()) {  
  72.         $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";  
  73.         $res = json_decode($this->httpGet($url));  
  74.         $access_token = $res->access_token;  
  75.         if ($access_token) {  
  76.           $data->expire_time = time() + 7000;  
  77.           $data->access_token = $access_token;  
  78.           $fp = fopen("access_token.json", "w");  
  79.           fwrite($fp, json_encode($data));  
  80.           fclose($fp);  
  81.         }  
  82.       } else {  
  83.         $access_token = $data->access_token;  
  84.       }  
  85.       return $access_token;  
  86.     }  
  87.     private function httpGet($url) {  
  88.       $curl = curl_init();  
  89.       curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  
  90.       curl_setopt($curl, CURLOPT_TIMEOUT, 500);  
  91.       curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);  
  92.       curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);  
  93.       curl_setopt($curl, CURLOPT_URL, $url);  
  94.       $res = curl_exec($curl);  
  95.       curl_close($curl);  
  96.       return $res;  
  97.     }  
  98. }  

 

easy吧

分享功能校验未通过 微信开发 相关内容

2017-06-24 17:21:11 sh13523149003 阅读数 12090

内嵌在微信中的网页,右上角都会有一个默认的分享功能。如下图所示,第一个为自定义的效果,第二个为默认的效果。实现了自定义的分享链接是不是更让人有点击的欲望?下面讲解下开发的过程。

 

 

一:准备设置js 借口安全域名:

这需要使用微信的jssdk,先需要在微信公众号后台进行设置:公众号设置-->功能设置-->JS接口安全域名。

二:前端配置

首先在前端页面引入jssdk 的js 文件

 

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

然后进行前端配置:

 

 

  wx.config({
     debug: true,//调试模式
    appId: '<?php echo $signPackage["appId"];?>',// 
    timestamp: <?php echo $signPackage["timestamp"];?>,//生成签名的时间戳
    nonceStr: '<?php echo $signPackage["nonceStr"];?>',//生成签名的随机串
    signature: '<?php echo $signPackage["signature"];?>',
   
    jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline']// 所有要调用的 API 都要加到这个列表中
  });
         wx.ready(function() { 
            wx.onMenuShareAppMessage({ //分享给朋友
                title: 'aa', // 分享标题,可在控制器端传递
                desc: '非常舒适',//分享的描述,可在控制器端传递
                  
                link: 'URL', // 分享链接,可在控制器端传递 
                imgUrl: 'URL', // 分享图标 ,可在控制器端传递
                success: function() { 
                    // 用户确认分享后执行的回调函数 
                }, 
                cancel: function() { 
                    // 用户取消分享后执行的回调函数 
                } 
            }); 

            wx.onMenuShareTimeline({ //分享到朋友圈
                title: '分享的标题', 
                desc: '分享的描述',
                
                link: 'url', // 分享链接 
                imgUrl: 'url', // 分享图标 
                success: function() { 
                    // 用户确认分享后执行的回调函数 
                }, 
                cancel: function() { 
                    // 用户取消分享后执行的回调函数 
                } 
            }); 
        }); 
 
    </script>
    timestamp: <?php echo $signPackage["timestamp"];?>,//生成签名的时间戳
    nonceStr: '<?php echo $signPackage["nonceStr"];?>',//生成签名的随机串
    signature: '<?php echo $signPackage["signature"];?>',
   
    jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline']// 所有要调用的 API 都要加到这个列表中
  });
         wx.ready(function() { 
            wx.onMenuShareAppMessage({ //分享给朋友
                title: '分享标题', // 分享标题,可在控制器端传递
                desc: '分享描述',//分享的描述,可在控制器端传递
                  
                link: 'URL', // 分享链接,可在控制器端传递 
                imgUrl: 'URL', // 分享图标 ,可在控制器端传递
                success: function() { 
                    // 用户确认分享后执行的回调函数 
                }, 
                cancel: function() { 
                    // 用户取消分享后执行的回调函数 
                } 
            }); 

            wx.onMenuShareTimeline({ //分享到朋友圈
                title: '分享标题', 
                desc: '分享的描述',
                
                link: 'url', // 分享链接 
                imgUrl: 'url', // 分享图标 
                success: function() { 
                    // 用户确认分享后执行的回调函数 
                }, 
                cancel: function() { 
                    // 用户取消分享后执行的回调函数 
                } 
            }); 
        }); 
 
    </script>

三 后端php 代码:jssdk.php 可以从此处下载

 

jssdk-php.zip

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index(){
      
      //分享朋友圈
      $jssdk = new JSSDK("你的自己的appid", "你自己的appsecret");
      $signPackage = $jssdk->GetSignPackage();
      $this->assign('signPackage',$signPackage);
     
       $this->display();
    }
   
 class JSSDK {
    private $appId;
    private $appSecret;
    public function __construct($appId, $appSecret) {
      $this->appId = $appId;
      $this->appSecret = $appSecret;
    }
    public function getSignPackage() {
      $jsapiTicket = $this->getJsApiTicket();
      $url = "http://$_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 = "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 = "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;
    }
}

 

easy吧

 

 


 

 

 

分享功能校验未通过 微信开发 相关内容

2019-04-21 20:51:08 qq_35505932 阅读数 111

分享功能校验未通过 微信开发 相关内容

2019-07-01 13:52:17 qq_28404381 阅读数 19

转载自: https://blog.csdn.net/sh13523149003/article/details/73692699

一:准备设置js 借口安全域名:

这需要使用微信的jssdk,先需要在微信公众号后台进行设置:公众号设置–>功能设置–>JS接口安全域名。
在这里插入图片描述

二:前端配置

首先在前端页面引入jssdk 的js 文件

然后进行前端配置:

  wx.config({
     debug: true,//调试模式
    appId: '<?php echo $signPackage["appId"];?>',// 
    timestamp: <?php echo $signPackage["timestamp"];?>,//生成签名的时间戳
    nonceStr: '<?php echo $signPackage["nonceStr"];?>',//生成签名的随机串
    signature: '<?php echo $signPackage["signature"];?>',
   
    jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline']// 所有要调用的 API 都要加到这个列表中
  });
         wx.ready(function() { 
            wx.onMenuShareAppMessage({ //分享给朋友
                title: 'aa', // 分享标题,可在控制器端传递
                desc: '非常舒适',//分享的描述,可在控制器端传递
                  
                link: 'URL', // 分享链接,可在控制器端传递 
                imgUrl: 'URL', // 分享图标 ,可在控制器端传递
                success: function() { 
                    // 用户确认分享后执行的回调函数 
                }, 
                cancel: function() { 
                    // 用户取消分享后执行的回调函数 
                } 
            }); 
 
            wx.onMenuShareTimeline({ //分享到朋友圈
                title: '分享的标题', 
                desc: '分享的描述',
                
                link: 'url', // 分享链接 
                imgUrl: 'url', // 分享图标 
                success: function() { 
                    // 用户确认分享后执行的回调函数 
                }, 
                cancel: function() { 
                    // 用户取消分享后执行的回调函数 
                } 
            }); 
        }); 
 
    </script>

    timestamp: <?php echo $signPackage["timestamp"];?>,//生成签名的时间戳
    nonceStr: '<?php echo $signPackage["nonceStr"];?>',//生成签名的随机串
    signature: '<?php echo $signPackage["signature"];?>',
   
    jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline']// 所有要调用的 API 都要加到这个列表中
  });
         wx.ready(function() { 
            wx.onMenuShareAppMessage({ //分享给朋友
                title: '分享标题', // 分享标题,可在控制器端传递
                desc: '分享描述',//分享的描述,可在控制器端传递
                  
                link: 'URL', // 分享链接,可在控制器端传递 
                imgUrl: 'URL', // 分享图标 ,可在控制器端传递
                success: function() { 
                    // 用户确认分享后执行的回调函数 
                }, 
                cancel: function() { 
                    // 用户取消分享后执行的回调函数 
                } 
            }); 

            wx.onMenuShareTimeline({ //分享到朋友圈
                title: '分享标题', 
                desc: '分享的描述',
                
                link: 'url', // 分享链接 
                imgUrl: 'url', // 分享图标 
                success: function() { 
                    // 用户确认分享后执行的回调函数 
                }, 
                cancel: function() { 
                    // 用户取消分享后执行的回调函数 
                } 
            }); 
        }); 
 
    </script>

三 后端php 代码:

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index(){
      
      //分享朋友圈
      $jssdk = new JSSDK("你的自己的appid", "你自己的appsecret");
      $signPackage = $jssdk->GetSignPackage();
      $this->assign('signPackage',$signPackage);
     
       $this->display();
    }
   
 class JSSDK {
    private $appId;
    private $appSecret;
    public function __construct($appId, $appSecret) {
      $this->appId = $appId;
      $this->appSecret = $appSecret;
    }
    public function getSignPackage() {
      $jsapiTicket = $this->getJsApiTicket();
      $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
      $timestamp = time();
      $nonceStr = $this->createNonceStr();
      // 这里参数的顺序要按照 key 值 ASCII 码升序排序
      // 转载文中,此处有错,需修改,看下方↓
      // $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
      $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 = "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 = "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;
    }
}

对应文件 请下载

jssdk-php.zip

其他的自己调整一下就可以了,
将json文件放置在根目录
在这里插入图片描述

分享功能校验未通过 微信开发 相关内容

2018-06-21 09:23:36 huchangjiang0 阅读数 5406

微信公众号开发绝大部分与移动端开发相同。不过相比移动端,微信浏览器的内核就一种,对兼容性的要求更低一些。

安卓微信浏览器的内核属于魔改版的webkit内核。

ios微信浏览器的内核兼容性处理更接近safari浏览器。

绝大部分兼容性参照谷歌浏览器就行

微信开发中与移动端不同的就是可以借助微信调用很多手机的硬件,通过微信封装的js调用一些微信的接口。

微信分享

微信允许用户将页面分享给其他用户或者朋友圈,或者qq。不过最常用的用户分享功能是分享给朋友与朋友圈。因为大多微信开发都涉及到微信登陆的功能,这导致页面在其他浏览器打不开。

微信分享主要通过微信的jssdk中的分享接口来实现的。微信的jssdk的权限注入我在之前的文章内已经有所讲解,这里就不多说了。

微信在引入js文件并且调用wx.config接口注入权限后,然后通过wx.ready接口去读取接口。主要是因为注入权限为异步的,而wx.ready接口就像wx.config接口的回调函数。

wx.onMenuShareAppMessage({
    title: '', // 分享标题
    desc: '', // 分享描述
    link: '', // 分享链接,该链接域名必须与当前企业的可信域名一致
    imgUrl: '', // 分享图标
    type: '', // 分享类型,music、video或link,不填默认为link
    dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
    success: function () {
        // 用户确认分享后执行的回调函数
    },
    cancel: function () {
        // 用户取消分享后执行的回调函数
    }

})

微信分享给好友的接口为onMenuShareAppMessage。值得一提的是这个定义的是微信点击右上角分享给朋友的功能,微信不允许自定义分享的按钮。这里设置过是单击右上角分享的内容

title是分享的标题

desc描述

link分享打开的链接,在分享给好友后打开会在链接里加一个from参数

在success里面是用户分享成功的回调函数,可以在里面添加一些业务逻辑,比如说分享加积分功能。

cancel是用户取消了分享的回调

wx.onMenuShareTimeline({
    title: '', // 分享标题
    link: '', // 分享链接
    imgUrl: '', // 分享图标
    success: function () {
        // 用户确认分享后执行的回调函数
    },
    cancel: function () {
        // 用户取消分享后执行的回调函数
    }
});
分享到朋友圈的接口跟转发的接口差不多,就是不能分享音频与视频。

分享功能校验未通过 微信开发 相关内容

没有更多推荐了,返回首页