20,359
社区成员
发帖
与我相关
我的任务
分享
require_once "wx.php"; //这个页面是微信API里的示例代码
define(AppId, "wxbxxxxxxx");//定义AppId
define(AppSecret, "86bfxxxxxxxxxxxxx");//定义AppSecret
$wechatObj = new Wechat();//实例化微信类
$creatMenu = $wechatObj->creatMenu();//创建菜单
class Wechat
{
private function getAccessToken() //获取access_token
{
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".AppId."&secret=".AppSecret;
$data = getCurl($url);//通过自定义函数getCurl得到https的内容
$resultArr = json_decode($data, true);//转为数组
echo $resultArr["access_token"];
echo '<br>';
echo $resultArr["expires_in"];
return $resultArr["access_token"];//获取access_token
}
public function creatMenu()//创建菜单
{
$accessToken = $this->getAccessToken();//获取access_token
$menuPostString = '{
"button":[
{
"name":"产品介绍",
"sub_button":[
{
"type":"view",
"name":"A",
"url":"http://www.XXXX.com/fenxiaob/jianjie/soft.html"
}
]
},
{
"name":"申请试用",
"sub_button":[
{
"type":"click",
"name":"地接批发",
"key":"dj"
}
]
},
{
"name":"在线",
"sub_button":[
{
"type":"view",
"name":"公司新闻",
"url":"http://www.xxxxx.com/news/company/"
},
]
}
]
}';
$menuPostUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$accessToken;//POST的url
$menu = dataPost($menuPostString, $menuPostUrl);//将菜单结构体POST给微信服务器
}
}
function getCurl($url){//get https的内容
$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);
$result = curl_exec($ch);
curl_close ($ch);
return $result;
}
function dataPost($post_string, $url) {//POST方式提交数据
$context = array ('http' => array ('method' => "POST", 'header' => "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) \r\n Accept: */*", 'content' => $post_string ) );
$stream_context = stream_context_create ( $context );
$data = file_get_contents ( $url, FALSE, $stream_context );
return $data;
}
<?php
//require_once "../qp/conn.php";
if(isset($_SESSION['user'])){
print_r($_SESSION['user']);
exit;
}
//mysql_query("insert into test(str)values('进入getcodeurl')",$conn); //这里是做一个数据添加的测试,表示ajax调用代码正确
$APPID='xxxxxxx';
$REDIRECT_URI='http://www.xxxxxx.cn/callback.php';
$scope='snsapi_base';
$state = '123';
$url='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$APPID.'&redirect_uri='.urlencode($REDIRECT_URI).'&response_type=code&scope='.$scope.'&state='.$state.'#wechat_redirect';
header("Location:".$url);
?>
但是在callback.php中,并没有执行测试的数据添加,那就意味着回调绑定不成功,不知道是哪里出的问题???
<?php
require_once "qp/conn.php";
$appid = "xxxxxxxxx";
$secret = "xxxxxxxxxxxxxxxxxxxxxx";
$code = $_GET["code"];
$get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$get_token_url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
$res = curl_exec($ch);
curl_close($ch);
$json_obj = json_decode($res,true);
//根据openid和access_token查询用户信息
$access_token = $json_obj['access_token'];
$openid = $json_obj['openid'];
$get_user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$get_user_info_url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
$res = curl_exec($ch);
curl_close($ch);
//解析json
$user_obj = json_decode($res,true);
$_SESSION['user'] = $user_obj;
mysql_query("insert into test(str)values('callback:nickname=".$user_obj['nickname']."')",$conn);//这里这个sql操作是没有执行的
print_r($user_obj);
?>
这样的方式可行么?或者有没有更好的方法来实现这个目的?
private function getAccessToken() //获取access_token
{
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".AppId."&secret=".AppSecret;
$data = getCurl($url);//通过自定义函数getCurl得到https的内容
$resultArr = json_decode($data, true);//转为数组
echo $resultArr["access_token"];
echo '<br>';
echo $resultArr["expires_in"];
return $resultArr["access_token"];//获取access_token
}