0

0

微信API接口(全) - 微信支付/微信红包/微信卡券/微信小店/JSAPI

大家讲道理

大家讲道理

发布时间:2016-11-09 10:04:18

|

3236人浏览过

|

来源于php中文网

原创

微信入口绑定,微信事件处理,微信API全部操作包含在这些文件中。

微信支付、微信红包、微信卡券、微信小店。

大米商城damishop
大米商城damishop

damishop介绍 大米外贸商城系统 简称damishop 完全开源版,只需做一种语言一键开启全球133中语言自动翻译功能,价格实现自动汇率转换,集成微信支付宝 paypal以及国外主流支付方式,自带文章博客系统,首创支持可视化编辑。 软件架构 基于MVC+语言包模式,增加控制台,API导入产品方便对接其他系统(带json示例数据)。 使用要求

下载
wcValid();
?>
token = $token;
    }
 
    public function wcCheckSignature(){
        try{
            if (empty($this->token)) {
                throw new Exception('TOKEN is not defined!');
            }
             
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];
                 
            $token = $this->token;
            $tmpArr = array($token, $timestamp, $nonce);
            // use SORT_STRING rule
            sort($tmpArr, SORT_STRING);
            $tmpStr = implode( $tmpArr );
            $tmpStr = sha1( $tmpStr );
 
            if( $tmpStr == $signature ){
                    return true;
            }else{
                    return false;
            }
        } 
        catch (Exception $e) {
            echo 'Message: ' .$e->getMessage();
        }
    }
     
    public function wcValid(){
        $echoStr = isset($_GET["echostr"]) && !empty($_GET["echostr"]) ? addslashes($_GET["echostr"]) : NULL;
        if(is_null($echoStr)){
            $this->wcMsg();
        }
        else{
            //valid signature , option
            if($this->wcCheckSignature()){
                echo $echoStr;
                exit;
            }
            else{
                exit();
            }
        }
    }
     
    public function wcMsg(){
        //get post data, May be due to the different environments
        $postStr = isset($GLOBALS["HTTP_RAW_POST_DATA"]) && !empty($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : "";
        if(!empty($postStr)){
            libxml_disable_entity_loader(true);
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $this->zcLog(TRUE,$postObj);
             
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $MsgType = $postObj->MsgType;
             
            if($MsgType == 'event'){//执行事件相应
                $Event = $postObj->Event;
                switch ($Event) {
                    case 'subscribe'://关注
                        break;
                    case 'unsubscribe'://取消关注
                        break;
                    case 'SCAN'://扫描
                        break;
                    case 'LOCATION'://地址
                        break;
                    case 'CLICK'://点击时间
                        break;
                    case 'VIEW'://跳转
                        break;
                    case 'card_pass_check'://卡券审核通过
                        break;
                    case 'card_not_pass_check'://卡券审核失败
                        break;
                    case 'user_get_card'://用户领取卡券
                        break;
                    case 'user_del_card'://用户删除卡券
                        break;
                    case 'user_view_card'://用户浏览会员卡
                        break;
                    case 'user_consume_card'://用户核销卡券
                        break;
                    case 'merchant_order'://微小店用户下单付款
                        break;
                    default:
                        break;
                }
            }
            else{
                switch ($MsgType) {
                    case 'text'://文本格式
                        break;
                    case 'image'://图片格式
                        break;
                    case 'voice'://声音
                        break;
                    case 'video'://视频
                        break;
                    case 'shortvideo'://小视频
                        break;
                    case 'location'://上传地理位置
                        break;
                    case 'link'://链接相应
                        break;
                    default:
                        break;
                }                
            }
             
            ////////////////////////////////////////////////////////////////////
            $keyword = trim($postObj->Content);
            $time = time();
            $textTpl = "
                            
                            
                            %s
                            
                            
                            0
                        ";             
            if(!empty( $keyword )){
                $msgType = "text";
                $contentStr = "Welcome to wechat world!";
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                echo $resultStr;
            }
            else{
                echo "Input something...";
            }
            ////////////////////////////////////////////////////////////////////
        }
        else{
            echo "暂时没有任何信息!";
            exit;
        }
    }
     
    //日志LOG
    public function zcLog($errcode , $errmsg){
        $this->returnAy = array();
        $this->returnAy['errcode'] = $errcode;
        $this->returnAy['errmsg'] = $errmsg;
        $this->returnAy['errtime'] = date("Y-m-d H:i:s",time());
        $logfile = fopen("logfile_".date("Ymd",time()).".txt", "a+");
        $txt = json_encode($this->returnAy)."\n";
        fwrite($logfile, $txt);
        fclose($logfile);
        //return $this->returnAy;
    }
     
}
?>
= 1 ){
                        curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
                }
 
                curl_setopt($ch,CURLOPT_POST, 1);
                curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
                $data = curl_exec($ch);
                if($data){
                        curl_close($ch);
                        return $data;
                }
                else { 
                        $error = curl_errno($ch);
                        echo "call faild, errorCode:$error\n"; 
                        curl_close($ch);
                        return false;
                }
        }
 
        /****************************************************
         *  微信获取AccessToken 返回指定微信公众号的at信息
         ****************************************************/
 
        public function wxAccessToken($appId = NULL , $appSecret = NULL){
                $appId          = is_null($appId) ? self::appId : $appId;
                $appSecret      = is_null($appSecret) ? self::appSecret : $appSecret;
                 
                $data = json_decode(file_get_contents("access_token.json"));
                if ($data->expire_time < time()) {
                    //echo $appId,$appSecret;
                    $url            = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;
                    $result         = $this->wxHttpsRequest($url);
                    //print_r($result);
                    $jsoninfo       = json_decode($result, true);
                    $access_token   = $jsoninfo["access_token"];
                    if ($access_token) {
                        $data->expire_time = time() + 7000;
                        $data->access_token = $access_token;
                        $fp = fopen("access_token.json", "w");
                        fwrite($fp, json_encode($data));
                        fclose($fp);
                    }
                }
                else {
                    $access_token = $data->access_token;
                }
                return $access_token;
        }
 
        /****************************************************
         *  微信获取AccessToken 返回指定微信公众号的at信息
         ****************************************************/
 
        public function wxJsApiTicket($appId = NULL , $appSecret = NULL){
                $appId          = is_null($appId) ? self::appId : $appId;
                $appSecret      = is_null($appSecret) ? self::appSecret : $appSecret;
                 
                $data = json_decode(file_get_contents("jsapi_ticket.json"));
                if ($data->expire_time < time()) {                
                    $url        = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".$this->wxAccessToken();
                    $result         = $this->wxHttpsRequest($url);
                    $jsoninfo       = json_decode($result, true);
                    $ticket = $jsoninfo['ticket'];
                    if ($ticket) {
                        $data->expire_time = time() + 7000;
                        $data->jsapi_ticket = $ticket;
                        $fp = fopen("jsapi_ticket.json", "w");
                        fwrite($fp, json_encode($data));
                        fclose($fp);
                    }
                }
                else {
                    $ticket = $data->jsapi_ticket;
                }
                return $ticket;
        }
         
        /****************************************************
         *  微信通过OPENID获取用户信息,返回数组
         ****************************************************/
 
        public function wxGetUser($openId){
            $wxAccessToken  = $this->wxAccessToken();
            $url            = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$wxAccessToken."&openid=".$openId."&lang=zh_CN";
            $result         = $this->wxHttpsRequest($url);
            $jsoninfo       = json_decode($result, true);
            return $jsoninfo;
        }        
 
        /****************************************************
         *  微信生成二维码ticket
         ****************************************************/
 
        public function wxQrCodeTicket($jsonData){
            $wxAccessToken  = $this->wxAccessToken();
            $url        = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$wxAccessToken;
            $result         = $this->wxHttpsRequest($url,$jsonData);
            return $result;
        }
         
        /****************************************************
         *  微信通过ticket生成二维码
         ****************************************************/
        public function wxQrCode($ticket){
            $url    = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" . urlencode($ticket);
            return $url;
        }
 
        /****************************************************
         *      发送自定义的模板消息
         ****************************************************/
 
        public function wxSetSend($touser, $template_id, $url, $data, $topcolor = '#7B68EE'){
                $template = array(
                        'touser' => $touser,
                        'template_id' => $template_id,
                        'url' => $url,
                        'topcolor' => $topcolor,
                        'data' => $data
                );
                $jsonData = json_encode($template);
                $result = $this->wxSendTemplate($jsonData);
                return $result;
        }
 
        /****************************************************
         *  微信设置OAUTH跳转URL,返回字符串信息 - SCOPE = snsapi_base //验证时不返回确认页面,只能获取OPENID
         ****************************************************/
 
        public function wxOauthBase($redirectUrl,$state = "",$appId = NULL){
                $appId          = is_null($appId) ? self::appId : $appId;
                $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_base&state=".$state."#wechat_redirect";
                return $url;
        }
 
        /****************************************************
         *  微信设置OAUTH跳转URL,返回字符串信息 - SCOPE = snsapi_userinfo //获取用户完整信息
         ****************************************************/
 
        public function wxOauthUserinfo($redirectUrl,$state = "",$appId = NULL){
                $appId          = is_null($appId) ? self::appId : $appId;
                $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_userinfo&state=".$state."#wechat_redirect";
                return $url;
        }
 
        /****************************************************
         *  微信OAUTH跳转指定URL
         ****************************************************/
 
        public function wxHeader($url){
                header("location:".$url);
        }
 
        /****************************************************
         *  微信通过OAUTH返回页面中获取AT信息
         ****************************************************/
 
        public function wxOauthAccessToken($code,$appId = NULL , $appSecret = NULL){
                $appId          = is_null($appId) ? self::appId : $appId;
                $appSecret      = is_null($appSecret) ? self::appSecret : $appSecret;
                $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appId."&secret=".$appSecret."&code=".$code."&grant_type=authorization_code";
                $result         = $this->wxHttpsRequest($url);
                //print_r($result);
                $jsoninfo       = json_decode($result, true);
                //$access_token     = $jsoninfo["access_token"];
                return $jsoninfo;           
        }
 
        /****************************************************
         *  微信通过OAUTH的Access_Token的信息获取当前用户信息 // 只执行在snsapi_userinfo模式运行
         ****************************************************/
 
        public function wxOauthUser($OauthAT,$openId){
                $url            = "https://api.weixin.qq.com/sns/userinfo?access_token=".$OauthAT."&openid=".$openId."&lang=zh_CN";
                $result         = $this->wxHttpsRequest($url);
                $jsoninfo       = json_decode($result, true);
                return $jsoninfo;           
        }
 
        /****************************************************
         *  创建自定义菜单
         ****************************************************/
 
        public function wxMenuCreate($jsonData){
            $wxAccessToken  = $this->wxAccessToken();
            $url            = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $wxAccessToken;
            $result         = $this->wxHttpsRequest($url,$jsonData);
            $jsoninfo       = json_decode($result, true);
            return $jsoninfo;           
        }
 
        /****************************************************
         *  获取自定义菜单
         ****************************************************/
 
        public function wxMenuGet(){
            $wxAccessToken  = $this->wxAccessToken();
            $url            = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" . $wxAccessToken;
            $result         = $this->wxHttpsRequest($url);
            $jsoninfo       = json_decode($result, true);
            return $jsoninfo;
        }
 
        /****************************************************
         *  删除自定义菜单
         ****************************************************/
 
        public function wxMenuDelete(){
            $wxAccessToken  = $this->wxAccessToken();
            $url            = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" . $wxAccessToken;
            $result         = $this->wxHttpsRequest($url);
            $jsoninfo       = json_decode($result, true);
            return $jsoninfo;
        }
 
        /****************************************************
         *  获取第三方自定义菜单
         ****************************************************/
 
        public function wxMenuGetInfo(){
            $wxAccessToken  = $this->wxAccessToken();
            $url            = "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=" . $wxAccessToken;
            $result         = $this->wxHttpsRequest($url);
            $jsoninfo       = json_decode($result, true);
            return $jsoninfo;
        }
                 
        /*****************************************************
         *      生成随机字符串 - 最长为32位字符串
         *****************************************************/
        public function wxNonceStr($length = 16, $type = FALSE) {
            $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            $str = "";
            for ($i = 0; $i < $length; $i++) {
              $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
            }
            if($type == TRUE){
                return strtoupper(md5(time() . $str));
            }
            else {
                return $str;
            }
        }
         
        /*******************************************************
         *      微信商户订单号 - 最长28位字符串
         *******************************************************/
         
        public function wxMchBillno($mchid = NULL) {
            if(is_null($mchid)){
                if(self::mchid == "" || is_null(self::mchid)){
                    $mchid = time();
                }
                else{
                    $mchid = self::mchid;
                }
            }
            else{
                $mchid = substr(addslashes($mchid),0,10);
            }
            return date("Ymd",time()).time().$mchid;
        }
         
        /*******************************************************
         *      微信格式化数组变成参数格式 - 支持url加密
         *******************************************************/      
         
        public function wxSetParam($parameters){
            if(is_array($parameters) && !empty($parameters)){
                $this->parameters = $parameters;
                return $this->parameters;
            }
            else{
                return array();
            }
        }
         
        /*******************************************************
         *      微信格式化数组变成参数格式 - 支持url加密
         *******************************************************/
         
    public function wxFormatArray($parameters = NULL, $urlencode = FALSE){
            if(is_null($parameters)){
                $parameters = $this->parameters;
            }
            $restr = "";//初始化空
            ksort($parameters);//排序参数
            foreach ($parameters as $k => $v){//循环定制参数
                if (null != $v && "null" != $v && "sign" != $k) {
                    if($urlencode){//如果参数需要增加URL加密就增加,不需要则不需要
                        $v = urlencode($v);
                    }
                    $restr .= $k . "=" . $v . "&";//返回完整字符串
                }
            }
            if (strlen($restr) > 0) {//如果存在数据则将最后“&”删除
                $restr = substr($restr, 0, strlen($restr)-1);
            }
            return $restr;//返回字符串
    }
         
        /*******************************************************
         *      微信MD5签名生成器 - 需要将参数数组转化成为字符串[wxFormatArray方法]
         *******************************************************/
        public function wxMd5Sign($content, $privatekey){
        try {
                if (is_null($privatekey)) {
                    throw new Exception("财付通签名key不能为空!");
                }
                if (is_null($content)) {
                    throw new Exception("财付通签名内容不能为空");
                }
                $signStr = $content . "&key=" . $privatekey;
                return strtoupper(md5($signStr));
            }
            catch (Exception $e)
            {
                die($e->getMessage());
            }
        }
         
        /*******************************************************
         *      微信Sha1签名生成器 - 需要将参数数组转化成为字符串[wxFormatArray方法]
         *******************************************************/
        public function wxSha1Sign($content){
            try {
                if (is_null($content)) {
                    throw new Exception("签名内容不能为空");
                }
                //$signStr = $content;
                return sha1($content);
            }
            catch (Exception $e)
            {
                die($e->getMessage());
            }
        }
         
        /*******************************************************
         *      微信jsApi整合方法 - 通过调用此方法获得jsapi数据
         *******************************************************/       
        public function wxJsapiPackage(){
            $jsapi_ticket = $this->wxJsApiTicket();
             
            // 注意 URL 一定要动态获取,不能 hardcode.
            $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
            $url = $protocol.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
             
            $timestamp = time();
            $nonceStr = $this->wxNonceStr();
             
            $signPackage = array(
              "jsapi_ticket" => $jsapi_ticket,
              "nonceStr"  => $nonceStr,
              "timestamp" => $timestamp,
              "url"       => $url
            ); 
             
            // 这里参数的顺序要按照 key 值 ASCII 码升序排序
            $rawString = "jsapi_ticket=$jsapi_ticket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
             
            //$rawString = $this->wxFormatArray($signPackage);
            $signature = $this->wxSha1Sign($rawString);
             
            $signPackage['signature'] = $signature;
            $signPackage['rawString'] = $rawString;
            $signPackage['appId'] = self::appId;
             
            return $signPackage;
        }
         
         
        /*******************************************************
         *      将数组解析XML - 微信红包接口
         *******************************************************/
        public function wxArrayToXml($parameters = NULL){
            if(is_null($parameters)){
                $parameters = $this->parameters;
            }
             
            if(!is_array($parameters) || empty($parameters)){
                die("参数不为数组无法解析");
            }
             
            $xml = "";
            foreach ($arr as $key=>$val)
            {
                if (is_numeric($val))
                {
                    $xml.="<".$key.">".$val.""; 
                }
                else
                    $xml.="<".$key.">";  
            }
            $xml.="";
            return $xml; 
        }
         
        /*******************************************************
         *      微信卡券:上传LOGO - 需要改写动态功能
         *******************************************************/
        public function wxCardUpdateImg() {
            $wxAccessToken  = $this->wxAccessToken();
            //$data['access_token'] =  $wxAccessToken;
            $data['buffer']     =  '@D:\\workspace\\htdocs\\yky_test\\logo.jpg';
            $url            = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=".$wxAccessToken;
            $result         = $this->wxHttpsRequest($url,$data);
            $jsoninfo       = json_decode($result, true);
            return $jsoninfo;
            //array(1) { ["url"]=> string(121) "http://mmbiz.qpic.cn/mmbiz/ibuYxPHqeXePNTW4ATKyias1Cf3zTKiars9PFPzF1k5icvXD7xW0kXUAxHDzkEPd9micCMCN0dcTJfW6Tnm93MiaAfRQ/0" } 
        }
         
        /*******************************************************
         *      微信卡券:获取颜色
         *******************************************************/
        public function wxCardColor(){
            $wxAccessToken  = $this->wxAccessToken();
            $url                = "https://api.weixin.qq.com/card/getcolors?access_token=".$wxAccessToken;
            $result         = $this->wxHttpsRequest($url);
            $jsoninfo       = json_decode($result, true);
            return $jsoninfo;
        }
         
        /*******************************************************
         *      微信卡券:创建卡券
         *******************************************************/
        public function wxCardCreated($jsonData) {
            $wxAccessToken  = $this->wxAccessToken();
            $url            = "https://api.weixin.qq.com/card/create?access_token=" . $wxAccessToken;
            $result         = $this->wxHttpsRequest($url,$jsonData);
            $jsoninfo       = json_decode($result, true);
            return $jsoninfo;
        }
         
        /*******************************************************
         *      微信卡券:JSAPI 卡券Package - 基础参数没有附带任何值 - 再生产环境中需要根据实际情况进行修改
         *******************************************************/      
        public function wxCardPackage($cardId){
            $timestamp = time();
            $api_ticket = $this->wxJsApiTicket();
            $cardId = $cardId;
            $arrays = array($api_ticket,$timestamp,$cardId);
            sort($arrays);
            $string = sha1(implode("",$arrays));
 
            $resultArray['card_id'] = $cardId;
            $resultArray['card_ext'] = array();
            $resultArray['card_ext']['openid'] = 'oOmn4s9MiwqHSNNvPn0dBtU23toA';
            $resultArray['card_ext']['timestamp'] = $timestamp;
            $resultArray['card_ext']['signature'] = $string;
 
            return $resultArray;
        }
         
         
    }
