• 技术文章 >后端开发 >php教程

    php网站能否跟微信公众号对接

    2016-06-23 13:20:17原创772
    需求是这样的: 普通的php网站,现在需要跟微信公众号对接,用户通过关注公众号以后,会给出一个活动链接页面,这个页面就是php网站上的页面,用户点击进入页面后,页面会获取到这个微信用户的微信号,以进行活动后续的营销动作。

    根据这个需求,我的思路是,
    1.建立微信连接
    2.创建自定义菜单(菜单中要有跳转页面的url)
    3.跳转url里要把用户的微信号作为参数带上


    现在遇到的问题是:已经能够 获取access token 了,但是自定义菜单始终没有作用,在接口测试这里,一直报40001的错误,但是检测appid和appsecret都是对的,到这里就卡住了。求高人指点!
    代码如下:
    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 '
    '; 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; }


    回复讨论(解决方案)

    我记得4001只是一个错误类,还要看具体的错误信息。把详细的错误信息贴出来看看。
    不出意外的话,我猜测是你没有菜单的接口权限,具体可以到公众号后台的开发者处接口权限列表里查看

    参考: http://doc.okbase.net/Demon_311/archive/55555.html

    token和access_token原来是不同的概念,token是在微信后台选择开发模式的时候填写的,而access_token则是通过接口调用生成的。调用的语句是:

    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

    token和access_token原来是不同的概念,token是在微信后台选择开发模式的时候填写的,而access_token则是通过接口调用生成的。调用的语句是:

    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET



    token和access_token不同,这个我知道的,而且现在代码里也是有单独获取access_token的函数了
    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 '
    '; echo $resultArr["expires_in"]; return $resultArr["access_token"];//获取access_token }

    晕,原来自定义菜单的代码是正确的,只不过生效要过一天以后才能看到,我还一直以为是自己哪里没做对

    不需要一天的时间的,一个小时就可以了,你关闭公众号,关闭微信或退出微信,一个小时内查看,菜单就好了。

    现在是另外的问题了:
    通过自定义菜单,用户跳转到网站的活动页面参与抽奖,如果获取用户的微信号?
    我现在实现的方式是这样:
    在活动页面的js代码里,增加窗体加载时间,用ajax调用一个页面,页面的作用是调用微信获取code接口,并绑定回调的页面路径
    代码如下:


    但是在callback.php中,并没有执行测试的数据添加,那就意味着回调绑定不成功,不知道是哪里出的问题???


    这样的方式可行么?或者有没有更好的方法来实现这个目的?

    解决了,用http://xiaohuang.cc/post/437.html这个帖子上的方法就行了

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:PHP 设计模式系列 -- 命令模式(Command) 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 一文带你了解PHP中的文件与目录操作• PHP+APACHE实现网址伪静态_PHP• PHP5中Cookie与 Session使用详解_PHP• 多条件动态筛选,该如何处理• 求宗师帮助啊
    1/1

    PHP中文网