微信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 相关文章推荐
IIS7.X配置PHP运行环境小结
Jun 09 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
解析php中const与define的应用区别
Jun 18 PHP
php生成短网址示例
May 05 PHP
调试PHP程序的多种方法介绍
Nov 06 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
PHP生成plist数据的方法
Jun 16 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
Oct 25 PHP
postman的安装与使用方法(模拟Get和Post请求)
Aug 06 PHP
laravel 框架执行流程与原理简单分析
Feb 01 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
让PHP以ROOT权限执行系统命令的方法
2011/02/10 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
使用python解析xml成对应的html示例分享
2014/04/02 Python
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
python追加元素到列表的方法
2015/07/28 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
使用Python更换外网IP的方法
2018/07/09 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
详解Python locals()的陷阱
2019/03/26 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
python 实现屏幕录制示例
2019/12/23 Python
Python集合操作方法详解
2020/02/09 Python
python3中数组逆序输出方法
2020/12/01 Python
打印机墨盒:123Inkjets
2017/02/16 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
人事主管岗位职责范本
2013/12/04 职场文书
关于热爱祖国的演讲稿
2014/05/04 职场文书
员工合理化建议书
2014/05/19 职场文书
2015大学生实训报告
2014/11/05 职场文书
停课通知书
2015/04/24 职场文书
Pytorch DataLoader shuffle验证方式
2021/06/02 Python