wxOauthAccessToken($CODE);
        //print_r($Info);
    //    $openId = $Info['openid'];    
    //}
    ////////////////////////////////////////////
 
    $signPackage = $wx->wxJsapiPackage();
    //print_r($signPackage);
    $kqInfo = $wx->wxCardPackage("");
    $listInfo = $wx->wxCardListPackage();
?>

    
        JSAPI接口测试
        
        
         
        
        
    
    
        



$kqinfo = array("card" => array());
$kqinfo['card']['card_type'] = 'GENERAL_COUPON';
$kqinfo['card']['general_coupon'] = array('base_info' => array(), 'default_detail' => array());
$kqinfo['card']['general_coupon']['base_info']['logo_url'] = 'URL';
$kqinfo['card']['general_coupon']['base_info']['code_type'] = 'CODE_TYPE_QRCODE';
$kqinfo['card']['general_coupon']['base_info']['brand_name'] = '';
$kqinfo['card']['general_coupon']['base_info']['title'] = '测试卡券';
$kqinfo['card']['general_coupon']['base_info']['color'] = 'Color030';
$kqinfo['card']['general_coupon']['base_info']['notice'] = '测试测试测试';
$kqinfo['card']['general_coupon']['base_info']['description'] = '这是一张优惠券';
$kqinfo['card']['general_coupon']['base_info']['date_info']['type'] = 1;
$kqinfo['card']['general_coupon']['base_info']['date_info']['begin_timestamp'] = time();
$kqinfo['card']['general_coupon']['base_info']['date_info']['end_timestamp'] = time() + 100 * 24 * 3600;
$kqinfo['card']['general_coupon']['base_info']['sku']['quantity'] = 100000;
$kqinfo['card']['general_coupon']['default_detail'] = '测试数据\n测试数据\n测试数据';
 
//var_dump($kqinfo);
//$kqinfo = json_encode($kqinfo);
$kqinfo = C::enJson($kqinfo);
 
//print_r( $kqinfo);
//$resultData = $wx->wxCardCreated($kqinfo);
微信app下载
微信app下载

微信是一款手机通信软件,支持通过手机网络发送语音短信、视频、图片和文字。微信可以单聊及群聊,还能根据地理位置找到附近的人,带给大家全新的移动沟通体验,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

2

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

21

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

6

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

28

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

2

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

8

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

3

2026.01.15

php图片上传教程汇总
php图片上传教程汇总

本专题整合了php图片上传相关教程,阅读专题下面的文章了解更多详细教程。

2

2026.01.15

phpstorm相关教程大全
phpstorm相关教程大全

本专题整合了phpstorm相关教程汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.7万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 2.5万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号