微信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 图片上传类代码
Jul 17 PHP
PHP函数常用用法小结
Feb 08 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
初步介绍PHP扩展开发经验分享
Sep 06 PHP
php写的AES加密解密类分享
Jun 20 PHP
php实现微信发红包
Dec 05 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
Feb 19 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
May 20 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
laravel异步监控定时调度器实例详解
Jun 21 PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 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
php 定义404页面的实现代码
2012/11/19 PHP
深入分析PHP引用(&amp;)
2014/09/04 PHP
自定义session存储机制避免会话保持问题
2014/10/08 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
用js编写留言板
2020/03/17 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
numpy中索引和切片详解
2017/12/15 Python
Python中单例模式总结
2018/02/20 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
争论的故事教学反思
2014/02/06 职场文书
幼教求职信
2014/03/12 职场文书
公司领导班子四风对照检查材料
2014/09/27 职场文书
对照检查剖析材料
2014/09/30 职场文书
奖学金个人总结
2015/03/04 职场文书
个人收入证明范本
2015/06/12 职场文书
HR必备:超全面的薪酬待遇管理方案!
2019/07/12 职场文书
Python闭包的定义和使用方法
2022/04/11 Python