微信官方jssdk Demo -php版

已经经过修订,解决了https验证出错的问题,解决方案:跳过验证。

tp5下的开发

控制器:Lists.php

文件如下:

 1 <?php
 2
 3 namespace app\home\controller;
 4
 5 use think\Controller;
 6
 7 use app\home\model\Jssdk as Jsdk;
 8 Class Lists extends Base
 9 {
10    public function lists()
11    {
12      //$jssdk = new JSSDK("yourAppID", "yourAppSecret");
13      $jssdk = new Jsdk("XXXX", "XXXXXX");
14      $cateres = $jssdk->GetSignPackage();
15      return  var_dump( $cateres);
16      exit;
17      $this->assign(‘cateres‘,$cateres);
18
19      return $this->fetch(‘mendianinfo‘);
20    }
21    public function mendianinfo()
22    {
23      return $this->fetch();
24    }
25
26 }

jsdk核心文件

Jsdk.php
  1 <?php
  2 namespace app\home\model;
  3
  4 use think\Model;
  5
  6 class Jssdk extends Model{ //微信官网的jssdk
  7   private $appId;
  8   private $appSecret;
  9
 10   public function __construct($appId, $appSecret) {
 11     $this->appId = $appId;
 12     $this->appSecret = $appSecret;
 13   }
 14
 15   public function getSignPackage() {
 16     $jsapiTicket = $this->getJsApiTicket();
 17
 18     // 注意 URL 一定要动态获取,不能 hardcode.
 19     $protocol = (!empty($_SERVER[‘HTTPS‘]) && $_SERVER[‘HTTPS‘] !== ‘off‘ || $_SERVER[‘SERVER_PORT‘] == 443) ? "https://" : "http://";
 20     $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
 21
 22     $timestamp = time();
 23     $nonceStr = $this->createNonceStr();
 24
 25     // 这里参数的顺序要按照 key 值 ASCII 码升序排序
 26     $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
 27
 28     $signature = sha1($string);
 29
 30     $signPackage = array(
 31       "appId"     => $this->appId,
 32       "nonceStr"  => $nonceStr,
 33       "timestamp" => $timestamp,
 34       "url"       => $url,
 35       "signature" => $signature,
 36       "rawString" => $string
 37     );
 38     return $signPackage;
 39   }
 40
 41   private function createNonceStr($length = 16) {
 42     $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 43     $str = "";
 44     for ($i = 0; $i < $length; $i++) {
 45       $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
 46     }
 47     return $str;
 48   }
 49
 50   private function getJsApiTicket() {
 51     // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
 52     $data = json_decode($this->get_php_file("jsapi_ticket.php"));
 53     if ($data->expire_time < time()) {
 54       $accessToken = $this->getAccessToken();
 55       // 如果是企业号用以下 URL 获取 ticket
 56       // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
 57       $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
 58       $res = json_decode($this->httpGet($url));
 59       $ticket = $res->ticket;
 60       if ($ticket) {
 61         $data->expire_time = time() + 7000;
 62         $data->jsapi_ticket = $ticket;
 63         $this->set_php_file("jsapi_ticket.php", json_encode($data));
 64       }
 65     } else {
 66       $ticket = $data->jsapi_ticket;
 67     }
 68
 69     return $ticket;
 70   }
 71
 72   private function getAccessToken() {
 73     // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
 74     $data = json_decode($this->get_php_file("access_token.php"));
 75     if ($data->expire_time < time()) {
 76       // 如果是企业号用以下URL获取access_token
 77       // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
 78       $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
 79       $res = json_decode($this->httpGet($url));
 80       $access_token = $res->access_token;
 81       if ($access_token) {
 82         $data->expire_time = time() + 7000;
 83         $data->access_token = $access_token;
 84         $this->set_php_file("access_token.php", json_encode($data));
 85       }
 86     } else {
 87       $access_token = $data->access_token;
 88     }
 89     return $access_token;
 90   }
 91
 92   private function httpGet($url) {//https不是必需的
 93     $curl = curl_init();
 94     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
 95     curl_setopt($curl, CURLOPT_TIMEOUT, 500);
 96     // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
 97     // 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
 98     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//同时关闭这2项
 99     curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//同时关闭这2项即可跳过https验证
100     curl_setopt($curl, CURLOPT_URL, $url);
101     $res = curl_exec($curl);
102     curl_close($curl);
103     return $res;
104   }
135   private function get_php_file($filename) {
136       $filename="E:\phpStudy\WWW\web1\wexin\application\home\model\\".$filename;//反斜杠需要转义
137       var_dump($filename);
138     return trim(substr(file_get_contents($filename), 15));
139   }
140   private function set_php_file($filename, $content) {
141     $filename="E:\phpStudy\WWW\web1\wexin\application\home\model\\".$filename;//反斜杠需要转义
142     $fp = fopen($filename, "w");
143     fwrite($fp, "<?php exit();?>" . $content);
144     fclose($fp);
145   }
146 }

