网站首页杂项
微信公众号开发sdk代码
发布时间:2018-08-30编辑:Cary.He
公众号设置--》功能设置--》设置js安全域名接口
详情请看开发手册:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
开发--》基本配置--》获取appid和appSecret并设置白名单服务器ip地址
以下为php相关的微信公众号开发函数,根据需要自己封装成一个类文件也可以
<?php
/**
* Created by PhpStorm.
* User: asusa
* Date: 2018/8/28/0028
* Author: Cary.He
* Contact QQ : 373889161($S$-Memory)
* email: 373889161@qq.com
* Time: 16:20
*/
define('WX_APPID','你的appid');
define('WX_SECRET','你的secret');
//定义存储路径
define('WX_PATH',FCPATH.'/cache/');
//判断文件目录是否存在,不存在则创建
if(!is_dir(WX_PATH)){
mkdir(WX_PATH,0777,true);
}
/**
* @return mixed
* 获取 access_token 方法
*/
function getAccessToken()
{
//请求地址: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
//定义文件名
$name = 'token_'.md5(WX_APPID.WX_SECRET);
$filename = WX_PATH.$name.'.php';
//判断是否存在临时 access_token 文件,如果存在直接取值,不存在就发送请求获取并保存
if(is_file($filename) && filemtime($filename) + 7100 > time())
{
$result = include $filename;
//定义需要返回的内容
$data = $result['access_token'];
}else{
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.WX_APPID.'&secret='.WX_SECRET;
$result = wx_curl($url);
//将返回的json数据转成php数组
$result = json_decode($result,true);
//将内容写入文件中
file_put_contents($filename,"<?php\nreturn ".var_export($result,true).";\n?>");
//定义需要返回的内容
$data = $result['access_token'];
}
return $data;
}
/**
* @return mixed
* 获取 ticket 方法,(获取临时票据的方法)
*/
function getJsApiTicket()
{
$name = 'ticket_'.md5(WX_APPID.WX_SECRET);
$filename = WX_PATH.$name.'.php';
//判断是否存在临时票据的文件,如果存在直接取值,不存在就发送请求获取并保存
if(is_file($filename) && filemtime($filename) + 7100 > time())
{
$result = include $filename;
}else{
//定义请求地址
$url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.getAccessToken().'&type=jsapi';
//使用curl方法发送请求,获取临时票据
$result = wx_curl($url);
//转换成php数组
$result = json_decode($result,true);
//将内容写入文件中
file_put_contents($filename,"<?php\nreturn ".var_export($result,true).";\n?>");
}
//定义需要返回的内容
$data = $result['ticket'];
return $data;
}
/**
* 生成签名的方法
*/
function sign()
{
//定义四个参数:noncestr 随机字符串、有效的 jsapi_ticket (临时票据)、timestamp 时间戳、当前网页的URL,不包含#及其后面部分
$noncestr = makeStr();
$jsapi_ticket = getJsApiTicket();
$timestamp = time();
$url = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$arr = array(
'noncestr='.$noncestr,
'jsapi_ticket='.$jsapi_ticket,
'timestamp='.$timestamp,
'url='.$url
);
//对数组进行字典化排序
sort($arr,SORT_STRING);
//将数组重组成字符串
$string = implode('&',$arr);
//将字符串加密生成签名
$sign = sha1($string);
//由于调用签名方法的时候不只是需要签名,还需要生成签名的随机数、时间戳,所以我们应该返回由这些内容组成的一个数组
$signArr = array(
'appId' => WX_APPID,
'timestamp' => $timestamp,
'nonceStr' => $noncestr,
'signature' => $sign,
'url' => $url,
);
return $signArr;
}
/**
* @return string
* 随机字符串方法
*/
function makeStr()
{
//定义随机字符串种子
$str = '1qwe2rt3uyi4op5sad6fgh7klj8cx9zvb0mnb';
//定义空字符串用来接收随机组合成的新字符串
$n_str = '';
for($i=0;$i<16;$i++)
{
//定义一个随机数
$num = rand(0,strlen($str) - 1);
//循环连接随机生成的字符串
$n_str .= $str[$num];
}
//返回随机字符串
return $n_str;
}
/**
* @param $url 请求地址
* @param array $field post参数,数组不为空表示以post方式进行请求
* @return string
* curl 获取返回值
*/
function wx_curl($url,$field=array())
{
//初始化 CURL
$ch = curl_init();
//设置请求地址
curl_setopt($ch,CURLOPT_URL,$url);
//设置接收返回数据,不直接返回展示在页面
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//设置禁止证书校验
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
//判断是否为post请求方式,如果第二个参数不为空表示post请求,为空表示get请求
if(!empty($field))
{
//设置请求超时
curl_setopt($ch,CURLOPT_TIMEOUT,30);
//设置开启post
curl_setopt($ch,CURLOPT_POST,1);
//传递post数据
curl_setopt($ch,CURLOPT_POSTFIELDS,$field);
}
//定义一个空字符串接收结果
$data = '';
if(curl_exec($ch))
{
$data = curl_multi_getcontent($ch);
}
//关闭curl
curl_close($ch);
//返回结果
return $data;
}
js代码
引入js文件
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script type="text/javascript">
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '<?php echo $result["appId"]; ?>', // 必填,公众号的唯一标识
timestamp: <?php echo $result["timestamp"]?>, // 必填,生成签名的时间戳
nonceStr: '<?php echo $result["nonceStr"];?>', // 必填,生成签名的随机串
signature: '<?php echo $result["signature"];?>',// 必填,签名
jsApiList: [
'onMenuShareTimeline', //调用分享到朋友圈的方法
'onMenuShareAppMessage' //调用分享给朋友的方法
] // 必填,需要使用的JS接口列表
});
wx.ready(function(){
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
//分享到朋友圈的方法
wx.onMenuShareTimeline({
title: '努力向钱冲', // 分享标题
link: '<?php echo $result["url"];?>', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: '<?php echo base_url()?>/front_file/img/3.png', // 分享图标
success: function () {
// 用户点击了分享后执行的回调函数
},
});
wx.onMenuShareAppMessage({
title: '努力向钱冲', // 分享标题
desc: '奋斗吧!骚年。。。', // 分享描述
link: '<?php echo $result["url"];?>', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: '<?php echo base_url()?>/front_file/img/3.png', // 分享图标
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
// 用户点击了分享后执行的回调函数
}
});
});
</script>
关键字词:微信公众号开发sdk代码
上一篇: 简单递归代码
下一篇: 微信公众号接口权限预览