好久没写了 今天更新两篇文章
这次是关于微信公众号的的 用户信息获取
第一个微信公众号方法是对接微信公众平台的
public function index()
{
//获得参数 signature nonce token timestamp echostr
if (isset($_GET['echostr'])) {
//1.将timestamp,nonce,toke按字典顺序排序
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
$token = 'weixin';
$signature = $_GET['signature'];
$array = array($timestamp,$nonce,$token);
//2.将排序后的三个参数拼接之后用sha1加密
$tmpstr = implode('',$array);
$tmpstr = sha1($tmpstr);
if ($tmpstr == $signature) {
//第一次接入weixin api接口的时候
ob_clean();
header('content-type:text');
echo $_GET['echostr'];
$this->definedItem();
exit;
}
} else {
$this->definedItem();
$this->reponseMsg();
}
}
这是在微信公众平台进行配置的
方法 definedItem() 是对应微信公众号自定义栏目 代码如下
public function definedItem(){
header('content-type:text/html;;charset=utf-8');
$access_token= $this->getWxAccessToken();
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
$postArr=array(
'button'=>array(
array(
'name'=>'在线下单',
'type'=>'miniprogram',
'appid'=>'你的appid',
'pagepath'=>'pages/menu/menu',
'url'=>'http://www.baidu.com'
),
array(
'name'=>'分享好友',
'type'=>'miniprogram',
'appid'=>'你的appid',
'pagepath'=>'pages/index/index',
'url'=>'http://www.baidu.com'
),//第三个一级菜单
array(
'name'=>'在线咨询',
'type'=>'miniprogram',
'appid'=>'你的appid',
'pagepath'=>'pages/index/index',
'url'=>'http://www.baidu.com'
),//第三个一级菜单
)
);
echo '<br/>';
var_dump($postArr);
echo '<hr/>';
$postJson = json_encode($postArr,JSON_UNESCAPED_UNICODE);
var_dump($postJson);
$res= $this->http_curl($url,'post','json',$postJson);
var_dump($res);
}
获取微信AccessToken 的代码
public function getWxAccessToken(){
if(Session::has('access_token') && Session::has('expire_time') > time()){
return Session::get('access_token');
}else{
$appid = '你的id';
$appsecret = '你的密匙';
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
$res=$this->http_curl($url,'get','json');
$access_token=isset($res['access_token'])?$res['access_token']:'';
Session::set('access_token',$access_token);
Session::set('expire_time',time()+7200);
return $access_token;
}
}
方法 http_curl 的代码
function http_curl($url,$type='get',$res='json',$arr=''){
//获取imooc
//1.初始化curl
$ch = curl_init();
//2.设置curl的参数
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if($type=='post'){
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$arr);
}
//3.采集
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$output = curl_exec($ch);
//4.关闭
// curl_close($ch);
if($res=='json'){
if(curl_errno($ch)){
return curl_error($ch);
}else{
return json_decode($output,true);
}
}
var_dump($output);
}
以上是组成 微信公众号自定义栏目的代码
下面是微信公众号关注第一次自动回复代码 reponseMsg 方法
public function reponseMsg()
{
//1.获取到微信推送过来post数据(xml格式)
//$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];//php7以上不能用
$postArr = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : file_get_contents("php://input");
//$postArr = file_get_contents("php://input");
//2.处理消息类型,并设置回复类型和内容
$postObj = simplexml_load_string($postArr);
//判断该数据包是否是订阅的事件推送
if (strtolower($postObj->MsgType) == 'event') {
//如果是关注 subscribe 事件
if (strtolower($postObj->Event == 'subscribe')) {
//回复用户消息(纯文本格式)
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$msgType = 'text';
//$content = '您好,欢迎关注爱米的微信公众账号'.$postObj->FromUserName.'-'.$postObj->ToUserName;
$content = 'Hi,你终于来了!
新用户全场商品首件免费,再送新人大券包:
逐鹿「百万大咖」活动
正在进行中
每周消费满7件商品,
瓜分500万现金!
马上点击下方菜单栏【百万大咖】参与活动+提现
Good Luck~';
$template = "<xml><ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content></xml>";
$info = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
echo $info;
}
}
}
这一步大家注意了 $toUser 是用户的openid 有了这个可以去换取用户的unionid
用下面的方法 可以获取到用户的基本信息了
public function getAccessopenid()
{
$openid = '用户的openid' ;
$access_token= $this->getWxAccessToken();
$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&lang=zh_CN";
$res= $this->http_curl($url);
dump($res) ;
}
这样就可以获取用户的openid 和 unionid ,可以配合小程序 来实现一些功能了