lists.html文件

改文件是我自己更改的,主要看js是怎么引入的,不用在意我的html内容,部分js经过修改,我会标出。

  1 <!DOCTYPE html>
  2 <html lang="zh-cmn-Hans">
  3     <head>
  4         <meta charset="UTF-8">
  5         <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
  6         <title>门店列表 <?php echo  $_SESSION[‘openid‘] ;?> </title>
  7         <link rel="stylesheet" href="__PUBLIC__home/css/weui.css"/>
  8         <link rel="stylesheet" href="__PUBLIC__home/css/example.css"/>
  9         <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
 10         <style type="text/css">
 11             body{
 12                 background: #f1f0f6;
 13             }
 14             .weui-cell{
 15                 background: #fff;
 16                 margin-top: 1%;
 17                 border-bottom: 1px #e4e4e4 solid;
 18                 border-top: 1px #e4e4e4 solid;
 19                 padding: 20px 15px;
 20             }
 21             .icon-money img{
 22                 width: 15px;
 23                 position: relative;
 24                 top: 1px;
 25                 left: 10px;
 26             }
 27             .right{
 28                 border-left: 1px #e4e4e4 solid;
 29                 padding-left:5% ;
 30             }
 31             .right img{
 32                 width: 18px;
 33                 margin: 0 28%;
 34             }
 35             .right span{
 36                 display: block;
 37                 font-size: 12px;
 38                 width: 48px;
 39                 text-align: center;
 40                 border: 1px #e4e4e4 solid;
 41                 background: #f1f1f1;
 42                 border-radius: 4px;
 43                 color: #737373;
 44             }
 45         </style>
 46     </head>
 47     <body ontouchstart>
 48         <ul>
 49             <a href="{:url(‘home/Lists/mendianinfo‘)}">
 50                 <li class="weui-cell">
 51                     <div class="weui-cell__hd" style="position: relative;margin-right: 10px;">
 52                         <img src="__PUBLIC__home/images/index/icon.png" style="width: 72px;display: block">
 53                     </div>
 54                     <div class="weui-cell__bd">
 55                         <p style="margin-bottom: 10px;color: #888;"><span>服务石化</span><i class="icon-money"><img src="__PUBLIC__home/images/index/price.png"/></i></p>
 56                         <p style="font-size: 13px;color: #888888;">河南省 郑州市 金水区</p>
 57                         <p style="font-size: 13px;color: #888888;">地址:东风南路</p>
 58                     </div>
 59                     <div class="right">
 60                         <img src="__PUBLIC__home/images/index/sate.png" alt="" />
 61                         <span>123m</span>
 62                     </div>
 63                 </li>
 64             </a>
 65             <a href="{:url(‘home/Lists/mendianinfo‘)}">
 66                 <li class="weui-cell">
 67                     <div class="weui-cell__hd" style="position: relative;margin-right: 10px;">
 68                         <img src="__PUBLIC__home/images/index/icon.png" style="width: 72px;display: block">
 69                     </div>
 70                     <div class="weui-cell__bd">
 71                         <p style="margin-bottom: 10px;color: #888;"><span>服务石化</span><i class="icon-money"><img src="__PUBLIC__home/images/index/price.png"/></i></p>
 72                         <p style="font-size: 13px;color: #888888;">河南省 郑州市 金水区</p>
 73                         <p style="font-size: 13px;color: #888888;">地址:东风南路</p>
 74                     </div>
 75                     <div class="right">
 76                         <img src="__PUBLIC__home/images/index/sate.png" alt="" />
 77                         <span>123m</span>
 78                     </div>
 79                 </li>
 80             </a>
 81             <a href="{:url(‘home/Lists/mendianinfo‘)}">
 82                 <li class="weui-cell">
 83                     <div class="weui-cell__hd" style="position: relative;margin-right: 10px;">
 84                         <img src="__PUBLIC__home/images/index/icon.png" style="width: 72px;display: block">
 85                     </div>
 86                     <div class="weui-cell__bd">
 87                         <p style="margin-bottom: 10px;color: #888;"><span>服务石化</span><i class="icon-money"><img src="__PUBLIC__home/images/index/price.png"/></i></p>
 88                         <p style="font-size: 13px;color: #888888;">河南省 郑州市 金水区</p>
 89                         <p style="font-size: 13px;color: #888888;">地址:东风南路</p>
 90                     </div>
 91                     <div class="right">
 92                         <img src="__PUBLIC__home/images/index/sate.png" alt="" />
 93                         <span>123m</span>
 94                     </div>
 95                 </li>
 96             </a>
 97         </ul>
 98
 99     </body>
