微信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作的文本留言本的例子(一)
Oct 09 PHP
php 求质素(素数) 的实现代码
Apr 12 PHP
利用PHP实现智能文件类型检测的实现代码
Aug 02 PHP
Php连接及读取和写入mysql数据库的常用代码
Aug 11 PHP
php合并数组中相同元素的方法
Nov 13 PHP
PHP往XML中添加节点的方法
Mar 12 PHP
PHP中使用hidef扩展代替define提高性能
Apr 09 PHP
非常经典的PHP文件上传类分享
May 15 PHP
PHP封装的数据库保存session功能类
Jul 11 PHP
基于php实现的验证码小程序
Dec 13 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
Feb 15 PHP
php精度计算的问题解析
Jun 21 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
redis 队列操作的例子(php)
2012/04/12 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
2014/09/24 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
php页面函数设置超时限制的方法
2014/12/01 PHP
PHP身份证校验码计算方法
2016/08/10 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
2016/11/25 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
js获得鼠标的坐标值的方法
2013/03/13 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
2021/01/26 Vue.js
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
Python的组合模式与责任链模式编程示例
2016/02/02 Python
django中send_mail功能实现详解
2018/02/06 Python
Atom的python插件和常用插件说明
2018/07/08 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
Python Selenium库的基本使用教程
2021/01/04 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
超市业务员岗位职责
2013/12/05 职场文书
教学实验楼管理制度
2014/02/01 职场文书
出租房屋协议书
2014/09/14 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书