最近在研究微信开发
我觉得要多看官方文档:
$postStr=file_get_contents("php://input");
file_put_contents('./data.txt',$postStr);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername =$postObj->FromUserName;//自己
$toUsername = $postObj->ToUserName;//别人
$keyword = trim($postObj->Content);
// echo '<xml>
// <ToUserName><![CDATA['.$fromUsername.']]></ToUserName>
// <FromUserName><![CDATA['.$toUsername.']]></FromUserName>
// <CreateTime><![CDATA['.time().']]></CreateTime>
// <MsgType><![CDATA[text]]></MsgType>
// <Content><![CDATA[哈哈哈哈哈哈哈哈哈哈]]></Content>
// </xml>';
//上面就可以被动回复文字内容,文字内容是不需要token的
echo '<xml>
<ToUserName><![CDATA['.$fromUsername.']]></ToUserName>
<FromUserName><![CDATA['.$toUsername.']]></FromUserName>
<CreateTime><![CDATA['.time().']]></CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image><MediaId><![CDATA[Moh96m_dS9AJazdceG_p1H3GxpIJ1ZtDEuBe78FMLvCYbihJBTAhYt6Z2CYHrdzN]]></MediaId></Image>
</xml>';//媒体图片信息的话需要token
首先要先获取媒体信息:
$tokenUrl='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxb372451ad68470d8&secret=72d155aac0f2518a7f05b42f3f0ea479';
// $res=WeChatToken($tokenUrl);
// $data=json_decode($res,true);
// $token=$data['access_token'];
// $url='https://api.weixin.qq.com/cgi-bin/media/upload?access_token='.$token.'&type=image';
// $d['media']=new CURLFile($_SERVER['DOCUMENT_ROOT'].'/images/touxiang.jpg');
// $res=WeChatUrl($url,$d);
// echo $res;
function
WeChatToken(
$url){
$ch=
curl_init(
$url);
curl_setopt(
$ch,CURLOPT_RETURNTRANSFER,
1);
$res=
curl_exec(
$ch);
return
$res;
}
//获取access_token
//声明函数来发送post请求
function
WeChatUrl(
$url,
$data){
//初始化curl
$ch =
curl_init(
$url);
//设置选项
curl_setopt(
$ch, CURLOPT_RETURNTRANSFER,
1);
curl_setopt(
$ch, CURLOPT_POST,
1);
curl_setopt(
$ch, CURLOPT_POSTFIELDS,
$data);
curl_setopt(
$ch, CURLOPT_TIMEOUT,
10);
//执行发送
$res =
curl_exec(
$ch);
//返回结果
return
$res;
}
在来说说获取个人基本信息,这个很实用!!!
填写授权回调页面的域名
登录公众平台-->开发者中心-->接口权限表
找到 网页授权获取用户基本信息 然后修改-->填写你的域名.如下:
前面不要加http和https,直接是域名网站地址
关于网页授权的两种scope的区别说明(官方)
1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。
因为scope有两中模式,所以下面分开解说:
scope为snsapi_base 那么用户必须是关注了公众号才能取得信息
index.php如下:
public
function
indexAction(){
//scope=snsapi_base 实例
$appid=
'你的AppId';
$redirect_uri =
urlencode (
'http://你的域名/getUserInfo.php' );
$url=
"https://open.weixin.qq.com/connect/oauth2/authorize?appid=
$appid
&redirect_uri=
$redirect_uri
&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
header(
"Location:".
$url);
}
public
function
TokenAction(){
$appid =
"你的AppId";
$secret =
"你的AppSecret";
$code =
$_GET[
"code"];
//第一步:取全局access_token
$url =
"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=
$appid
&secret=
$secret
";
$token = getJson(
$url);
//第二步:取得openid
$oauth2Url =
"https://api.weixin.qq.com/sns/oauth2/access_token?appid=
$appid
&secret=
$secret
&code=
$code
&grant_type=authorization_code";
$oauth2 = getJson(
$oauth2Url);
//第三步:根据全局access_token和openid查询用户信息
$access_token =
$token[
"access_token"];
$openid =
$oauth2[
'openid'];
$get_user_info_url =
"https://api.weixin.qq.com/cgi-bin/user/info?access_token=
$access_token
&openid=
$openid
&lang=zh_CN";
$userinfo = getJson(
$get_user_info_url);
//打印用户信息
print_r(
$userinfo);
function
getJson(
$url){
$ch =
curl_init();
curl_setopt(
$ch, CURLOPT_URL,
$url);
curl_setopt(
$ch, CURLOPT_SSL_VERIFYPEER,
FALSE);
curl_setopt(
$ch, CURLOPT_SSL_VERIFYHOST,
FALSE);
curl_setopt(
$ch, CURLOPT_RETURNTRANSFER,
1);
$output =
curl_exec(
$ch);
curl_close(
$ch);
return
json_decode(
$output,
true);
}
scope为snsapi_userinfo 用户不用关注公众号,也能取到信息,但是会有一个界面让用户去点击确认!相当于一个登录授权吧!
代码实例
index.php如下:
public
function
indexAction(){
$appid=
'*********';
$redirect_uri =
urlencode (
'http://******Token/Token' );
$url =
"https://open.weixin.qq.com/connect/oauth2/authorize?appid=
$appid
&redirect_uri=
$redirect_uri
&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
header(
"Location:".
$url);
}
getUserInfo.php
public
function
TokenAction(){
$appid =
"***********";
$secret =
"**********";
$code =
$_GET[
"code"];
//第一步:取得openid
$oauth2Url=
"https://api.weixin.qq.com/sns/oauth2/access_token?appid=
$appid
&secret=
$secret
&code=
$code
&grant_type=authorization_code";
$oauth2 = getJson(
$oauth2Url);
//取得access_token
$url =
"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=
$appid
&secret=
$secret
";
$token = getJson(
$url);
//第二步:根据全局access_token和openid查询用户信息
$access_token =
$token[
"access_token"];
$openid =
$oauth2[
'openid'];
$get_user_info_url
=
"https://api.weixin.qq.com/cgi-bin/user/info?access_token=
$access_token
&openid=
$openid
&lang=zh_CN"
;
$userinfo = getJson(
$get_user_info_url);
//打印用户信息
print_r(
$userinfo);
}
就ok了