微信jssdk 对PHP安卓版本怎么升级有要求吗

微信JS-SDK Demo
判断当前客户端是否支持指定JS接口
checkJsApi
获取“分享到朋友圈”按钮点击状态及自定义分享内容接口
获取“分享给朋友”按钮点击状态及自定义分享内容接口
onMenuShareAppMessage
获取“分享到QQ”按钮点击状态及自定义分享内容接口
onMenuShareQQ
获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口
onMenuShareWeibo
获取“分享到QZone”按钮点击状态及自定义分享内容接口
onMenuShareQZone
拍照或从手机相册中选图接口
chooseImage
预览图片接口
previewImage
上传图片接口
uploadImage
下载图片接口
downloadImage
开始录音接口
startRecord
停止录音接口
stopRecord
播放语音接口
暂停播放接口
pauseVoice
停止播放接口
上传语音接口
uploadVoice
下载语音接口
downloadVoice
识别音频并返回识别结果接口
translateVoice
设备信息接口
获取网络状态接口
getNetworkType
地理位置接口
使用微信内置地图查看位置接口
openLocation
获取地理位置接口
getLocation
界面操作接口
隐藏右上角菜单接口
hideOptionMenu
显示右上角菜单接口
showOptionMenu
关闭当前网页窗口接口
closeWindow
批量隐藏功能按钮接口
hideMenuItems
批量显示功能按钮接口
showMenuItems
隐藏所有非基础按钮接口
hideAllNonBaseMenuItem
显示所有功能按钮接口
showAllNonBaseMenuItem
微信扫一扫
调起微信扫一扫接口
scanQRCode(微信处理结果)
scanQRCode(直接返回结果)
微信小店接口
跳转微信商品页接口
openProductSpecificView
微信卡券接口
批量添加卡券接口
调起适用于门店的卡券列表并获取用户选择列表
chooseCard
查看微信卡包中的卡券接口
微信支付接口
发起一个微信支付请求
chooseWXPay微信 JSSDK 调用_PHP教程-织梦者
当前位置:&>&&>& > 微信 JSSDK 调用
微信 JSSDK 调用
页面js如下:
&script src=&http://res.wx.qq.com/open/js/jweixin-1.0.0.js&&&/script&
* 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
* 2. 如果发现在
不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
* 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e48dd613f.html
wx.config({
debug: true,
appId: '&?php echo $signPackage[&appId&];?&',
timestamp: &?php echo $signPackage[&timestamp&];?&,
nonceStr: '&?php echo $signPackage[&nonceStr&];?&',
signature: '&?php echo $signPackage[&signature&];?&',
jsApiList: [
'getNetworkType'
// 所有要调用的 API 都要加到这个列表中
wx.ready(function () {
// 在这里调用 API
wx.startSearchBeacons({
complete:function(argv){
//开启查找完成后的回调函数
alert(argv);
wx.onSearchBeacons({
complete:function(argv){
//回调函数,可以数组形式取得该商家注册的在周边的相关设备列表
alert(argv);
wx.error(function(res){
alert(res);
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
wx.checkJsApi({
jsApiList: ['chooseImage'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
success: function(res) {
// 以键值对的形式返回,可用的api值true,不可用为false
// 如:{&checkResult&:{&chooseImage&:true},&errMsg&:&checkJsApi:ok&}
获取参数的代码如下:
class JSSDK {
private $appId;
private $appS
public function __construct($appId, $appSecret) {
$this-&appId = $appId;
$this-&appSecret = $appS
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]&;
//$url = &http://weixin.liketry.com&;
$timestamp = time();
$nonceStr = $this-&createNonceStr();
// 这里参数的顺序要按照 key 值 ASCII 码升序排序
$string = &jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url&;
$signature = sha1($string);
$signPackage = array(
=& $this-&appId,
&nonceStr&
=& $nonceStr,
&timestamp& =& $timestamp,
&signature& =& $signature,
&rawString& =& $string
return $signP
private function createNonceStr($length = 16) {
$chars = &abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&;
$str = &&;
for ($i = 0; $i & $ $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
private function getJsApiTicket() {
// jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode($this-&get_php_file(&jsapi_ticket.php&));
if ($data-&expire_time & time()) {
$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-&
if ($ticket) {
$data-&expire_time = time() + 7000;
$data-&jsapi_ticket = $
$this-&set_php_file(&jsapi_ticket.php&, json_encode($data));
$ticket = $data-&jsapi_
private function getAccessToken() {
// access_token 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode($this-&get_php_file(&access_token.php&));
if ($data-&expire_time & time()) {
// 如果是企业号用以下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_
if ($access_token) {
$data-&expire_time = time() + 7000;
$data-&access_token = $access_
$this-&set_php_file(&access_token.php&, json_encode($data));
$access_token = $data-&access_
return $access_
private function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
// 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//ssl证书校验
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
private function get_php_file($filename) {
return trim(substr(file_get_contents($filename), 15));
private function set_php_file($filename, $content) {
$fp = fopen($filename, &w&);
fwrite($fp, &&?php exit();?&& . $content);
fclose($fp);
以上就是微信 JSSDK 调用的全文介绍,希望对您学习和使用php有所帮助.
这些内容可能对你也有帮助
更多可查看PHP教程列表页。
猜您也会喜欢这些文章阅读 30875
一:准备文件,并将文件置于网站根目录下
&&&&access_token.json
{"access_token":"","expire_time":0}
&&&&jsapi_ticket.json
{"jsapi_ticket":"","expire_time":0}
&&&&jssdk.php
class&JSSDK&{
&&private&$appId;
&&private&$appS
&&public&function&__construct($appId,&$appSecret)&{
&&&&$this-&appId&=&$appId;
&&&&$this-&appSecret&=&$appS
&&public&function&getSignPackage()&{
&&&&$jsapiTicket&=&$this-&getJsApiTicket();
&&&&$url&=&"http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
&&&&$timestamp&=&time();
&&&&$nonceStr&=&$this-&createNonceStr();
&&&&//&这里参数的顺序要按照&key&值&ASCII&码升序排序
&&&&$string&=&"jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
&&&&$signature&=&sha1($string);
&&&&$signPackage&=&array(
&&&&&&"appId"&&&&&=&&$this-&appId,
&&&&&&"nonceStr"&&=&&$nonceStr,
&&&&&&"timestamp"&=&&$timestamp,
&&&&&&"url"&&&&&&&=&&$url,
&&&&&&"signature"&=&&$signature,
&&&&&&"rawString"&=&&$string
&&&&return&$signP&
&&private&function&createNonceStr($length&=&16)&{
&&&&$chars&=&"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
&&&&$str&=&"";
&&&&for&($i&=&0;&$i&&&$&$i++)&{
&&&&&&$str&.=&substr($chars,&mt_rand(0,&strlen($chars)&-&1),&1);
&&&&return&$
&&private&function&getJsApiTicket()&{
&&&&//&jsapi_ticket&应该全局存储与更新,以下代码以写入到文件中做示例
&&&&$data&=&json_decode(file_get_contents("jsapi_ticket.json"));
&&&&if&($data-&expire_time&&&time())&{
&&&&&&$accessToken&=&$this-&getAccessToken();
&&&&&&$url&=&"https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
&&&&&&$res&=&json_decode($this-&httpGet($url));
&&&&&&$ticket&=&$res-&
&&&&&&if&($ticket)&{
&&&&&&&&$data-&expire_time&=&time()&+&7000;
&&&&&&&&$data-&jsapi_ticket&=&$
&&&&&&&&$fp&=&fopen("jsapi_ticket.json",&"w");
&&&&&&&&fwrite($fp,&json_encode($data));
&&&&&&&&fclose($fp);
&&&&}&else&{
&&&&&&$ticket&=&$data-&jsapi_
&&&&return&$
&&private&function&getAccessToken()&{
&&&&//&access_token&应该全局存储与更新,以下代码以写入到文件中做示例
&&&&$data&=&json_decode(file_get_contents("access_token.json"));
&&&&if&($data-&expire_time&&&time())&{
&&&&&&$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_
&&&&&&if&($access_token)&{
&&&&&&&&$data-&expire_time&=&time()&+&7000;
&&&&&&&&$data-&access_token&=&$access_
&&&&&&&&$fp&=&fopen("access_token.json",&"w");
&&&&&&&&fwrite($fp,&json_encode($data));
&&&&&&&&fclose($fp);
&&&&}&else&{
&&&&&&$access_token&=&$data-&access_
&&&&return&$access_
&&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&$
二:编辑显示页面对应的后台PHP文件,添加如下代码
&&&&&&include('jssdk.php');
&&&&&&$jssdk&=&new&JSSDK("APPID",&"APPSECRET");
&&&&&&$signPackage&=&$jssdk-&GetSignPackage();&
&&&&&&$this-&signPackage&=&$signP
请将APPID和APPSECRET换成您自己微信账号的信息
三:编辑显示页面模板html文件,添加如下代码
&script&src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"&&/script&
wx.config({
&&&&appId:&'{suetech:$signPackage.appId}',
&&&&timestamp:&{suetech:$signPackage.timestamp},
&&&&nonceStr:&'{suetech:$signPackage.nonceStr}',
&&&&signature:&'{suetech:$signPackage.signature}',
&&&jsApiList:&[
&&&&&&&&'checkJsApi',
&&&&&&&&'onMenuShareTimeline',
&&&&&&&&'onMenuShareAppMessage',
&&&&&&&&'onMenuShareQQ',
&&&&&&&&'onMenuShareWeibo'
&*&1.&所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
&*&2.&如果发现在&Android&不能分享自定义内容,请到官网下载最新的包覆盖安装,Android&自定义分享接口需升级至&6.0.2.58&版本及以上。
&*&3.&完整&JS-SDK&文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e48dd613f.html
&*&如有问题请通过以下渠道反馈:
&*&邮箱地址:weixin-
&*&邮件主题:【微信JS-SDK反馈】具体问题
&*&邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
wx.ready(function&()&{
&&//&1&判断当前版本是否支持指定&JS&接口,支持批量判断
&&&&wx.checkJsApi({
&&&&&&jsApiList:&[
&&&&&&&&'getNetworkType',
&&&&&&&&'previewImage',
&&&&&&&&&'onMenuShareTimeline',
&&&&&&&&'onMenuShareAppMessage',
&&&&&&&&'onMenuShareQQ',
&&&&&&&&'onMenuShareWeibo'
&&&&&&success:&function&(res)&{
&&&&&&&&alert(JSON.stringify(res));
&&var&shareData&=&{
&&&&title:&'标题',
&&&&&&desc:&'描述',
&&&&&&link:&'链接',
&&&&&&imgUrl:&'图片',
&&&&&&trigger:&function&(res)&{
&&&&&&&&alert('用户点击发送给朋友');
&&&&&&success:&function&(res)&{
&&&&&&&&alert('已分享');
&&&&&&cancel:&function&(res)&{
&&&&&&&&alert('已取消');
&&&&&&fail:&function&(res)&{
&&&&&&&&alert(JSON.stringify(res));
&&wx.onMenuShareAppMessage(shareData);
&&wx.onMenuShareTimeline(shareData);
&&wx.onMenuShareQQ(shareData);
&&wx.onMenuShareWeibo(shareData);
wx.error(function&(res)&{
&&alert(res.errMsg);
到此已经能够正常进行微信自定义分享了
需要注意的地方是在微信公众账号中配置您的域名,设置方法:
登陆微信公众账号-&公众号设置-&功能设置-&JS接口安全域名-&设置
& 著作权归作者所有
人打赏支持
码字总数 58567
html 页面怎么调用?
菜鸟一枚,能再详细点吗,尤其是第二部,放到class外边还是方法内部?suetech这是什么
&{suetech:$signPackage.appId}&这段中的suetech使用方法是TP的特有方式?因为没用过TP,所以不太明白。
引用来自“子弹兄”的评论那天我也试了,确实可以 引用来自“qhorse”的评论我这怎么报错Class 'Home\Controller\JSSDK' not found在jssdk 文件中 加入
然后可以用 use 引入
引用来自“子弹兄”的评论那天我也试了,确实可以 我这怎么报错Class 'Home\Controller\JSSDK' not found
那天我也试了,确实可以
引用来自“子弹兄”的评论貌似有错的吧,TP怎么还能这么做
include(&jssdk.php&);已经应用在实际项目的中的咯,这样用没错的!
貌似有错的吧,TP怎么还能这么做
include(&jssdk.php&);
评论删除后,数据将无法恢复
对于广大零基础的PHP自学者,往往不知道如何系统的学习PHP,导致平白浪费了很多时间。本文将为大家带来最详细的php学习路线图,同时还会附上相应的权威教程,让广大PHP自学者少走许多弯路。 ...
W3Cschool小编
大家都知道在thinkphp里面,我们是通过在控制器里面给模板分配变量,然后在模板里面通过标签的方式来获取变量,假设有一个变量为$name,那么我们在模板里面就应该是通过 {$name}的方式来获取...
thinkphp模型层Model、Logic、Service讲解 时间: 15:54:56 编辑:一切随缘 文章来源:php教程网 已阅读:771 次 js特效源码,就从这里开始 我有疑问【PHP186论坛提问】 jS游戏桌球...
thinkyoung
今天ThinkPHP发布了 TPM ,一个可以把普通的web网站转换成手机app的框架. 介绍在此:http://www.thinkphp.cn/document/395.html 研究了一下原理, 听起来很神奇,其实原理很简单. 其核心是把 tp...
一、前言 简单的描述一下,实习几个原理,思想,其实写很多东西,思想算是最重要的。 1、目标:将写一个无限节点的树形目录结构,如下图 步骤: 1、你的下载 插件 ztree。然后布置在你的项目...
thinkPHP实现瀑布流的方法 文章TAG:thinkphp 瀑布流 过期已备案域名,注册就能用!终身VIP会员,畅享源码下载织梦精美仿站,火热预定中! 本文实例讲述了thinkPHP实现瀑布流的方法。分享给大...
thinkyoung
http://www.poluoluo.com/jzxy/927.html thinkphp使用Ueditor编辑器写入数据库单双引号转义问题 Posted by 萧猫on 十二月 18, 2013 开发备忘/语录 在ThinkPHP中提交表单插入数据的...
┎━ThinkPHP 框架系统目录 ┃ ┝ ThinkPHP.php 系统公共文件 ┃ ┝ Common 公共文件目录 ┃ ┝ Tpl 框架系统模版目录 ┃ ┝ Lang 系统语言包目录 ┃ ┝ PlugIns 公共插件目录 ┃ ┗ Lib 系统...
我们在上一节讲了在 “thinkphp 中如何修改模版标签定界符”, 达到防止与JS混淆的目的。今天接着讲thinkphp的模板引擎,无忧主机(www.51php.com)小编准备今天讲在模板里面输出系统变量和系统...
thinkPHP框架开发的应用程序,一般都采用单一入口的方式,下面是在应用首页文件中实现的定义:1.在首页定义thinkPHP框架路径2.定义项目名称及路径,一般项目名称与项目文件夹名称保持一致3.加...
没有更多内容
加载失败,请刷新页面
有哪些方法 实现服务启动之后,马上执行相关操作? 方式一 :@PostConstruct 对类的要求 无,普通的java bean即可 例如:
* 执行完构造方法之后就会执行该方法
*/@PostConstruc...
一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...
1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...
大不了敲一辈子代码
linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...
单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...
人觉非常君
在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......
https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......
Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...
1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...
Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...
没有更多内容
加载失败,请刷新页面
文章删除后无法恢复,确定取消删除此文章吗?
亲,自荐的博客将通过私信方式通知管理员,优秀的博客文章审核通过后将在博客推荐列表中显示
确定推荐此文章吗?
确定推荐此博主吗?
聚合全网技术文章,根据你的阅读喜好进行个性推荐
指定官方社区
深圳市奥思网络科技有限公司版权所有1添加评论分享收藏感谢收起PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
转载 &更新时间:日 11:07:39 & 作者:牛逼的霍啸林
这篇文章主要介绍了PHP实现微信JS-SDK接口选择相册及拍照并上传的方法,涉及php微信接口的调用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了PHP实现微信JS-SDK接口选择相册及拍照并上传的方法。分享给大家供大家参考,具体如下:
理解:微信上传接口是拍照,或者选择本地照片,上传到微信的服务器,获取到一个id,通过token与这个id获取到图片,保存到服务器即可。
通过微信js接口,调用底层程序。
需要引入js文件,并进行配置。
&script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"&&/script&
wx.config({
debug: false,
appId: 'wxed345d',
timestamp: ,
nonceStr: 'asdfasdfasdf',
signature: 'b74fb4abab7e58faaa4803',
jsApiList: [
'chooseImage',
'uploadImage'
其中appId为微信公众平台id,timestamp为当前时间戳,nonceStr为随机字符串,signature为签名。
signature是最重要参数。需要通过很多步骤来获取。
首先获取access_token,能存活两小时,每天允许获取2000次。超过就不能获取了。
// 获取access_token 两小时有效
private function get_access_token(){
$appid = C('oauth_config.appid');
$appsecret = C('oauth_config.appsecret');
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$
$rurl = file_get_contents($url);
$rurl = json_decode($rurl,true);
if(array_key_exists('errcode',$rurl)){
$access_token = $rurl['access_token'];
return $access_
然后获取jsticket
// 获取jsticket 两小时有效
private function getjsticket(){ // 只允许本类调用,继承的都不可以调用,公开调用就更不可以了
$access_token = $this-&get_access_token();
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi"; // 两小时有效
$rurl = file_get_contents($url);
$rurl = json_decode($rurl,true);
if($rurl['errcode'] != 0){
$jsticket = $rurl['ticket'];
然后获取signature,它是由多个参数拼接加密形成的,有实效性。
// 获取 signature
private function getsignature(){
$noncestr = '';
$jsapi_ticket = $this-&getjsticket();
$timestamp = time();
$url = 'http://zhudianbao.diandodo.com/index.php?g=Opener&m=Merchant&a=open';
$string1 = 'jsapi_ticket='.$jsapi_ticket.'&noncestr='.$noncestr.'&timestamp='.$timestamp.'&url='.$
$signature = sha1($string1);
配置好之后,就可以使用了。我用了两个功能,一个是选择照片,一个是上传照片。
function chooseImage(obj){
// 选择张片
wx.chooseImage({
count: 1, // 默认9
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: function(res) {
var localIds = res.localI // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
$(obj).attr('src', localIds);
// 上传照片
wx.uploadImage({
localId: '' + localIds,
isShowProgressTips: 1,
success: function(res) {
serverId = res.serverId;
$(obj).next().val(serverId); // 把上传成功后获取的值附上
选择照片返回的localIds很有意思,可以用于上传使用,并且可以放在img的src属性中,展示图片。
上传成功后,获取一个serverId,通过这个id可以下载上传到微信服务器上的图片文件,把它保存到自己的服务器中。
// 获取图片地址
private function getmedia($access_token,$media_id,$foldername){
$url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=".$access_token."&media_id=".$media_
if (!file_exists("./Uploads/User_cert/".$foldername)) {
mkdir("./Uploads/User_cert/".$foldername, 0777, true);
$targetName = './Uploads/User_cert/'.$foldername.'/'.date('YmdHis').rand().'.jpg';
$ch = curl_init($url); // 初始化
$fp = fopen($targetName, 'wb'); // 打开写入
curl_setopt($ch, CURLOPT_FILE, $fp); // 设置输出文件的位置,值是一个资源类型
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
return $targetN
防止图片名称相同,加一个rand随机数,因为在同一秒钟可能会上传多张照片。
$targetName = './Uploads/User_cert/'.$foldername.'/'.date('YmdHis').rand().'.jpg';
这个serverId以表单的形式提交到服务器,然后对其进行写入文件,获取地址,并把地址保存到服务器中。
微信的js与jquery不冲突,可以共同使用。
附上牛逼的JSSDK类
class JSSDK {
private $appId;
private $appS
public function __construct($appId, $appSecret) {
$this-&appId = $appId;
$this-&appSecret = $appS
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&timestamp=$timestamp&url=$url";
$signature = sha1($string);
$signPackage = array(
=& $this-&appId,
"nonceStr" =& $nonceStr,
"timestamp" =& $timestamp,
"signature" =& $signature,
"rawString" =& $string
return $signP
private function createNonceStr($length = 16) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str = "";
for ($i = 0; $i & $ $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
private function getJsApiTicket() {
// jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode(file_get_contents("jsapi_ticket.json"));
if ($data-&expire_time & time()) {
$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-&
if ($ticket) {
$data-&expire_time = time() + 7000;
$data-&jsapi_ticket = $
$fp = fopen("jsapi_ticket.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
$ticket = $data-&jsapi_
private function getAccessToken() {
// access_token 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode(file_get_contents("access_token.json"));
if ($data-&expire_time & time()) {
// 如果是企业号用以下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_
if ($access_token) {
$data-&expire_time = time() + 7000;
$data-&access_token = $access_
$fp = fopen("access_token.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
$access_token = $data-&access_
return $access_
private function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
// 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 小程序对微信版本有要求吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信