1. wx.share_data.js 获取时间戳,签名,等
var wxdata = {
wx_account : new Array(4),
wx_share : new Array(4),
wx_myuser : "wxa6124505106149b3",
access_token : "", // 凭证
token_expires_in : "" , // 凭证过期时间 单位:s
jsapi_ticket : "", // 凭证
ticket_expires_in : "" , // 凭证过期时间 单位:s
signature:'',
url : "https://wx.zhixiaobing.com/index.php?m=&c=api&a=accessToken"
}
//获取ticket
get_jsapi_ticket(); //3
var timestamp = create_timestamp(); // timestamp
var noncestr = create_noncestr(); // noncestr
var url = window.location.href;
console.log(wxdata.jsapi_ticket)
create_signature(noncestr,wxdata.jsapi_ticket,timestamp,url);
wxdata.wx_account[0] = wxdata.wx_myuser; // appid
wxdata.wx_account[1] = timestamp; // timestamp
wxdata.wx_account[2] = noncestr; // noncestr
wxdata.wx_account[3] = wxdata.signature//signature
// 获取jsapi_ticket
// *注意* 经过实际开发测试,微信分享不支持跨域请求,因此获取jsapi_ticket的请求必须从服务器发起,否则无法获取到jsapi_ticket
function get_jsapi_ticket (){
var access_token='';
// 获取access_token
// *注意* 经过实际开发测试,微信分享不支持跨域请求,因此获取access_token的请求必须从服务器发起,否则无法获取到access_token
$.ajax({
type : "GET",
url : wxdata.url,
// dataType : "jsonp", // 解决跨域问题,jsonp不支持同步操作
// cache : false,
async : false,
success : function(res) {
// console.log(res)
// res = JSON.parse(res);
access_token = res.access_token; // 获取到的交互凭证 需要缓存,存活时间token_expires_in 默认为7200s
if (wxdata.access_token != "" || wxdata.access_token != null) {
console.log("get access_token success: " + wxdata.access_token);
} else {
console.log("get access_token fail " +wxdata.access_token);
}
$.ajax({
type : "GET",
url : "https://www.abc.com?access_token="+access_token,
// dataType : "jsonp",
// cache : false,
async : false,
// jsonp :'callback',
success : function(res) {
if(res.ticket){
console.log(wxdata.jsapi_ticket )
wxdata.jsapi_ticket = res.ticket; //
console.log("get jsapi_ticket success");
} else {
console.log("get jsapi_ticket fail");
}
},
error : function(res){
console.log("get jsapi_ticket error!!! ");
}
});
},
error : function(res){
console.log("get access_token error!! ");
}
});
}
// 数据签名
function create_signature(noncestr,ticket,timestamp,url){
console.log(ticket)
// 这里参数的顺序要按照 key 值 ASCII 码升序排序
var s = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + url;
$.ajax({
// 这时必须是post 否则地址会出错
type : "post",
url : "https://www.abc.com",
data:{signature:s},
// dataType : "jsonp",
// cache : false,
async : false,
// jsonp :'callback',
success : function(res) {
console.log(res)
wxdata.signature=res.signature;
},
error : function(res){
console.log("get signature error!!! ");
}
});
return
}
// 自定义创建随机串 自定义个数0 < ? < 32
function create_noncestr() {
var str= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var val = "";
for (var i = 0; i < 16; i++) {
val += str.substr(Math.round((Math.random() * 10)), 1);
}
return val;
}
// 自定义创建时间戳
function create_timestamp() {
return new Date().getSeconds();
}
2、htlml 里这样写
<script src="__STATIC__/js/wxshare/wxShare_data.js"></script>
<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script type="text/javascript">
var ShareLink =window.location.href; //默认分享链接
var ShareImgUrl = "图片地址";// 分享图标
var ShareDesc= '分享描述';
var ShareTitle='分享标题';
//var is_distribut = getCookie('is_distribut'); // 是否分销代理
//var user_id = getCookie('user_id'); // 当前用户id
//alert(is_distribut+'=='+user_id);
// 如果已经登录了, 并且是分销商
// if(parseInt(is_distribut) == 1 && parseInt(user_id) > 0)
// {
// ShareLink = ShareLink + "&first_leader="+user_id;
// }
var wx_account = wxdata.wx_account; // 自定义数据,见wxShare_data.js
//配置微信信息
wx.config ({
debug : false, // true:调试时候弹窗
appId : wx_account[0], // 微信appid
timestamp : wx_account[1], // 时间戳
nonceStr : wx_account[2], // 随机字符串
signature : wx_account[3], // 签名
jsApiList : [
// 所有要调用的 API 都要加到这个列表中
'onMenuShareTimeline', // 分享到朋友圈接口
'onMenuShareAppMessage', // 分享到朋友接口
'onMenuShareQQ', // 分享到QQ接口
'onMenuShareWeibo' // 分享到微博接口
]
});
wx.ready (function () {
// 微信分享的数据
var shareData = {
"imgUrl" : ShareImgUrl, // 分享显示的缩略图地址
"link" : ShareLink, // 分享地址
"desc" : ShareDesc, // 分享描述
"title" :ShareTitle, // 分享标题
}
wx.onMenuShareTimeline (shareData);
wx.onMenuShareAppMessage (shareData);
wx.onMenuShareQQ (shareData);
wx.onMenuShareWeibo (shareData);
// success:function () {
// // 分享成功可以做相应的数据处理
// //alert("分享成功"); }
// }
});
wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,
// 具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,
//对于SPA可以在这里更新签名。
console.log("好像出错了!!");
});
</script>
3 、php 代码
// 获取accessToken
public function accessToken()
{
header("Access-Control-Allow-Origin: *");
//公众号 appid 和秘钥
$appid = 'xxxxxxxxxxxxxx';
$appsecret = 'xxxxxxxx';
// AppID 和 AppSecret 可登录微信公众平台官网-设置-开发设置中获得(需要已经绑定成为开发者,且帐号没有异常状态)
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
$res = httpGet($url);
$res = json_decode($res);
// session(array('accessToken'=>$res->access_token,'expire'=>7200));
// dump($res->access_token);
$this->ajaxreturn($res) ;
}
public function jsapiTicket($value='')
{
header("Access-Control-Allow-Origin: *");
$accessToken=I('get.access_token');
$url='https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$accessToken.'&type=jsapi';
$res = httpGet($url);
$res = json_decode($res);
// session(array('jsapiTicket'=>$res->ticket,'expire'=>7200));
$this->ajaxreturn($res) ;
}
public function signature()
{
header("Access-Control-Allow-Origin: *");
$string = I('post.signature');
// $string ="jsapi_ticket=".I('get.jsapi_ticket')."&noncestr=".I('get.noncestr')."×tamp=".I('get.timestamp')."&url=".I('get.url');
$signature=sha1($string);
// dump(array('noncestr'=>$noncestr,'jsapi_ticket'=>$jsapi_ticket,'timestamp'=>$timestamp,'signature'=>$signature));
$this->ajaxreturn(['signature'=>$signature]) ;
}
httpGet 是自己封装 的curl 函数,网上很多,自己查找
完整代码全部在这了,亲测可用
加公众号获取学习资源