第一章:微信项目 JSJDK环境部署 (html,js,php)

配置微信环境:

1.注册账号(订阅号)

2.绑定域名

  a.设置JS接口安全域名

  b.下载MP_cerify_************.txt

  c.上传至主机

  d.域名填写文件上传的位置

3.从开发者中心获取 AppID 和 AppServer

  应用ID:appid(固定不变)

  应用密钥:appserver(生成)

  代码中需要用到

首先我们看下要开发这个项目都需要哪些文件:

(项目)

wx1.0--API(接口)--cache(缓存)

        --js

        --index.html

(接口)

API--wx_get_jsapi_ticket.php(获取动态临时签名--票据的后台文件)

     --wx_get_signature.php(获取动态签名的后台文件)

     --wx_get_token.php(获取动态令牌的后台文件)

(缓存)

cache--access_token.txt(内容为空)

        --access_tokenTime.txt(内容为0)

        --ticket.txt(内容为空)

        --ticketTime.txt(内容为0)

(这个就不做解释了)

js--cookie.js(这个代码下面会放)

   --jquery.js(jquery库,可在官网直接下载)

   --wxJSJDK.js(这个代码下面也会放)

接下来讲一下逻辑思路

第一步:创建全局变量wxJSJDK,将所有JSJDK相关模块放入其中

第二步:做初始化,获取令牌,票据,签名

第三步:将获取到的数据信息(令牌,票据,签名)配置config,用以初始话wx

第四步:若wx的初始化状态成功,就可以使用微信的JSJDK

