微信JSSDK分享功能图文实例详解


Posted in PHP onApril 08, 2019

本文实例讲述了微信JSSDK分享功能。分享给大家供大家参考,具体如下:

这里以微信分享到朋友圈,分享给微信好友为例为参考,进行调用测试,想添加其他的功能,自行查看开发人员文档即可

工欲善其事,必先利其器,好好利用下边的帮助工具,都是腾讯给开发人员的工具

1.微信开发者说明文档:点击查看

2.微信WEB开发者工具:

Windows 64位版本:下载地址

Windows 32位版本:下载地址

Mac版本:下载地址

3.微信JSSDK分享sample:点击下载

4.在线DEMO:http://203.195.235.76/jssdk/

微信版本6.0以后,原有的WeixinJSBridge.on('menu:share:timeline', function (argv) {}不再可在以使用,那如何在使用微信的其他功能呢?官方给出了JSSDK的使用,帮助我们解决~

前言:

虽然微信提供了JSSDK,但是这不意味着你可以用自定义的按钮来直接打开微信的分享界面,这套JSSDK只是把微信分享接口的内容定义好了,实际还是需要用户点击右上角的菜单按钮进行主动的分享,用户点开分享界面之后,出现的内容就会是你定义的分享标题、图片和链接

1.JSSDK使用步骤


    • 1.1.1 步骤一:绑定域名
    • 微信JSSDK分享功能图文实例详解

    • 1.1.2 步骤二:引入JS文件
    • 微信JSSDK分享功能图文实例详解

    • 1.1.3 步骤三:通过config接口注入权限验证配置
    • 微信JSSDK分享功能图文实例详解($tpl['appid'] $tpl['appsercret']换成你自己!)
    • 微信JSSDK分享功能图文实例详解

    • 1.1.4 步骤四:通过ready接口处理成功验证
    • 微信JSSDK分享功能图文实例详解

    • 1.1.5 步骤五:通过error接口处理失败验证

微信JSSDK分享功能图文实例详解

2.实测图解


  • 2.1 测试页面:
  • 微信JSSDK分享功能图文实例详解

2.2分享到朋友圈:
微信JSSDK分享功能图文实例详解
微信JSSDK分享功能图文实例详解
微信JSSDK分享功能图文实例详解
微信JSSDK分享功能图文实例详解

2.3分享到朋友圈:

微信JSSDK分享功能图文实例详解 

微信JSSDK分享功能图文实例详解(这个是触发success的效果,配图描述写错了,抱歉)

微信JSSDK分享功能图文实例详解(这个是触发cancel的效果)

微信JSSDK分享功能图文实例详解

2.3调试界面:

微信JSSDK分享功能图文实例详解

3.实测代码样例

后台代码(jssdk.php见后边):

//获取apptoken
	require_once "jssdk.php";
	$jssdk = new JSSDK($appid,$appsecret);//这里填写自己的appid 和secret
	$signPackage = $jssdk->GetSignPackage();
	$this->assign("signPackage",$signPackage);
JS配置代码


<script type="text/javascript" src='http://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: [
  // 所有要调用的 API 都要加到这个列表中
  'checkJsApi',
  'onMenuShareTimeline',
  'onMenuShareAppMessage',
  'onMenuShareQQ',
  'onMenuShareWeibo',
  'onMenuShareQZone'
 ]
 });
 </script>
 <script type="text/javascript" src='http://203.195.235.76/jssdk/js/zepto.min.js'></script>
JS分享代码:


<script type="text/javascript">
  //完成wx.config,执行这里
   wx.ready(function () {
    //分享到朋友圈
    wx.onMenuShareTimeline({
     title: '1111111', // 分享标题
     link:window.location.href,
     imgUrl: "{pigcms:$res['pic']}", // 分享图标
     success: function () {
		 // 分享成功执行此回调函数
     alert('success');
     },
     cancel: function () {
     alert('cancel');
     }
    });

    //分享给朋友
    wx.onMenuShareAppMessage({
     title: '22222', // 分享标题
     desc: '22222',
     link:window.location.href,
     imgUrl: "{pigcms:$res['pic']}", // 分享图标
     trigger: function (res) {
      // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
     },
     success: function (res) {
		  // 分享成功执行此回调函数
      alert('已分享');
     },
     cancel: function (res) {
      alert('已取消');
     },
     fail: function (res) {
      alert(JSON.stringify(res));
     }
    });
   });

</script>
JSSDK类
jssdk.php


<?php
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×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() {
 
  $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;
  
 return $ticket;
 }

 private function getAccessToken() {
 // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
 // 如果是企业号用以下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;
  
 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;
 }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP脚本的10个技巧(1)
Oct 09 PHP
开发大型 PHP 项目的方法
Jan 02 PHP
php分页示例代码
Mar 19 PHP
php 分库分表hash算法
Nov 12 PHP
用PHP编写和读取XML的几种方式
Jan 12 PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 PHP
php使用MySQL保存session会话的方法
Jun 18 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
Nov 05 PHP
MAC下通过改apache配置文件切换php多版本的方法
Apr 26 PHP
laravel如何开启跨域功能示例详解
Aug 31 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
Aug 16 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 15 PHP
ThinkPHP框架实现FTP图片上传功能示例
Apr 08 #PHP
详解php命令注入攻击
Apr 06 #PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 #PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 #PHP
PHP7匿名类的用法示例
Apr 05 #PHP
实例说明js脚本语言和php脚本语言的区别
Apr 04 #PHP
PHP中quotemeta()函数的用法讲解
Apr 04 #PHP
You might like
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
德劲1104的电路分析与改良
2021/03/01 无线电
php简单的会话类代码
2011/08/08 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
JS中Array数组学习总结
2017/01/18 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
Vue触发式全局组件构建的方法
2018/11/28 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
flask-restful使用总结
2018/12/04 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
python orm 框架中sqlalchemy用法实例详解
2020/02/02 Python
浅析python标准库中的glob
2020/03/13 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
国家励志奖学金获奖感言
2014/01/09 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
家庭教育的心得体会
2014/09/01 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
男方家长婚礼致辞
2015/07/27 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
Python使用DFA算法过滤内容敏感词
2022/04/22 Python