100 <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
101 <script>
102   /*
103    * 注意:
104    * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
105    * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
106    * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
107    *
108    * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
109    * 邮箱地址:[email protected]
110    * 邮件主题:【微信JS-SDK反馈】具体问题
111    * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
112    */
113   wx.config({        //这里要以次填写自己的配置信息
114     debug: true,
115       appId: "  ",
116       timestamp: " ",
117       nonceStr: ‘ ‘,
118       signature: ‘ ‘,
119     jsApiList: [
120       // 所有要调用的 API 都要加到这个列表中
121         ‘checkJsApi‘,
122         ‘onMenuShareTimeline‘,
123         ‘onMenuShareAppMessage‘,
124         ‘onMenuShareQQ‘,
125         ‘onMenuShareWeibo‘,
126         ‘onMenuShareQZone‘,
127         ‘hideMenuItems‘,
128         ‘showMenuItems‘,
129         ‘hideAllNonBaseMenuItem‘,
130         ‘showAllNonBaseMenuItem‘,
131         ‘translateVoice‘,
132         ‘startRecord‘,
133         ‘stopRecord‘,
134         ‘onVoiceRecordEnd‘,
135         ‘playVoice‘,
136         ‘onVoicePlayEnd‘,
137         ‘pauseVoice‘,
138         ‘stopVoice‘,
139         ‘uploadVoice‘,
140         ‘downloadVoice‘,
141         ‘chooseImage‘,
142         ‘previewImage‘,
143         ‘uploadImage‘,
144         ‘downloadImage‘,
145         ‘getNetworkType‘,
146         ‘openLocation‘,
147         ‘getLocation‘,
148         ‘hideOptionMenu‘,
149         ‘showOptionMenu‘,
150         ‘closeWindow‘,
151         ‘scanQRCode‘,
152         ‘chooseWXPay‘,
153         ‘openProductSpecificView‘,
154         ‘addCard‘,
155         ‘chooseCard‘,
156         ‘openCard‘
157     ]
158   });
159   wx.ready(function () {
160     // 在这里调用 API
161     document.querySelector(‘#checkJsApi‘).onclick = function () {
162     wx.checkJsApi({
163       jsApiList: [
164         ‘getNetworkType‘,
165         ‘previewImage‘
166       ],
167       success: function (res) {
168         alert(JSON.stringify(res));
169       }
170     });
171
172   });
173 </script>
174 </html>

还有2个文件用来保存access_token和jsapi_ticket。

以上是基于tp5进行的php微信开发,有疑问可以打赏后联系我!

 
 
时间: 2024-10-12 11:43:04

微信官方jssdk Demo -php版的相关文章

微信公开课发布微信官方教程:教你用好微信JS-SDK接口

微信公众平台开放JS-SDK(微信内网页开发工具包),说明文档已经有相关使用方法和示例了,很多同学觉得不是很直观,为此微信公开课发布微信官方教程:教你用好微信JS-SDK接口. 1.分享类接口:支持获取“分享到朋友圈”.“发送给朋友”.“分享到QQ”和“分享到微博”按钮的用户点击状态,同时支持自定义分享内容. 小编解读:说起分享接口应用,最常见的莫过于公众号文章分享.通过分享按钮,用户可以将自己喜欢的文章分享给微信好友,也可分享到微信朋友圈.通过此次开放的分享接口,开发者获得了新的能力:可以在用

微信JS SDK Demo 官方案例

转自:http://my.oschina.net/superkangning/blog/367484 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫.卡券.支付等微信特有的能力,为微信用户提供更优质的网页体验. 此文档面向网页开发者介绍微信JS-SDK如何使用及相关注意事项. 一:html代码部分 ? 1 2 3 4 5 6 7 8 9

微信JS SDK Demo 官方案例[转]

摘要: 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫.卡券.支付等微信特有的能力,为微信用户提供更优质的网页体验. 此文档面向网页开发者介绍微信JS-SDK如何使用及相关注意事项. 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.

微信公众平台:微信JS-SDK Demo

ylbtech-微信公众平台:微信JS-SDK Demo 1. HTML返回顶部 1.demo.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>微信JS-SDK Demo</title> <meta name="viewport" content="width=device-width, initi

【Unity】微信支付官方安卓Demo的使用问题

Unity3d使用微信支付是属于APP内发起支付调用的情况,其本质上是在安卓项目上使用微信SDK,安卓项目开发完成后再导入到Unity中作为Unity插件使用,即Unity中C#调用安卓(Java)代码的流程. 微信官方给出的支付Demo在这里,但是使用过程中遇到很多坑,网上类似的文章很多,但大多年代久远,不清楚其他人做安卓微信支付是否也是踩着这些坑过来的,总之记录下来方便以后再遇到. 首先,该Demo居然是个远古时代的Eclipse(基于ADT插件)的安卓项目!你可以选择下载Eclipse和A

「小程序JAVA实战」运行微信官方demo(四)

转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-04/ 微信官方小程序的demo 介绍 https://mp.weixin.qq.com/cgi-bin/wx pc端下载源码 https://developers.weixin.qq.com/miniprogram/dev/demo.html?t=1477656485442 微信端的二维码 手机微信打开-右上角扫一扫–扫下面的官网二维码实例 PC端项目源码导入 新建项目 2.导入项目 项目名称填

微信JS SDK Demo使用说明

微信JS-SDK 分享到朋友圈 分享给朋友 分享到QQ 拍照或从手机相册中选图 识别音频并返回识别结果 使用微信内置地图查看位置 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>微信JS-SDK Demo</title> <meta name="viewport" content="width=device-

微信JS SDK Demo

微信JS-SDK 分享到朋友圈 分享给朋友 分享到QQ 拍照或从手机相册中选图 识别音频并返回识别结果 使用微信内置地图查看位置原文:http://www.cnblogs.com/txw1958/p/weixin-js-sdk-demo.html 一.JS部分 wx.ready(function () { // 1 判断当前版本是否支持指定 JS 接口,支持批量判断 document.querySelector('#checkJsApi').onclick = function () { wx.

【微信官方活动】微信建站套餐限量抢购全场1元(16-22号)

早上接收到微信弹窗消息,微信建站套餐限量抢购,全场1元,活动时间6月16日-6月22日,有需要的朋友赶紧去抢吧,留下您的联系方式发链接给你 本次微信建站套餐有微房产.微官网(企业版).微电商.手淘微餐饮.微时尚.微餐饮.微官网.微餐厅单店自主版,价格从原来98元到598元不等的价位统统1元/月就可以拿下了,赶紧行动吧 [微信官方活动]微信建站套餐限量抢购全场1元(16-22号),布布扣,bubuko.com