由于没有持续关注微信公众平台相关的开发,所以看到这个东西时,都没有耐心看完开发文档,或者不知道重点。

重点在哪呢?重点在示例代码:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E9.99.84.E5.BD.956-DEMO.E9.A1.B5.E9.9D.A2.E5.92.8C.E7.A4.BA.E4.BE.8B.E4.BB.A3.E7.A0.81

新版的sdk,变得对开发人员非常友好,直接支持调试模式、回调信息处理等特性。

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

demo

  1. <?php
  2. require_once "jssdk.php";
  3. $jssdk = new JSSDK("yourAppID", "yourAppSecret");
  4. $signPackage = $jssdk->GetSignPackage();
  5. ?>
  6. <!DOCTYPE html>
  7. <html lang="en">
  8. <head>
  9. <meta charset="UTF-8">
  10. <title></title>
  11. </head>
  12. <body>
  13.  
  14. </body>
  15. <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
  16. <script>
  17. /*
  18. * 注意:
  19. * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
  20. * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
  21. * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
  22. *
  23. * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
  24. * 邮箱地址:weixin-open@qq.com
  25. * 邮件主题:【微信JS-SDK反馈】具体问题
  26. * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
  27. */
  28. wx.config({
  29. debug: true,
  30. appId: '<?php echo $signPackage["appId"];?>',
  31. timestamp: <?php echo $signPackage["timestamp"];?>,
  32. nonceStr: '<?php echo $signPackage["nonceStr"];?>',
  33. signature: '<?php echo $signPackage["signature"];?>',
  34. jsApiList: [
  35. // 所有要调用的 API 都要加到这个列表中
  36. ]
  37. });
  38. wx.ready(function () {
  39. // 在这里调用 API
  40. });
  41. </script>
  42. </html>
 
 

最新微信公众平台js sdk整合PHP版的更多相关文章

  1. 微信公众平台Js API(WeixinApi)

    微信公众平台Js API(WeixinApi): https://github.com/zxlie/WeixinApi#user-content-3%E9%9A%90%E8%97%8F%E5%BA%9 ...

  2. 微信公众平台C# SDK:Senparc.Weixin.MP.dll

    https://github.com/Senparc/WeiXinMPSDK [转] http://www.cnblogs.com/szw/archive/2013/01/13/senparc-wei ...

  3. David Camp 微信公众平台开发官方内容拓展版---PHP版本

    微信公众平台开发(一) 配置接口 微信公众平台开发(二) 微信公众平台示例代码分析 微信公众平台开发(三) 订阅事件(subscribe)处理 微信公众平台开发(四) 简单回复功能开发 微信公众平台开 ...

  4. 利用微信公众平台实现自动回复消息—java版

    最近公司需要拿微信公众平台做个东西,所以就开始了最基本学习,网上很多是php版的,对于我这个只会java,不会php的就只能在网上找点只言片语来一点一点学习了.不费话了直接贴图看效果(很简单的). 不 ...

  5. 微信公众平台开发教程--方培工作室,PHP语言版本

    准备工作 微信公众平台的注册 介绍如何注册一个微信公众账号. 入门教程 微信公众平台开发入门教程 内容:1.申请SAE作为服务器; 2.启用开发模式; 3.微信公众平台PHP SDK; 4.接收发送消 ...

  6. java版微信公众平台自定义菜单创建代码实现

    微信公众平台自定义菜单创建代码实现—java版 搞了两天的自定义菜单,终于搞定了,现在分享下心得,以便后来者少走弯路...... 好了,先看先微信官方的API 官方写的很详细,但是我看完后很茫然,不知 ...

  7. 微信公众平台自定义菜单创建代码实现—java版

    搞了两天的自定义菜单,终于搞定了,现在分享下心得,以便后来者少走弯路...... 好了,先看先微信官方的API 官方写的很详细,但是我看完后很茫然,不知道你们什么感觉.  我知道是post一个带参数的 ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十一):在小程序中使用 WebSocket (.NET Core)

    本文将介绍如何在 .NET Core 环境下,借助 SignalR 在小程序内使用 WebSocket.关于 WebSocket 和 SignalR 的基础理论知识不在这里展开,已经有足够的参考资料, ...

  9. Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

    要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...

随机推荐

  1. Java面向对象思想解决猜拳问题

    第一个面向对象的程序: 一个控制台猜拳小游戏: 第一步选择角色: 第二部选择剪刀,石头,布,与电脑进行PK: 第三部选择继续或者选择结束; 结束显示比赛的局数,以及各自赢得的分数: 设计思路 分析问题 ...

  2. Javascript隐式转换

    乱想 javascript为什么需要隐式转换?如果没有会出现什么情况? 找了一圈没有看到关于这个的讨论,只好自己研究了,可能不一定正确,自行辨知. 郁闷就是郁闷在好好的,为什么要搞个隐式转换,一般来讲 ...

  3. Atitit Atitit 图像处理之  Oilpaint油画滤镜 水彩画 源码实现

    Atitit Atitit 图像处理之 Oilpaint油画滤镜 水彩画 源码实现 1.1. 具体原理参考1 2. 水彩画滤镜算法如下:1 2.1. 这个其实就是灰度层次降低维度的过程.2 2.2. ...

  4. 敏捷数据科学:用Hadoop创建数据分析应用

    敏捷数据科学:用Hadoop创建数据分析应用(数据分析最佳实践入门敏捷大数据首作分步骤|全流程演示思路.工具与方法) [美]Russell Jurney(拉塞尔·朱尔尼) 著   冯文中 朱洪波 译 ...

  5. 批处理集锦——(4)2>nul和1>nul是什么意思?

    >nul 是屏蔽操作成功显示的信息,但是出错还是会显示(即1>nul) 2>nul 是屏蔽操作失败显示的信息,如果成功依旧显示. >nul 2>nul 就是正确的错误的一 ...

  6. SVN命令模式批量更新多个项目

    使用svn作为版本管理是,在一个仓库下边同时建立多个项目,每天上班都需要一个个更新,为了发挥程序员懒的精神,能让电脑做的,绝不手工操作.作为自动化处理,在windows环境,首先想到了bat Tort ...

  7. 将图片的二进制字节 在HTML页面中显示

    两种方法: 后端的一般处理程序:Imge.ashx using System; using System.Collections.Generic; using System.Linq; using S ...

  8. java session 详解

    原网址:http://blog.sina.com.cn/s/blog_670b6d880101deff.html 一.术语session 在我的经验里,session这个词被滥用的程度大概仅次于tra ...

  9. 后端码农谈前端(CSS篇)第八课:继承与层叠

    一.继承 继承:所谓CSS样式继承,就是子元素应用父元素的规则声明.(由这一特性,可将CSS属性分为可继承属性和非可继承属性.)可继承属性:属性值可由父元素继承给子元素的属性称之为可继承属性. 哪些属 ...

  10. Javascript模块化开发,使用模块化脚本加载工具RequireJS,提高你代码的速度和质量。

    随着前端JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理解代码,也便于维护和测试.模块化是一种非常好的代码组织方式,本文试着对Ja ...