接下来我就分享下我调试成功的代码:(wxJSJDK.js

var wxJSJDK = {
cersion:"1.0", //版本号
appName:"zzl", //配置应用名称
isReady:false, //微信JSJDK是否初始化完成
access_token:"", //令牌
ticket:"", //临时票据
config:{
debug: true, //开启调试模式
appid: 'wx24f91d691edb3b55', //公众号唯一标识
timestamp: Math.ceil(new Date().getTime()/1000).toString(), //时间戳
nonceStr: 'htmlzzl_wxJSJDK', //生成签名的随机串
signature: '',
jsApiList: [ //使用的JS接口列表
"onMenuShareTimeLine"
]

},

init:function() { //函数功能:初始化
if (!wx) { //验证是否存在微信的js组
alert("微信接口调用失败,请检查是否引入微信JS!");
return;
}
var that = this; //保存当前作用域,方便回调
console.log("1.调用微信接口成功,获取当前对象的所有属性,并用一个变量接收:");
console.log(that);
//获取令牌
this.wx_get_token(function(data) {
if (data.access_token) {
Cookie.Set("access_token", data.access_token, 3600);
that.access_token = data.access_token;
console.log(that.access_token);
}
//获取票据
that.wx_get_ticket(function(data) {
if (data.ticket) {
Cookie.Set("ticket", data.ticket, 3600);
that.ticket = data.ticket;
}
//获取签名
that.wx_get_signature(function(data) {
that.config.signature = data;
that.initWx(function() { //初始化微信接口
//初始化完成后执行
});
});
});
});
},
//获取令牌
wx_get_token: function(call) {
this.access_token = Cookie.Get("access_token");
console.log("2.利用cookie获取当前令牌:"+Cookie.Get("access_token"));
if (!Cookie.Get("access_token")) {
console.log("cookie中不存在access_token:利用ajax向php后台-(wx_get_token.php)文件发起请求获取动态令牌!");
$.get("./API/wx_get_token.php", {},
function(data){
call && call(data);
}, "json");
}
call && call({});
},
//获取票据
wx_get_ticket: function(call) {
this.ticket = Cookie.Get("ticket");
if (!this.ticket) {
$.get("./API/wx_get_jsapi_ticket.php",
{access_token:this.access_token},
function (data) {
call && call(data);
}, "json");
}
call && call({});
},
//获取签名
wx_get_signature: function (call) {
$.get("./API/wx_get_signature.php",{
ticket:this.ticket, //生成签名的时间戳
timestamp:this.timestamp, //生成签名的时间戳
nonceStr:this.nonceStr, //生成签名的随机串
url:window.location.href //生成签名的随机串
},
function (data) {
call && call(data);
});
},
//初始化微信接口
initWx:function(call, errorCall){
var that = this;
wx.config(this.config); //初始化配置
wx.ready(function(){
that.isReady = true;
console.log("初始化成功!");
call && call();
});
wx.error(function(){
that.isReady = "false";
errorCall && errorCall();
});
}
}
//执行初始化
wxJSJDK.init();

cookie.js

 /**
************************************************************
*@project Cookie
*@author xlxi
*@Mail 939898101@qq.com
*@ver version 1.0
*@time 2013-01-16
************************************************************
*/
var Cookie ={

/**//*
函数名称:Cookie.Get([string name])
函数功能:得到Cookie
参数:name 可选项,要取得的Cookie名称
说明:name为空时将通过数组形式返回全部Cookie,name不为空时返回此Cookie名称的值,没有任何值时返回undefined
*/
Get : function(name){
var cv = document.cookie.split("; ");//使用"; "分割Cookie
var cva = [], temp;
/**//*循环的得到Cookie名称与值*/
for(i=0; i<cv.length; i++){
temp = cv[i].split("=");//用"="分割Cookie的名称与值
cva[temp[0]] = unescape(temp[1]);
}
if(name) return cva[name];//如果有name则输出这个name的Cookie值
else return cva;//如果没有name则输出以名称为key,值为Value的数组
},

/**//*
函数名称:Cookie.Set(string name, string value[, int expires[, string path[, string domain[, string secure]]]])
函数功能:存入Cookie
参数:name 必要项,要存入的Cookie名称
value 必要项,要存入的Cookie名称对应的值
expires 可选项,Cookie的过期时间,可以填入以秒为单位的保存时间,也可以填入日期格式(wdy, DD-Mon-YYYY HH:MM:SS GMT)的到期时间
path 可选项,Cookie在服务器端的有效路径
domain 可选项,该Cookie的有效域名
secure 可选项, 指明Cookie 是否仅通过安全的 HTTPS 连接传送,0或false或空时为假
说明:保存成功则返回true,保存失败返回false
*/
Set : function(name, value, expires, path, domain, secure){
if(!name || !value) return false;//如果没有name和value则返回false
if(name == "" || value == "") return false;//如果name和value为空则返回false
/**//*对于过期时间的处理*/
if(expires){
/**//*如果是数字则换算成GMT时间,当前时间加上以秒为单位的expires*/
if(/^[0-9]+$/.test(expires)){
var today = new Date();
expires = new Date(today.getTime()+expires*1000).toGMTString();
/**//*判断expires格式是否正确,不正确则赋值为undefined*/
}else if(!/^wed, d...{2} w...{3} d...{4} d...{2}:d...{2}:d...{2} GMT$/.test(expires)){
expires = undefined;
}
}
/**//*合并cookie的相关值*/
var cv = name+"="+escape(value)+";"
+ ((expires) ? " expires="+expires+";" : "")
+ ((path) ? "path="+path+";" : "")
+ ((domain) ? "domain="+domain+";" : "")
+ ((secure && secure != 0) ? "secure" : "");
/**//*判断Cookie总长度是否大于4K*/
if(cv.length < 4096){
document.cookie = cv;//写入cookie
return true;
}else{
return false;
}
},

/**//*
函数名称:Cookie.Del(string name[, string path[, string domain]])
函数功能:删除Cookie
参数:name 必要项,要删除的Cookie名称
path 可选项,要删除的Cookie在服务器端的有效路径
domain 可选项,要删除的Cookie的有效域名
说明:删除成功返回true,删除失败返回false
*/
Del : function(name, path, domain){
if(!name) return false;//如果没有name则返回false
if(name == "") return false;//如果name为空则返回false
if(!this.Get(name)) return false;//如果要删除的name值不存在则返回false
/**//*合并Cookie的相关值*/
document.cookie = name+"=;"
+ ((path) ? "path="+path+";" : "")
+ ((domain) ? "domain="+domain+";" : "")
+ "expires=Thu, 01-Jan-1970 00:00:01 GMT;";
return true;
}
}

接下来是后台文件(PHP)
wx_get_token.php(动态获取令牌的后台文件)

<?php
$token = fopen("./cache/access_token.txt"); //打开文件流 access_token.txt
$token = fread($token,1023); //获取token 结果null
$tokenTime = fopen("./cache/access_tokenTime.txt");
$prevTime = intval(fread($tokenTime,1023)); //获取上次缓存文件时间
$nowTime = time()-$prevTime; //计算时间差
if($nowTime >= 3600){ //如果时间超过3600秒,将重新获取accsee_token
$res = file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="这个是你的appid&server=这个是你的appserver');
//PHP无法请求https协议 解决办法:1.找到php.ini 删掉;extension = php_openssl.dll 前面的分号
//2.线上的不需要修改

$res = json_decode($res,true);
$token = $res['access_token'];
//缓存token码
$myfile = fopen("./cache/access_token.txt","w")or die("Unable to open file!");
fwrite($myfile,$token);
fclose($myfile);
//最后缓存时间
$myfileTime = fopen("./cache/access_tokenTime.txt","w")or die("Unable to open file!");
fwrite($myfileTime,time());
fclose($myfileTime);
echo json_encode($res);
}else{
echo '{"access_token":"'.$token.'"}';
}
?>

wx_get_jsapi_ticket.php(动态获取票据)

<?php
$ticket = fopen("./cache/ticket.txt","r"); //打开ticket文件流
$ticket = fread($ticket,1023); //获取ticket
$ticketTime = fopen("./cache/ticketTime.txt","r"); //打开ticketTime文件流
$prevTime = intval(fread($ticketTime,1023)); //获取上次缓存时间
$nowTime = time()-$prevTime; //计算时间差
if($nowTime >= 3600){ //超过3600秒,重新获取ticket
do{
$token = $_GET["access_token"];
$url2 = sprintf("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi",$token);
$res = file_get_contents($url2);
$res = json_decode($res,true);
$ticket = $res['ticket'];
}while(0);
//缓存临时票据
$myfile_ = fopen("./cache/ticket.txt","w")or die("Unable to open file!");
fwrite($myfile_,$ticket);
fclose($myfile_);
//缓存时间
$myfile_Time = fopen("./cache/ticketTime.txt","w")or die("Unable to open file!");
fwrite($myfile_Time);
echo json_encode($res);
}else{
echo '{"ticket":"'.$ticket.'"}';
}
?>

wx_get_signature.php(动态获取签名)

<?php
$timestamp = $_GET['$timestamp'];
$wxnonceStr = $_GET['nonceStr'];
$wxticket = $_GET['ticket'];
//生成sha1签名(将timestamp,noncestr,ticket)
$wxOri = sprintf("jsapi_ticket=%s&noncestr=%s&timestamp=%s&url=%s",$wxticket,$wxnonceStr,$timestamp,$_GET['url']);
$wxSha1 = sha1($wxOri);
echo $wxSha1;
?>

最后就是html代码:

index.html(页面)

四个掉用

<!--引入jquery库-->
<script src="js/jquery-3.2.1.js"></script>
<!--引入微信js-->
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<!--引入cookie-->
<script src="js/cookie.js"></script>
<!--引入wxJSJDK库-->
<script src="js/wxJSJDK.js"></script>

 

测试成功结果是,在电脑控制台会输出:

1.调用微信接口成功,获取当前对象的所有属性,并用一个变量接收:
Object
2.利用cookie获取当前令牌:undefined
cookie中不存在access_token:利用ajax向php后台-(wx_get_token.php)文件发起请求获取动态令牌!
"config", Object
初始化成功!

截至这里JSJDK已经部署完成,接下来就可以愉快的使用微信的JSJDK接口了!!!(祝你调试成功)

 

转载于:https://www.cnblogs.com/thongyan/p/6700234.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信公众平台 PHP 开发包,细化了微信的各项接口操作。调用官方API,具有更灵活的消息分类响应方式,支持链式调用操作 。 主要功能 接入验证 (初级权限) 自动回复(文本、图片、语音、视频、音乐、图文) (初级权限) 菜单操作(查询、创建、删除) (菜单权限) 客服消息(文本、图片、语音、视频、音乐、图文) (认证权限) 二维码(创建临时、永久二维码,获取二维码URL) (服务号、认证权限) 长链接转短链接接口 (服务号、认证权限) 分组操作(查询、创建、修改、移动用户到分组) (认证权限) 网页授权(基本授权,用户信息授权) (服务号、认证权限) 用户信息(查询用户基本信息、获取关注者列表) (认证权限) 多客服功能(客服管理、获取客服记录、客服会话管理) (认证权限) 媒体文件(上传、获取) (认证权限) 高级群发 (认证权限) 模板消息(设置所属行业、添加模板、发送模板消息) (服务号、认证权限) 卡券管理(创建、修改、删除、发放、门店管理等) (认证权限) 语义理解 (服务号、认证权限) 获取微信服务器IP列表 (初级权限) 微信JSAPI授权(获取ticket、获取签名) (初级权限) 数据统计(用户、图文、消息、接口分析数据) (认证权限) > 备注: > 初级权限:基本权限,任何正常的公众号都有此权限 > 菜单权限:正常的服务号、认证后的订阅号拥有此权限 > 认证权限:分为订阅号、服务号认证,如前缀服务号则仅认证的服务号有此权限,否则为认证后的订阅号、服务号都有此权限 > 支付权限:仅认证后的服务号可以申请此权限 初始化动作  $options = array(     'token'=>'tokenaccesskey', //填写你设定的key     'encodingaeskey'=>'encodingaeskey', //填写加密用的EncodingAESKey     'appid'=>'wxdk1234567890', //填写高级调用功能的app id, 请在微信开发模式后台查询     'appsecret'=>'xxxxxxxxxxxxxxxxxxx' //填写高级调用功能的密钥     );  $weObj = new Wechat($options); //创建实例对象  //TODO:调用$weObj各实例方法   标签:wechat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值