由于只是为了粗略的解决一个问题,所以只实现了功能,具体见面,代码整洁度有待提升
【 本文地址:http://irudder.me/wpblog/?p=41,转载请保留】
https://open.weixin.qq.com/ 微信开放平台认证,成为第三方的凭证开发
首先微信会向第三方平台每十分钟发送一次凭证:接收地址http://demo.xxx.me/get_ticket.php
接收并将其存入req下的appid.php文件中
<?php $content = file_get_contents("php://input"); if($content){ file_put_contents("./req/appid.php", "\r\n" . $content .'**'. $_GET['timestamp'] . '**' . $_GET['nonce'] . "**" . $_GET['msg_signature']); echo "success"; } ?>;
使用微信的解密方式,将数据解析后
<?php $content = file_get_contents('./req/appid.php'); $arr = explode('**', $content); var_dump($arr); //将数据分离出来 //exit; require './req/weixin.php'; //weixin.php是微信官方提供的加密解密的php文件 $encodingAesKey = '第三方密钥'; $token = 'token'; //token $appId = "第三方appid"; $timeStamp = $arr[1]; $nonce = $arr[2]; $msg_sign = $arr[3]; $encryptMsg = $arr[0]; $pc = new WXBizMsgCrypt($token, $encodingAesKey, $appId); $xml_tree = new DOMDocument(); $xml_tree->loadXML($encryptMsg); $array_e = $xml_tree - > getElementsByTagName('Encrypt'); $encrypt = $array_e - > item(0) - > nodeValue; $format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>"; $from_xml = sprintf($format, $encrypt); //包装成微信标准xml // 第三方收到公众号平台发送的消息 $msg = ''; $errCode = $pc - > decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg); //此时的$msg就是解密后的xml了 if ($errCode == 0) { $xml = new DOMDocument(); $xml - > loadXML($msg); $array_e = $xml - > getElementsByTagName('ComponentVerifyTicket'); $component_verify_ticket = $array_e - > item(0) - > nodeValue; if ($component_verify_ticket) { echo 'success'; } } ? >
获取得到微信后台推送的ticket
【 本文地址:http://irudder.me/wpblog/?p=41,转载请保留】
然后按照官方给定的方法来请求获取对应的预授权码、获取(刷新)授权公众号的令牌:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318587&token=c91bc4d8ae1b79cce939362bc86948158ed9c1e5&lang=zh_CN
<?php require('req/do.php'); /* echo "<hr/>"; echo $msg; echo "<hr/>"; echo $component_verify_ticket; echo "<hr/>"; */ //获取第三方平台access_token $url = "https://api.weixin.qq.com/cgi-bin/component/api_component_token"; $post_data1['component_appid'] = 'wxe1219eb7d5780e65'; $post_data1['component_appsecret'] = 'a8c304ab88a7300673ca2321bb816390'; $post_data1['component_verify_ticket'] = $component_verify_ticket; $post_data = json_encode($post_data1); $resdata = request_post($url, $post_data); $resdata = json_decode($resdata); //var_dump($resdata); $component_access_token = $resdata->component_access_token; echo $component_access_token; echo "<hr/>"; //获取预授权码 $parameter = "component_access_token=".$component_access_token; $url = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?".$parameter; $post_data2['component_appid'] = 'wxe1219eb7d5780e65'; $post_data = json_encode($post_data2); $resdata = request_post($url, $post_data); $resdata = json_decode($resdata); //var_dump($resdata); $pre_auth_code = $resdata->pre_auth_code; echo $pre_auth_code; echo "<hr/>"; //公众号授权给第三方,此处设置自动跳转 为了获取授权码 $web_url = "http://demo.xxx.me/deal.php";//你想要接收授权码的路径 $href='https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid='.$appId.'&pre_auth_code='.$pre_auth_code.'&redirect_uri='.$web_url; echo $href; header('refresh:3;url='.$href); echo "<hr/>"; /******************下面是在注释了上面的自动跳转,并且在已经获取授权码的情况下做的测试,可以不用管,自动跳转会跳到你指定的页面去接收你的授权码*******************************************/ //使用授权码换取公众号的授权信息 $parameter = "component_access_token=".$component_access_token; $url = "https://api.weixin.qq.com/cgi-bin/component/api_query_auth?".$parameter; //授权后才会有的! $auth_code = "queryauthcode@@@j41WQzJIfyu8nEQ7NvTipcq-H1Mn2rMODIPVCd0QT_fX61qTHDhpJJ2YzYIve-Jx1MgerGDTLb-SLArpaFoEYA"; $post_data3['component_appid'] = '第三方appid'; $post_data3['authorization_code'] = $auth_code; $post_data = json_encode($post_data3); $resdata = request_post($url, $post_data); $resdata = json_decode($resdata); //var_dump($resdata); $authorizer_access_token = $resdata->authorization_info->authorizer_access_token; /* $authorizer_refresh_token = $resdata->authorization_info->authorizer_refresh_token; echo $authorizer_access_token; file_put_contents("./req/authorizer_access_token.php", $authorizer_access_token); file_put_contents("./req/authorizer_refresh_token.php", $authorizer_refresh_token); /*$authorizer_refresh_token = $resdata->authorizer_refresh_token; echo $authorizer_refresh_token;*/ echo "<hr/>"; //在指定ip下使用上面的到的第三方authorizer_access_token 去调用公众号开发接口!! //N4Zd9p_Qz0a-3HxH5iUpJ3KCcMQuthhbrfPOcHO7qf0_UHBpZe2Q3Oonaq3MEtQ0nc7I8TRFt99zYX1YgdlU-XySXdMdYCwb6MLm3m5W1zsMA5kqxRR3FfdO3ce-NHN3EPFhADDALB /* $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$authorizer_access_token; $xjson = '{ "button":[ { "type":"click", "name":"今日歌曲", "key":"V1001_TODAY_MUSIC" } ] }'; $res = request_post($url, $xjson); var_dump($res); */ $art ='{ "articles": [{ "title": TITLE, "thumb_media_id": THUMB_MEDIA_ID, "author": AUTHOR, "digest": DIGEST, "show_cover_pic": SHOW_COVER_PIC(0 / 1), "content": CONTENT, "content_source_url": CONTENT_SOURCE_URL }, //若新增的是多图文素材,则此处应还有几段articles结构 ] }'; //$type = "image"; //$filepath = "9.png"; //$filedata = array("file1" => "@".$filepath); /* $file_info = array( 'filename' => "9.png", 'content-type'=>"image/jpeg", 'filelength'=>"78710" ); $filedata= array("media"=>"9.png",'form-data'=>$file_info); $filedata= json_encode($filedata); */ /* $filepath = "9.png"; $ajson = '{ "articles": [{ "title": "你好呀", "thumb_media_id": "20151116", "author": "rudder", "digest": '', "show_cover_pic": 1, "content": "这是内容了,<img src=$filepath />...", "content_source_url": "http://irudder.me", }, ] }'; $url = "https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=".$authorizer_access_token; */ var_dump(request_get("https://api.weixin.qq.com/cgi-bin/media/get?access_token=RsuienekdmR2bJYPG3HZiThYmW8ksad5IIvxp1sfGYV6CkSXUwe1Hd7qQgDMCZJf61Q37Z-j3pHnjhCyl-kpcQvQcYEXkSBaN0n-uLREtlHVIoeARkzeB2-BMZ0_P2MlFEIfALDSRV&media_id=Yb1K-aOWqptks7TAhi45Sd6HP0OLnKk84ARCzMl4HSmMiXQKDyWyYtLJ4l92lq8r")); //$res = request_post($url, $ajson); //var_dump($res); echo " <hr /> "; function request_get($url = ''){ $ch=curl_init($url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_BINARYTRANSFER,true); $output=curl_exec($ch); $fh=fopen("test.php",'w'); fwrite($fh,$output); fclose($fh); } /** * 模拟post进行url请求 * @param string $url * @param array $post_data */ function request_post($url = '', $post_data = array()) { if (empty($url) || empty($post_data)) { return false; } $postUrl = $url; $curlPost = $post_data; $ch = curl_init();//初始化curl curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页 curl_setopt($ch, CURLOPT_HEADER, 0);//设置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); $data = curl_exec($ch);//运行curl curl_close($ch); return $data; } ?>
得到了授权码后,就可以获取令牌 以及获取刷新令牌(我是纯文件操作,即所有需要的数据都存于文件中)
<?php require ('./req/do.php'); //获取第三方平台access_token $url = "https://api.weixin.qq.com/cgi-bin/component/api_component_token"; $post_data1['component_appid'] = 'wxe1219eb7d5780e65'; $post_data1['component_appsecret'] = 'a8c304ab88a7300673ca2321bb816390'; $post_data1['component_verify_ticket'] = $component_verify_ticket; $post_data = json_encode($post_data1); $resdata = request_post($url, $post_data); $resdata = json_decode($resdata); //var_dump($resdata); $component_access_token = $resdata->component_access_token; //echo $component_access_token; echo "<hr/>"; //获取预授权码 $parameter = "component_access_token=" . $component_access_token; $url = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?" . $parameter; $post_data2['component_appid'] = 'wxe1219eb7d5780e65'; $post_data = json_encode($post_data2); $resdata = request_post($url, $post_data); $resdata = json_decode($resdata); //var_dump($resdata); $pre_auth_code = $resdata->pre_auth_code; //echo $pre_auth_code; echo "<hr/>"; //使用授权码换取公众号的授权信息 $parameter = "component_access_token=" . $component_access_token; $url = "https://api.weixin.qq.com/cgi-bin/component/api_query_auth?" . $parameter; //授权后才会有的! $auth_code = $_GET['auth_code']; //"queryauthcode@@@j41WQzJIfyu8nEQ7NvTipcq-H1Mn2rMODIPVCd0QT_fX61qTHDhpJJ2YzYIve-Jx1MgerGDTLb-SLArpaFoEYA"; $post_data3['component_appid'] = 'wxe1219eb7d5780e65'; $post_data3['authorization_code'] = $auth_code; $post_data = json_encode($post_data3); $resdata = request_post($url, $post_data); $resdata = json_decode($resdata); //var_dump($resdata); /* $authorizer_access_token = $resdata->authorization_info->authorizer_access_token; echo $authorizer_access_token; /*$authorizer_refresh_token = $resdata->authorizer_refresh_token; echo $authorizer_refresh_token;*/ //获取令牌 和刷新令牌 存入 $authorizer_access_token = $resdata->authorization_info->authorizer_access_token; $authorizer_refresh_token = $resdata->authorization_info->authorizer_refresh_token; $authorizer_appid = $resdata->authorization_info->authorizer_appid; echo $authorizer_access_token; echo " "; echo $authorizer_refresh_token; //echo file_put_contents("req/authorizer_access_token.php", 'hhhhhhhhhhhhhhjashdfhsadjfhkjsadfhksahdfksahdfkjhsadkjfhksajdfh你算的复苏回暖'); //echo file_put_contents("req/authorizer_refresh_token.php", $authorizer_refresh_token); $myfile1 = fopen("req/authorizer_access_token.php", "w") or die("权限错误!"); fwrite($myfile1, $authorizer_access_token); fclose($myfile1); $myfile2 = fopen("req/authorizer_refresh_token.php", "w") or die("权限错误!"); fwrite($myfile2, $authorizer_appid . '**' . $authorizer_refresh_token); fclose($myfile2); echo "<hr/>"; //在指定ip下使用上面的到的第三方authorizer_access_token 去调用公众号开发接口!! //N4Zd9p_Qz0a-3HxH5iUpJ3KCcMQuthhbrfPOcHO7qf0_UHBpZe2Q3Oonaq3MEtQ0nc7I8TRFt99zYX1YgdlU-XySXdMdYCwb6MLm3m5W1zsMA5kqxRR3FfdO3ce-NHN3EPFhADDALB /* //获取全部永久素材 $url = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=".$authorizer_access_token; $post_data4['type'] = 'news'; $post_data4['offset'] = 0; $post_data4['count'] = 20; $post_data = json_encode($post_data4); $resdata = request_post($url, $post_data); $resdata = json_decode($resdata); $resdata = $resdata->item; foreach($resdata as $key=>$val){ echo $val->media_id; echo " "; } */ /* //获取指定media_id的素材 $url = "https://api.weixin.qq.com/cgi-bin/material/get_material?access_token=".$authorizer_access_token; $post_data5['media_id'] = 'ZEYdr1p9fWH8C4YElr5052jbtnHrsuIE2qkBz1DvvJs'; $post_data = json_encode($post_data5); $resdata = request_post($url, $post_data); var_dump($resdata); */ /* //自定义菜单 $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$authorizer_access_token; $xjson = '{ "button":[ { "name":"菜单", "sub_button":[ { "type": "view_limited", "name": "手撕", "media_id": "ZEYdr1p9fWH8C4YElr5052jbtnHrsuIE2qkBz1DvvJs" }, } ] }'; $res = request_post($url, $xjson); var_dump($res); */ echo " <hr /> "; function request_get($url = '') { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); $output = curl_exec($ch); //$fh=fopen("test.php",'w'); $data = curl_exec($ch); //运行curl //fwrite($fh,$output); //fclose($ch); return $data; } /** * 模拟post进行url请求 * @param string $url * @param array $post_data */ function request_post($url = '', $post_data = array()) { if (empty($url) || empty($post_data)) { return false; } $postUrl = $url; $curlPost = $post_data; $ch = curl_init(); //初始化curl curl_setopt($ch, CURLOPT_URL, $postUrl); //抓取指定网页 curl_setopt($ch, CURLOPT_HEADER, 0); //设置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_POST, 1); //post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); $data = curl_exec($ch); //运行curl curl_close($ch); return $data; }
上面获取了令牌,并且由第三方给未认证审核的订阅号 素材管理 和 自定义菜单功能的实现 当令牌失效的时候 会调用刷新令牌重新进行令牌的获取 两个数据分别存在req下的两个文件中
【 本文地址:http://irudder.me/wpblog/?p=41,转载请保留】