精华内容
下载资源
问答
  • PHP微信公众号开发SDK

    2019-08-08 08:40:03
    PHP微信公众号开发SDK
  • php微信公众号开发

    2020-07-09 13:40:08
    3.配置服务器与微信公众号牵手 进入这个目录,打开index.php,代码如下:再点击提交按钮,显示TOKEN验证成功 <?php $appsecret = '03e***************707d';//用自己的 $appid = 'wx*******a..

    1.注册微信公众号

    2.申请微信公众号测试账号 

    测试号申请地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

    (填写好之后不要提交)

    3.配置服务器与微信公众号牵手

     进入这个目录,打开index.php,代码如下:再点击提交按钮,显示TOKEN验证成功

    <?php
    
    $appsecret  = '03e*********e9707d';
    	
    $appid = 'wxc6a******3da1c';
    
    $token = TOKEN;
    
    $signature = $_GET["signature"];
    
    $timestamp = $_GET["timestamp"];
    
    $nonce = $_GET["nonce"];
    
    
    if( $_GET['echostr'] ){
    	
    	$tmpArr = array($token, $timestamp, $nonce);
    
    	sort($tmpArr, SORT_STRING);
    
    	$tmpStr = implode( $tmpArr );
    
    	$tmpStr = sha1( $tmpStr );
    
    	//file_put_contents('msg.txt',json_encode($_GET));
    	
             if( $tmpStr ==  $signature ){
           	    echo $_GET['echostr'];
             }else{
                 return false;
             }
    
    
    }else{	
    	require_once 'php/wxBizMsgCrypt.php';
    	
    	//$msg_sign = $_GET['msg_signatrue'];
    	
    	$post_data =  file_get_contents('php://input') ; //用户发送的数据
    	file_put_contents('test.txt',json_encode($post_data));
    
    	//$pc = new WXBizMsgCrypt($token,$appsecret,$appid);
    	// $msg_decrypt =  $pc->decryptMsg($msg_sign,$timestamp,$nonce ,$post_data ,$msg );//安全模式下解密  $msg是解密后的结果集
    	
    	$xmlToObj = simplexml_load_string($post_data);
    		
    	$msg_type  =   $xmlToObj->MsgType;
    	$msg_content  =  $xmlToObj->Content;
             $event   =  $xmlToObj->Event; //事件类型,subscribe(订阅)、unsubscribe(取消订阅)
    	
    	//file_put_contents('123.txt',$msg_content.$msg_type);
    	if( $msg_type == "text"){
    		if( $msg_content == "图文" ){
    		    echo transTexts($xmlToObj ); 
    		     return false;
    		}elseif( $msg_content == "链接" ){  
     			//echo transTexts($xmlToObj ); 
    			
    			 echo aaa($xmlToObj ); 
    		            return false;
    
    		}
    		//file_put_contents('6.txt',json_encode($xmlToObj));
    
    		echo text($xmlToObj );
    	  }elseif($msg_type == "image"  ){
    		//file_put_contents('img.txt',json_encode($xmlToObj));
    
    		echo img($xmlToObj );
    
    	 }elseif(  $msg_type ==  "voice"){//语音
    	
    	       echo voice($xmlToObj );
    
    	}elseif( $msg_type=='event' ){
    	$event_key  = $xmlToObj->EventKey; //对应caidan.json中的key
    
    		if( $event_key == "test1"){
    			echo transTexts($xmlToObj ); 
    		}
    	
                	        if($event=='subscribe'){  //关注
                           	echo transTexts($xmlToObj ); 
                  	       }elseif($event=='unsubscribe'){  //取关
                                 file_put_contents('info.txt','unsubscribe'."\n");
                            }
                    }
    	
    
    	
    	
    	
    }
    
    
    
    function text($obj){
            $xml = "<xml>
      <ToUserName><![CDATA[%s]]></ToUserName>
      <FromUserName><![CDATA[%s]]></FromUserName>
      <CreateTime>%s</CreateTime>
      <MsgType><![CDATA[text]]></MsgType>
      <Content><![CDATA[%s]]></Content>
      <MsgId>%d</MsgId>
    </xml>";
                                                                                    
            $result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$obj->Content,$obj->MsgId);            
            return $result ;                                                                              
                                                                                                         
    }
    
    function img($obj){
            $xml = '<xml>                                                                                
                    <ToUserName><![CDATA[%s]]></ToUserName>                                              
                    <FromUserName><![CDATA[%s]]></FromUserName>                                          
                    <CreateTime>%s</CreateTime>                                                          
                    <MsgType><![CDATA[image]]></MsgType> 
                    <Image><MediaId><![CDATA[%s]]></MediaId></Image>                                     
             </xml>';                                                                                    
            $result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$obj->MediaId);            
            return $result;                                                                              
                                                                                                        
    }
    
    function voice($obj){                                                                           
            $xml = '<xml>                                                                                
                    <ToUserName><![CDATA[%s]]></ToUserName>                                              
                    <FromUserName><![CDATA[%s]]></FromUserName>                                          
                    <CreateTime>%s</CreateTime>                                                          
                    <MsgType><![CDATA[voice]]></MsgType>                                                 
                    <Voice><MediaId><![CDATA[%s]]></MediaId></Voice>                                     
             </xml>';                                                                                    
            $result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$obj->MediaId);            
            return $result;        
    }
    
    
    
    
    function transTexts($obj){
            $xml = '<xml> 
                    <ToUserName><![CDATA[%s]]></ToUserName> 
                    <FromUserName><![CDATA[%s]]></FromUserName> 
                    <CreateTime>%s</CreateTime> 
                    <MsgType><![CDATA[news]]></MsgType> 
                    <ArticleCount>2</ArticleCount>
                    <Articles>
                            <item>
                                    <Title><![CDATA[ttttttttttt]]></Title> 
                                    <Description><![CDATA[dddddddddd]]></Description>
                                    <PicUrl><![CDATA[%s]]></PicUrl>
                                    <Url><![CDATA[%s]]></Url>
                            </item>
                            <item>                                                   
                                    <Title><![CDATA[aaaaaaaaaa]]></Title>           
                                     <Description><![CDATA[bbbbbbbb]]></Description>
                                    <PicUrl><![CDATA[%s]]></PicUrl>                  
                                    <Url><![CDATA[%s]]></Url>                        
                            </item>                                                  
                    </Articles>
             </xml>';
            $picUrl = 'http://www.lampol-blog.com/static/home/images/logo.png';
            $url = 'http://www.lampol-blog.com/detail/aid/MTE4ZHdENmJ6UkJFZmJxWDB6MTZ4UG1uWnRsWnMxRzBwK3RDRXVHQg%3D%3D';
            $result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time(),$picUrl,$url,$picUrl,$url);
          //  file_put_contents('info.txt',$result."\n");
            return $result;
     
    }
    
    
    function aaa($obj){
    $xml = "<xml>
      <ToUserName><![CDATA[%s]]></ToUserName>
      <FromUserName><![CDATA[%s]]></FromUserName>
      <CreateTime>%s</CreateTime>
      <MsgType><![CDATA[link]]></MsgType>
      <Title><![CDATA[公众平台官网链接]]></Title>
      <Description><![CDATA[公众平台官网链接]]></Description>
      <Url><![CDATA[https://www.baidu.com]]></Url>
     <MsgId>1234567890123456</MsgId>
     </xml>";                                                                
            $result = sprintf($xml,$obj->FromUserName,$obj->ToUserName,time());      
     file_put_contents('link.txt',$result."\n");
          
            return $result ; 
    
    
    
    }
    
    
    
    
    
    ?>
    
    

    ========================获取token===================

     

    ===================自定义菜单===========================

    caidan.php 

    <?php
    
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxc6****da1c&secret=03ec642*****79788e9707d";
    
    
    $access_token = json_decode(file_get_contents($url),true);
    
    
     
     
    file_put_contents('/home/www/blog/token.txt',$access_token['access_token']);
    
    $menu_json = file_get_contents('caidan.json');
    
    $msg = http_post($access_token['access_token'],$menu_json);
     
     
    echo $msg;
     
    function http_post($access_token,$data){
     
            $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
     
            $ch = curl_init();
     
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            $res = curl_exec($ch);
            curl_close($ch);
     
            return $res;
     
    }
    
    
    
    
    
    
    
    
    
    ?>

     

    caidan.json

    {
         "button":[
         {    
              "type":"click",
              "name":"今日歌曲",
              "key":"test1"
          },
          {
               "name":"菜单",
               "sub_button":[
               {    
                   "type":"view",
                   "name":"搜索",
                   "url":"http://www.soso.com/"
                },
    	    {    
                   "type":"scancode_push",
                   "name":"扫码推送",
    	      "key":"saomatui1",
                   "sub_button":[]       
    	     },
    	    {    
                   "type":"scancode_waitmsg",
                   "name":"扫码提示",
    	      "key":"saomatui1_2",
                    "sub_button":[]    
                },
    
                  {
                   "type":"click",
                   "name":"赞一下我们",
                   "key":"V1001_GOOD"
                }]
           }]
     }

     

    然后执行candan.php文件

     

     

     

     

     

     

    展开全文
  • PHP微信公众号开发

    2020-03-17 17:09:38
    <?php namespace Home\Controller; use Think\Controller; class WxApiController extends Controller{ ... * 微信公众号开发 * 官方文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started...

     

    <?php
    namespace Home\Controller;
    use Think\Controller;
    class WxApiController extends Controller{
        /**
         * 微信公众号开发
         * 官方文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
         * author 赵辉
         */
        private $appId = '***';
        private $appSecret = '***';
        private $GetAccessTokenUrl = 'https://api.weixin.qq.com/cgi-bin/token';
        private $CreateMenuUrl = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=';
        private $GetCreateMenuUrl = 'https://api.weixin.qq.com/cgi-bin/menu/get?access_token=';
        private $GetMenuInfoUrl = 'https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=';
        private $SendMsgByOpenIdUrl = 'https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=';
    
        /**
         * 开发者填写的URL
         * 微信开发统一入口
         * @return mixed
         */
        public function index(){
            //验证服务器地址的有效性
            if($_GET['echostr']){
                if($this->checkSignature()){
                    echo $_GET['echostr'];exit;
                }else{
                    echo '';exit;
                }
            }
    
            //php5.6 以上用 file_get_contents 获取
            $xml = $GLOBALS['HTTP_RAW_POST_DATA'] ? $GLOBALS['HTTP_RAW_POST_DATA'] : file_get_contents('php://input');
            if($xml){
                $param = $this->_xml_data_parse($xml);
    
                //MsgType :文本为text, 图片为image, 语音为voice, 视频为video, 小视频为shortvideo,
                //MsgType :地理位置为location, 链接为link, 事件推送(点击菜单)event
                if($param['MsgType'] == 'text'){//用户发送的消息
                    //根据消息内容做回复
                    $link_arr_1 = ['模拟','模拟考试','考试','试题','做题'];
                    $link_arr_2 = ['邀请码','获取邀请码'];
                    if(in_array($param['Content'],$link_arr_1)){
                        $tpl = $this->msg_temps('text');
                        $return_msg = 'http://www.hbyjglxy.com/Index.php/Mobile/MyTestSeo/index';
                        $resultStr = sprintf($tpl, $param['FromUserName'], $param['ToUserName'], time(), 'text', $return_msg);
                    }elseif(in_array($param['Content'],$link_arr_2)){
                        $tpl = $this->msg_temps('text');
                        $return_msg = 'F001004';
                        $resultStr = sprintf($tpl, $param['FromUserName'], $param['ToUserName'], time(), 'text', $return_msg);
                    }elseif(strpos($param['Content'],'密码') !== false){
                        $tpl = $this->msg_temps('text');
                        $return_msg = 'http://www.hbyjglxy.com/index.php/mobile/login/password_view_1';
                        $resultStr = sprintf($tpl, $param['FromUserName'], $param['ToUserName'], time(), 'text', $return_msg);
                    }
    
                }elseif ($param['MsgType'] == 'event'){
                    if($param['Event'] == 'subscribe'){//关注
                        $tpl = $this->msg_temps('text');
                        $return_msg = '欢迎关注河北省应急安全管理平台';
                        $resultStr = sprintf($tpl, $param['FromUserName'], $param['ToUserName'], time(), 'text', $return_msg);
    
                    }elseif ($param['Event'] == 'unsubscribe'){//取消关注
    
                    }
                }
                //记录消息
                $add = M('wx_record')->create($param);
                M('wx_record')->add($add);
                if(!empty($resultStr)){echo $resultStr;exit;}
            }
            echo 'success';
            exit;
        }
    
        /**
         * 创建菜单
         * @return mixed
         */
        public function create_menu(){
            $menu_arr = [
                'button'=>[
                    [
                        'name'=>'考试系统',
                        'sub_button'=>[
                            [
                                'type'=>'view',
                                'name'=>'模拟考试',
                                'url'=>'http://www.hbyjglxy.com/Index.php/Mobile/MyTestSeo/index',
                            ],
                            [
                                'type'=>'view',
                                'name'=>'正式考试',
                                'url'=>'http://www.hbyjglxy.com/Index.php/Mobile/Index/go_format_test',
                            ]
                        ]
                    ],
                    [
                        'type'=>'view',
                        'name'=>'视频课程',
                        'url'=>'http://www.hbyjglxy.com/Index.php/Mobile/MyCourse/get_my_course',
                    ],
                    [
                        'type'=>'view',
                        'name'=>'会员中心',
                        'url'=>'http://www.hbyjglxy.com/index.php/mobile/member/index',
                    ]
                ]
            ];
            $postData = json_encode ($menu_arr,JSON_UNESCAPED_UNICODE);
            $postData = str_replace ("\\/","/", $postData);
            $access_token = $this->getAccessToken();
            $res = $this->httpPost($this->CreateMenuUrl.$access_token,$postData);
            $res = json_decode($res,true);
            echo "<pre>";
            print_r($res);exit;
        }
    
        /**
         * 获取开发配置菜单
         * @return mixed
         */
        public function get_create_menu(){
            $access_token = $this->getAccessToken();
            $res = $this->httpGet($this->GetCreateMenuUrl.$access_token);
            $res = json_decode($res,true);
            echo "<pre>";
            print_r($res);exit;
        }
    
        /**
         * 获取菜单信息(自定义菜单配置 OR 开发配置菜单)
         * @return mixed
         */
        public function get_menu_info(){
            $access_token = $this->getAccessToken();
            $res = $this->httpGet($this->GetMenuInfoUrl.$access_token);
            $res = json_decode($res,true);
            echo "<pre>";
            print_r($res);exit;
        }
    
        /**
         * 根据OpenID列表群发
         * @return mixed
         */
        public function send_msg_by_open_id(){
            $open_id = ['omcPa1Zj-K_Zw328diP2N7cWTgq8','omcPa1cZWq9bvAo3Ihxs_tpX8C5o'];
            $send_info = [
                'touser'=>$open_id,
                'msgtype'=>'text',
                'text'=>[
                    'content'=>'SEND MSG BY OPEN ID TEST'
                ]
            ];
            $postData = json_encode ($send_info,JSON_UNESCAPED_UNICODE);
            $postData = str_replace ("\\/","/", $postData);
    
            $access_token = $this->getAccessToken();
            $res = $this->httpPost($this->SendMsgByOpenIdUrl.$access_token,$postData);
            $res = json_decode($res,true);
            echo "<pre>";
            print_r($res);exit;
        }
    
        /**
         * 接入微信公众平台第一步
         * 验证服务器地址的有效性  检验signature
         * @return bool
         */
        private function checkSignature(){
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];
            $token = 'author_zhao';
            $tmpArr = array($token, $timestamp, $nonce);
            sort($tmpArr, SORT_STRING);
            $tmpStr = implode( $tmpArr );
            $tmpStr = sha1( $tmpStr );
            if( $tmpStr == $signature ){
                return true;
            }else{
                return false;
            }
        }
    
        /**
         * xml格式数据解析函数
         * @param  $data
         * @return mixed
         */
        private function _xml_data_parse($data){
            $msg = (array)simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);
            return $msg;
        }
    
        /**
         * 获取access_token
         * 公众号的全局唯一接口调用凭据
         */
        public function getAccessToken(){
            $info = M('we_chat')->find();
            $access_token = $info['access_token'];
            $over_time = $info['over_time'];
            if(!$access_token || $over_time < time()){
                $url = $this->GetAccessTokenUrl."?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
                $json = $this->httpGet($url);
                $arr = json_decode($json,true);
                $data['id'] = $info['id'];
                $data['access_token'] = $arr['access_token'];
                $data['over_time'] = time() + 7100;//access_token的有效期目前为2个小时
                M('we_chat')->save($data);
                return $arr['access_token'];
            }else{
                return $access_token;
            }
        }
    
        /**
         * curl Get请求
         * @param  $url
         * @return mixed
         */
        private function httpGet($url) {
            $ch = curl_init();
            curl_setopt($ch,CURLOPT_URL,$url);
            curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
            curl_setopt($ch,CURLOPT_HEADER,0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//跳过ssl检查项
            $output = curl_exec($ch);
            if($output === FALSE ){
                echo "CURL Error:".curl_error($ch);
            }
            curl_close($ch);
            return $output;
        }
    
        /**
         * curl POST请求
         * @param $url
         * @param $postData
         * @param bool|false $raw
         * @return mixed
         */
        private function httpPost($url, $postData, $raw = false) {
            $curl = curl_init();
            curl_setopt ($curl, CURLOPT_SAFE_UPLOAD, false);
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
            curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97'); // 模拟用户使用的浏览器
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
            curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
            curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
            curl_setopt($curl, CURLOPT_POST, 1);//post数据
            if (is_array($postData) && !$raw) {
                // post的变量
                curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($postData));
            } else {
                // post的变量
                curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
            }
            $output = curl_exec($curl);
            curl_close($curl);
            return $output;
        }
    
        /**
         * 被动回复用户消息模版
         * @param  $msg_type
         * @return mixed
         */
        private function msg_temps($msg_type){
            $tpl = '';
            switch($msg_type){
                case 'text':
                    $tpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                    <FuncFlag>0</FuncFlag>
                    </xml>";
                    break;
                case 'image':
                    $tpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Image%s</Image>
                    <FuncFlag>0</FuncFlag>
                    </xml>";
                    break;
                case 'voice':
                    $tpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Voice>%s</Voice>
                    <FuncFlag>0</FuncFlag>
                    </xml>";
                    break;
                case 'video':
                    $tpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Video>%s</Video>
                    <FuncFlag>0</FuncFlag>
                    </xml>";
                    break;
                case 'music':
                    $tpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Music> %s</Music>
    				<FuncFlag>0</FuncFlag>
                    </xml>";
                    break;
                case 'news':
                    $tpl = "<xml>
    				<ToUserName><![CDATA[%s]]></ToUserName>
    				<FromUserName><![CDATA[%s]]></FromUserName>
    				<CreateTime>%s</CreateTime>
    				<MsgType><![CDATA[%s]]></MsgType>
    				<ArticleCount>%s</ArticleCount>
    				<Articles>%s</Articles>
    				<FuncFlag>0</FuncFlag>
    				</xml>";
                    break;
            }
            return $tpl;
        }
    
    }

    展开全文
  • php微信公众号开发视频教材, 内带百度视频分享 目录: 1. 微信公众号开发JSSDK 2.微信公众号支付视频 3.微信公众平台搭建 4.微信开发宝典 5.微信小程序 内附源码
  • 主要介绍了PHP微信公众号开发之微信红包实现方法,结合实例形式分析了php实现微信公众号红包发送功能的实现思路、步骤与具体操作技巧,需要的朋友可以参考下
  • 主要为大家详细介绍了php微信公众号开发之秒杀功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了php微信公众号开发之现金红包,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了php微信公众号开发之音乐信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了php微信公众号开发之关键词回复,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了php微信公众号开发之简答题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了php微信公众号开发之图片回复,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了php微信公众号开发之快递查询功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了php微信公众号开发之翻页查询功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了php微信公众号开发之微信企业付款给个人,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了php微信公众号开发之校园图书馆,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了php微信公众号开发之欢迎老朋友,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了php微信公众号开发之二级菜单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了php微信公众号开发第三课,php实现简单微信文本通讯,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 微信公众号开发两种模式:编辑模式和开发模式。编辑模式比较简单,你不需要操作任何的代码,只需要借助微信提供的功能来管理自己的微信公众号。这种方式开发的页面比较简单,主要用来实现文章的推送等功能。开发者...
  • 微信公众号开发常用接口封装,企业开发微信公众号时,经常会需要调用到微信官方的提供的接口,这里我在此封装好了这些常用的开发接口,供开发者们快速上手公众号开发,以节约开发者自己的时间,和提高开发项目的效率...
  • 主要为大家详细介绍了php微信公众号开发之答题连闯三关,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了php微信公众号开发第四课,php实现简单微信文本通讯,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,808
精华内容 723
关键字:

php微信公众号开发