PHP高级工程师之微信编辑模式
- 格式:pdf
- 大小:510.87 KB
- 文档页数:14
微信开发者工具教程微信开发者工具是一款非常实用的工具,可以帮助开发者在微信平台上进行应用开发和调试。
本文将就该工具的使用方法进行简单介绍。
首先,我们需要下载和安装微信开发者工具。
在微信官方网站上下载相应的安装包,并按照指引进行安装即可。
安装完成后,打开开发者工具,登录自己的微信账号。
接下来,我们可以选择新建一个项目,或者打开一个已有的项目。
新建一个项目时,需要填写项目的名称、AppID和项目目录。
填写完成后,点击确定即可创建项目。
创建完成后,我们可以在项目中添加相应的页面和功能。
开发者工具提供了可视化页面编辑器,我们可以通过拖拽组件的方式来构建页面。
同时,我们也可以手动编写代码,来自定义页面的样式和功能。
在页面开发完成后,我们可以点击预览按钮,来预览页面的效果。
预览时,可以选择模拟不同的设备和网络环境,以查看页面在不同条件下的表现。
除了页面开发,开发者工具还提供了一些其他的功能。
比如,我们可以在工具中创建测试号,并使用该号码在开发过程中进行调试。
我们还可以模拟用户的操作,进行页面的真实交互。
在开发过程中,我们可以通过开发者工具来调试和排查代码中的错误。
工具提供了错误提示和代码调试的功能,可以帮助我们找到和修复问题。
当应用开发完成后,我们可以在开发者工具中上传代码,并提交审核。
通过审核后,我们的应用就可以在微信平台上正式发布和使用了。
综上所述,微信开发者工具是一款非常便捷和实用的工具,可以帮助开发者在微信平台上进行应用的开发和调试。
它提供了可视化页面编辑、代码调试和错误排查等功能,使得开发过程更加高效和方便。
无论是新建项目、页面开发还是应用调试,开发者工具都能提供相应的支持和帮助。
微信开发工具使用教程
微信开发工具是一款由微信官方推出的开发软件,旨在帮助开发者更轻松地进行微信小程序的开发与调试。
本文将为大家介绍微信开发工具的使用方法。
首先,我们需要下载并安装微信开发工具。
可以在官方网站上找到并下载最新版本的开发工具。
安装完成后,打开开发工具,我们将看到一个简洁的界面。
接下来,我们需要登录开发工具。
使用自己的微信账号扫描登录二维码即可登录成功。
登录后,我们可以看到左侧的目录树,其中包含了我们创建的小程序的目录结构。
第三步,我们需要创建一个新的小程序项目。
点击目录树中的“新建”按钮,弹出新建项目的对话框。
在对话框中填写项目的
基本信息,包括项目的名称、项目的路径和小程序的AppID。
点击确定后,开发工具会为我们自动生成一个基础的小程序项目。
第四步,我们可以打开小程序的代码和界面进行编辑。
在开发工具的编辑区域,我们可以看到小程序的页面结构和样式表。
我们可以根据自己的需求进行修改和编辑,并实时预览效果。
第五步,我们可以进行小程序的调试和发布。
在预览界面中,我们可以选择不同的设备和调试模式进行调试。
我们可以使用开发工具提供的调试工具,查看代码执行过程中的变量和日志信息,以及网络请求的情况。
当我们调试完成后,可以点击预
览界面上的“上传”按钮,将小程序代码提交到微信平台进行审核。
总之,微信开发工具是一款非常方便的小程序开发工具,通过简洁的界面和丰富的功能,帮助开发者更快速、高效地进行小程序的开发和调试。
希望本文的教程能够帮助到大家,让大家更好地利用微信开发工具进行小程序开发。
php编写格式-回复PHP编写格式是指在编写PHP代码时所遵循的一些规范和约定,它可以使代码更加统一、易读和易于维护。
下面将详细介绍PHP编写格式的一些关键要点和具体步骤。
1. 缩进和空格使用:在PHP编写格式中,通常使用四个空格进行缩进。
这样可以使代码层次结构更加清晰,并且方便阅读和理解。
同时,还应该合理使用空格来增加代码的可读性,例如在运算符前后、逗号后和分号后添加空格。
2. 行的长度限制:为了增强代码的可读性,通常建议每行代码长度不超过80个字符。
如果一行代码过长,可以通过将代码分成多行来提高可读性。
可以使用反斜杠(\)进行代码换行,或者使用括号(圆括号、大括号或方括号)来包含多行代码块。
3. 注释的使用:良好的注释可以让其他开发人员更好地理解代码的意图和功能。
在PHP 编写格式中,应该在代码中适当地添加注释,用于解释代码的功能、参数、返回值等。
注释一般使用双斜线()进行单行注释,或者使用多行注释(/* ... */)进行多行注释。
4. 函数和方法的命名:在PHP编写格式中,函数和方法的命名应该具有一定的规范性,以方便其他开发人员阅读和调用。
通常,函数和方法的命名采用小驼峰命名法,即首字母小写,后续单词首字母大写。
例如,getUserName()。
5. 变量和常量的命名:变量和常量的命名也应该符合一定的规范。
通常,变量名和常量名采用小写字母,并使用下划线(_)分割不同的单词。
例如,user_name、max_length、MAX_SIZE。
6. 操作符和括号的使用:在PHP编写格式中,应该合理使用操作符和括号,以增加代码的可读性,并明确表达运算的优先级。
例如,可以使用括号来明确表达逻辑关系,如使用括号将多个条件连接起来。
同时,在操作符之间也应该加入适当的空格,以提高代码的可读性。
7. 文件和目录结构的组织:在PHP项目中,应该合理组织文件和目录结构,以便代码的管理和维护。
通常,在项目的根目录下,可以创建多个子目录,分别存放不同功能或模块的代码文件。
php实现微信和⽀付宝⽀付的⽰例代码php实现微信⽀付在php下实现微信⽀付,这⾥我使⽤了EasyWeChat这⾥我是在Yii框架实现的,安装EasyWeChat插件composer require jianyan74/yii2-easy-wechat⼀:配置EasyWeChat1:在config/main.php 的 component中添加EasyWeChat的SDK'components' => [// ...'wechat' => ['class' => 'jianyan\easywechat\Wechat','userOptions' => [], // ⽤户⾝份类参数'sessionParam' => 'wechatUser', // 微信⽤户信息将存储在会话在这个密钥'returnUrlParam' => '_wechatReturnUrl', // returnUrl 存储在会话中'rebinds' => [ // ⾃定义服务模块// 'cache' => 'common\components\Cache',]],// ...]2:在config/params.php中设置基础配置信息和微信⽀付信息// 微信配置具体可参考EasyWechat'wechatConfig' => [],// 微信⽀付配置具体可参考EasyWechat'wechatPaymentConfig' => [],// 微信⼩程序配置具体可参考EasyWechat'wechatMiniProgramConfig' => [],// 微信开放平台第三⽅平台配置具体可参考EasyWechat'wechatOpenPlatformConfig' => [],// 微信企业微信配置具体可参考EasyWechat'wechatWorkConfig' => [],// 微信企业微信开放平台具体可参考EasyWechat'wechatOpenWorkConfig' => [],// 微信⼩微商户具体可参考EasyWechat'wechatMicroMerchantConfig' => [],⼆:实现微信⽀付1:微信⽀付api$data = ['body' => '',//⽀付描述'out_trade_no' => '',//订单号'total_fee' => '',//⽀付⾦额'notify_url' => '', // ⽀付结果通知⽹址,如果不设置则会使⽤配置⾥的默认地址'trade_type' => 'JSAPI',//⽀付⽅式'openid' => '',//⽤户openid];// ⽣成⽀付配置$payment = Yii::$app->wechat->payment;$result = $payment->order->unify($data);if ($result['return_code'] == 'SUCCESS') {$prepayId = $result['prepay_id'];$config = $payment->jssdk->sdkConfig($prepayId);} else {throw new yii\base\ErrorException('微信⽀付异常, 请稍后再试');}return $this->render('wxpay', ['jssdk' => $payment->jssdk, // $app通过上⾯的获取实例来获取'config' => $config]);2:在wxpay.php⽂件中发起⽀付<script src="/open/js/jweixin-1.4.0.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript" charset="utf-8">//数组内为jssdk授权可⽤的⽅法,按需添加,详细查看微信jssdk的⽅法wx.config(<?php echo $jssdk->buildConfig(array('chooseWXPay'), true) ?>);function onBridgeReady(){// 发起⽀付wx.chooseWXPay({timestamp: <?= $config['timestamp'] ?>,nonceStr: '<?= $config['nonceStr'] ?>',package: '<?= $config['package'] ?>',signType: '<?= $config['signType'] ?>',paySign: '<?= $config['paySign'] ?>', // ⽀付签名success: function (res) {// ⽀付成功后的回调函数},cancel: function(r) {//⽀付取消后的回调函数},});}if (typeof WeixinJSBridge == "undefined"){if( document.addEventListener ){document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);}else if (document.attachEvent){document.attachEvent('WeixinJSBridgeReady', onBridgeReady);document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);}}else{onBridgeReady();}</script>在异步回调地址中获取微信⽀付回调只需要使⽤如下⽅法即可:$payment = Yii::$app->wechat->payment;$response = $payment->handlePaidNotify(function($message, $fail) {//⽀付结果逻辑,只有在函数⾥ return true; 才代表处理完成});$response->send();根据如上步骤就可以实现微信⽀付php实现⽀付宝⽀付⼀:在php中安装⽀付宝插件composer require alipaysdk/easysdk⼆:php实现⽀付宝⽀付1:配置⽀付宝/*** ⽀付宝配置*/public static function getOptions(){$options = new Config();$options->protocol = 'https';$options->gatewayHost = '';$options->signType = 'RSA2';$options->appId = '<-- 请填写您的AppId,例如:2019022663440152 -->';// 为避免私钥随源码泄露,推荐从⽂件中读取私钥字符串⽽不是写⼊源码中$options->merchantPrivateKey = '<-- 请填写您的应⽤私钥,例如:MIIEvQIBADANB ... ... -->';$options->alipayCertPath = '<-- 请填写您的⽀付宝公钥证书⽂件路径,例如:/foo/alipayCertPublicKey\_RSA2.crt -->';$options->alipayRootCertPath = '<-- 请填写您的⽀付宝根证书⽂件路径,例如:/foo/alipayRootCert.crt" -->';$options->merchantCertPath = '<-- 请填写您的应⽤公钥证书⽂件路径,例如:/foo/appCertPublicKey\_2019051064521003.crt -->'; //注:如果采⽤⾮证书模式,则⽆需赋值上⾯的三个证书路径,改为赋值如下的⽀付宝公钥字符串即可// $options->alipayPublicKey = '<-- 请填写您的⽀付宝公钥,例如:MIIBIjANBg... -->';//可设置异步通知接收服务地址(可选)$options->notifyUrl = "<-- 请填写您的⽀付类接⼝异步通知接收服务地址,例如:https:///callback -->";//可设置AES密钥,调⽤AES加解密相关接⼝时需要(可选)//$options->encryptKey = "<-- 请填写您的AES密钥,例如:aa4BtZ4tspm2wnXLb1ThQA== -->";return $options;}2:实现⽀付宝⽀付//加载⽀付宝配置Factory::setOptions(self::getOptions());try {//发起API调⽤$result = Factory::payment()->wap()->pay('订单标题', '商户订单号', '订单总⾦额', '⽤户付款中途退出返回商户⽹站的地址', '⽀付回调地址');$responseChecker = new ResponseChecker();//处理响应或异常if ($responseChecker->success($result)) {//调⽤成功return $result->body;} else {//调⽤失败$errorMsg = $result->msg . $result->subMsg;throw new yii\\base\\ErrorException($errorMsg);}} catch (\\Exception $e) {throw new yii\\base\\ErrorException($e->getMessage());}根据如上就可以实现⽀付宝⽀付到此这篇关于php实现微信和⽀付宝⽀付的⽰例代码的⽂章就介绍到这了,更多相关php实现微信和⽀付宝⽀付内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
微信公众号开发之⽂本消息⾃动回复php代码本⽂实例为⼤家分享了php微信⽂本消息⾃动回复别代码,供⼤家参考,具体内容如下2.wx_sample.php初始代码<?php/*** wechat php test*///define your tokendefine("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();$wechatObj->valid();class wechatCallbackapiTest{public function valid(){$echoStr = $_GET["echostr"];//valid signature , optionif($this->checkSignature()){echo $echoStr;exit;}}public function responseMsg(){//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//extract post dataif (!empty($postStr)){/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,the best way is to check the validity of xml by yourself */libxml_disable_entity_loader(true);$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim($postObj->Content);$time = time();$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";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;}}private function checkSignature(){// you must define TOKEN by yourselfif (!defined("TOKEN")) {throw new Exception('TOKEN is not defined!');}$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);// use SORT_STRING rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}}>3.调⽤回复信息⽅法在wx_sample.php⽂件中注释掉$wechatObj->valid();,在其下增加⼀句“$wechatObj->responseMsg();”。
微信接口开发教程-微信接口开发教程微信公众帐号开发教程第3篇-开发模式启用及接口配置微信公众帐号开发教程第3篇-开发模式启用及接口配置来源:柳峰的专栏时间:2016-09-09 16:07:04编辑模式与开发模式微信公众帐号申请成功后,要想接收处理用户的请求,就必须要在高级功能里进行配置,点击高级功能,将看到如下界面:从上图中可以看到,高级功能包含两种模式:编辑模式和开发模式,并且这两种编辑模式与开发模式微信公众帐号申请成功后,要想接收处理用户的请求,就必须要在“高级功能”里进行配置,点击“高级功能”,将看到如下界面:从上图中可以看到,高级功能包含两种模式:编辑模式和开发模式,并且这两种模式是互斥关系,即两种模式不能同时开启。
那两种模式有什么区别呢?作为开发人员到底要开启哪一种呢?编辑模式:主要针对非编程人员及信息发布类公众帐号使用。
开启该模式后,可以方便地通过界面配置“自定义菜单”和“自动回复的消息”。
开发模式:主要针对具备开发能力的人使用。
开启该模式后,能够使用微信公众平台开放的接口,通过编程方式实现自定义菜单的创建、用户消息的接收/处理/响应。
这种模式更加灵活,建议有开发能力的公司或个人都采用该模式。
启用开发模式微信公众帐号注册完成后,默认开启的是编辑模式。
那么该如何开启开发模式呢?操作步骤如下:1)点击进入编辑模式,将右上角的编辑模式开关由“开启”切换到“关闭”,如下图所示:2)点击高级功能进入到开发模式,将右上角的开发模式开关由“关闭”切换到“开启”,但在切换时会遇到如下提示:提示需要我们先成为开发者,才能开启开发模式。
那就先点击下图所示的“成为开发者”按钮:如果提示资料不全,那就先补齐资料再回来继续操作。
需要补全的资料有公众帐号头像、描述和运营地区。
待资料补全后,再次点击“成为开发者”,这时将看到接口配置信息界面,如下图所示:这里需要填写URL和Token两个值。
URL指的是能够接收处理微信服务器发送的GET/POST请求的地址,并且是已经存在的,现在就能够在浏览器访问到的地址,这就要求我们先把公众帐号后台处理程序开发好并部署在公网服务器上。
微信推送模板消息的PHP代码整理最近做过一个需要推送消息的系统,就研究了一下微信的模板消息的推送。
由于认证过的微信号,就用测试号做的,但是过程基本一致。
本文基于微信平台的官方文档写成,/debug/cgi-bin/readtmpl?t=tmplmsg/faq_tmpl首先,得在微信的后台管理中设置一下,模板消息的格式,获取到一个模板消息的id1.{{first.DATA}}2.被撕的人:{{name.DATA}}3.被撕人的组别:{{zu.DATA}}4.被撕时间:{{time.DATA}}5.本组剩余的人:{{remain.DATA}}6.{{remark.DATA}}这里以做的一个撕名牌的通知为例,相关参数的设置如上。
生成id备用。
下面直接贴出需要调用的函数moban() 和它的辅助函数http_request()1.http_request(){2.$ch = curl_init();3.curl_setopt($ch, CURLOPT_URL, $url);4.curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);5.curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);6.curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);7.curl_setopt($ch, CURLOPT_POST, 1);8.curl_setopt($ch, CURLOPT_POSTFIELDS, $data);9.$output = curl_exec($ch);10.curl_close($ch);11.return$output;12.}13.14.function moban($name,$zu,$remain,$openid)15. {16.17.$appid=""; //填写微信后台的appid18.$appsecret=""; //填写微信后台的appsecret19.//从数据库查看access_token20.$sql="SELECT * FROM `tokentime` WHEREid='$appid'";21.$query=mysql_query($sql);22.$rk=mysql_fetch_array($query);23.$time=date('Y-m-d H:i:s',time());24.if($rk=="") //数据库查询无结果获取access_token并存入25. {26.27.$TOKEN_URL="https://api.weixin.q/cgi-bin/token?grant_type=client_credential&app id=".$appid."&secret=".$appsecret;28.$json=file_get_contents($TOKEN_URL);29.$result=json_decode($json,true);30.$ACCESS_TOKEN=$result['access_token'];31.32.$sql1="INSERT INTO `tokentime` (`id`,`access_token`,`time`) VALUES ('$appid','$ACCES S_TOKEN','$time')";33.$query1=mysql_query($sql1);34. }35.else36. { $time_b=$rk['time'];//上次存的时间37.$time_n=date('Y-m-d H:i:s',time()-7200);38.39.if($rk['access_token']==""||$time_b<$time_n)40. {41.$TOKEN_URL="https://api.weixin./cgi-bin/token?grant_type=client_credential&ap pid=".$appid."&secret=".$appsecret;42.$json=file_get_contents($TOKEN_URL);43.$result=json_decode($json,true);44.$ACCESS_TOKEN=$result['access_token'];45.46.$sql2="UPDATE tokentime SET access_token='$ACCESS_TOKEN',time='$time' WHERE id='$app id'";47.$query2=mysql_query($sql2);48. }49.else50. {51.$ACCESS_TOKEN=$rk['access_token'];52. }53. }54.//模板消息55.$times= date('m月d日 H:i:s',time());56.57.$template=array(58.'touser'=>$openid,59.'template_id'=>"_0DQerSIqPZaB4vjQjjOIPRXZhcVooFT_390vDhHhVw", //模板的id60.'url'=>"/download",61.'topcolor'=>"#FF0000",62.'data'=>array(63.'name'=>array('value'=>urlencode($name),'color'=>"#00008B"), //函数传参过来的name64.'zu'=>array('value'=>urlencode($zu),'color'=>'#00008B'), //函数传参过来的zu65.'time'=>array('value'=>urlencode($times),'color'=>'#00008B'), //时间66.'remain'=>array('value'=>urlencode($remain),'color'=>'#00008B'),//函数传参过来的ramain67.)68.);69.$json_template=json_encode($template);70.$url="https:///cgi-bin/message/template/send?access_token=".$ACCESS_TOKEN;71.$res=http_request($url,urldecode($json_template));72.if ($res[errcode]==0) echo '消息发送成功!';73.}函数的调用需要注意几点1、moban()函数是需要传参的,具体传参的moban($name,$zu,$remain,$openid)$name 被撕的人$zu 被撕的人组别$remain 本组剩余的人$openid 发送给哪个openid传参的可以自行修改只需要对应上函数里面模板的输出格式模板里面的appid appserect一定要填2、数据库的一定在要在数据库里面建一个表,因为access_token的有效期只有7200s,防止它过期这里采用了数据库保存的方式,表名为tokentime,三个字段就可以了,分别是id(int) time(varchar)access_token(varchar) //括号里面是格式,access_token字段一定要大一点至此就可以使用自己的模板给用户发消息了,由于发送模板消息是按照openid 发送的,所有需要获取用户的openid。
PHP在线编辑器PHP是目前最常用的Web编程语言之一,它被广泛应用于Web开发和Web应用开发中,因此有很多PHP编辑器可以供开发人员使用。
而PHP在线编辑器,作为最近几年出现的一种新型编辑器,由于其便携性、在线共享等特点,也日渐得到了开发人员的青睐。
一、什么是PHP在线编辑器?PHP在线编辑器就是一个在Web浏览器中运行的编辑器,使用者无需下载任何软件,只需要访问一个网址即可完成编辑工作。
同时PHP在线编辑器可以保留曾经编辑的代码,方便用户随时修改和调试代码。
二、PHP在线编辑器的特点1. 操作简单:用户只需打开一个网页即可开始编辑代码。
2. 兼容性强:PHP在线编辑器采用Web技术,无需对线上计算机进行特殊设置,因此在任何类型的设备以及任何操作系统中均可使用。
3. 高效快捷:PHP在线编辑器是一个基于 Web 的工具,它可以运行在云端,因此它可以实现实时共享和合作,多人同步协同办公。
4. 自由度高:可以进行代码高亮、代码格式化、自动补全、智能提示等对开发效率和质量有显著提升的功能。
三、PHPLens EditorPHPLens Editor是一款PHP在线编辑器,它同样是基于Web技术实现,具有高度兼容性和移动性。
PHPLens Editor支持多种编程语言,如JavaScript,HTML和CSS等,同时也可用来编辑普通文本文件。
此外,它还具备丰富的编辑功能,如语法检查、代码折叠、代码提示等等。
四、CodePenCodePen是一个拥有 150万用户的全球知名在线代码编辑器,CodePen支持HTML,CSS和JavaScript三种编程语言。
它的主要特点是极其易用,无论是初学者还是专业开发工程师都可以很快上手。
此外,CodePen还支持实时共享与协作,任何人都可以查看和编辑你的代码,多人可以共同合作完成项目。
五、Cloud9Cloud9是由亚马逊公司提供的在线开发环境,主要用于开发Web应用程序。
详解使⽤php调⽤微信接⼝上传永久素材功能需求公司新开的公众号需要将公司平台现在的所有精品⽂章都导⼊,⼿动导⼊会有很多的⼯作量,所以采⽤⾃动化同步⽂章的⽅式来达到效果开发说明微信open api提供了新增永久素材的接⼝,本次功能是基于这个接⼝进⾏数据同步的使⽤到的接⼝1. 获取永久素材列表接⼝:material/batchget_material2. 新增永久素材接⼝:material/add_news3. 新增媒体⽂件接⼝:material/add_material4. 图⽂类型5. 单图⽂(要求有默认的封⾯,需要提前上传到微信公众号后台)环境要求php版本:5.5以下(因为下⾯代码中的上传媒体⽂件必须要求在此环境,否则会调⽤微信接⼝失败)开发流程1、从公司平台获取所有的⽂章列表2、遍历⽂章列表,查看⽂章是否有图⽚附件,若有进⾏第三步,否则进⾏第四步3、检测所有的附件,取出第⼀个图⽚附件,并调⽤新增媒体⽂件接⼝上传图⽚获得返回后的media_id4、调⽤素材列表接⼝获取默认的封⾯图⽚,并从中得到的数据中获取media_id5、根据返回获取到的media_id开始调⽤上传图⽂接⼝上传素材6、记录返回信息接⼝设计获取微信素材列表接⼝此接⼝是⽤于获取默认的图⽚media_id同步平台数据接⼝此接⼝是⽤户同步我们⾃⼰的⽂章数据到微信功能实现接⼝常量private $app_id = 'wx189ae9fa8816b131';private $app_secret = '36f5f430c591acbae3505fe877733283';const API_URL_PREFIX = 'https:///cgi-bin';const MEDIA_FOREVER_UPLOAD_URL = '/material/add_material?';const MEDIA_FOREVER_NEWS_UPLOAD_URL = '/material/add_news?';const MEDIA_FOREVER_NEWS_UPDATE_URL = '/material/update_news?';const MEDIA_FOREVER_GET_URL = '/material/get_material?';const MEDIA_FOREVER_DEL_URL = '/material/del_material?';const MEDIA_FOREVER_COUNT_URL = '/material/get_materialcount?';const MEDIA_FOREVER_BATCHGET_URL = '/material/batchget_material?';获取微信素材列表接⼝action接⼝⽅法说明:该⽅法为此接⼝的⼊⼝⽅法/*** 获取图⽚素材接⼝*/public function get_articles_action(){$token = $this->get_access_token();$list = $this->getForeverList($token,'image',0,20);echo json_encode($list);}get_access_token⽅法private function get_access_token() {$access_token = AWS_APP::cache()->get('access_token');if(!$access_token){error_log('get access_token from weixin ');$appId = $this->app_id;$appSecret = $this->app_secret;$url = "https:///cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret"; $res = json_decode($this -> httpGet($url));$access_token = $res -> access_token;AWS_APP::cache()->set('access_token',$access_token,time()+3600);}else{error_log('get access_token from cache ');}error_log('access_token is :'.$access_token);return $access_token;}调⽤微信素材接⼝⽅法说明:该⽅法为调⽤微信获取永久素材列表接⼝⽅法/*** 获取永久素材列表* @param $token* @param $type 类型有image,vedio和audio* @param $offset 起始位置,0表⽰从第⼀个* @param $count 个数,区间为0~20*/public function getForeverList($token,$type,$offset,$count){$data = array('type' => $type,'offset' => $offset,'count' => $count,);$result = $this->http_post(self::API_URL_PREFIX.self::MEDIA_FOREVER_BATCHGET_URL.'access_token='.$token,self::json_encode($data));error_log('forever list is :'.$result);if ($result){$json = json_decode($result,true);if (isset($json['errcode'])) {$this->errCode = $json['errcode'];$this->errMsg = $json['errmsg'];return false;}return $json;}return false;}同步⽂章到微信接⼝action⽅法说明:该⽅法为此接⼝的⼊⼝⽅法/*** 同步问答的⽂章到订阅号上接⼝*/public function index_action(){$article_list = $this->model('article')->get_articles_list(null, 1, 18, 'add_time DESC');$access_token = $this->get_access_token();$base_url = '/article/';foreach ($article_list as $key => $article){if($article['has_attach']){$attaches = $this->model('publish')->get_attach('article', $article['id'], 'max');foreach ($attaches as $i => $a){//过滤获取第⼀张图⽚if($a['is_image']){$attache = $a;break;}$img = $attache['path'];$size = filesize($img);echo $img.',size is :'.$size;echo '<br/>';$file_info = array('filename' => $img,'content-type' => 'image/jpg', //⽂件类型'filelength' => $size);$upload_img_result = $this->upload_meterial($file_info,$access_token);$media_id = $upload_img_result;error_log('media_id is ===============>'.$media_id);}else{$media_id = '1PoTp0SqruwWu_HX0HR_jUp4STX5HSpYkibb1Ca8ZQA';}$articles =array();//上传图⽚成功了就开始上传图⽂$upload_article_data = array('title' => $article['title'],'thumb_media_id' => $media_id,'author' => '茄⼦营养师','digest' => '茄⼦⽣活,你的品质⽣活指南','show_cover_pic' => 1,'content' => $article['message'],'content_source_url' => $base_url.$article['id']);$articles[] = $upload_article_data;$data = array('articles' => $articles);$result= $this->uploadForeverArticles($access_token,$data);echo self::json_encode($result);error_log('upload_article result is : '.json_encode($result));error_log('============================upload end============================');}}uploadForeverArticles⽅法说明:该⽅法为调⽤微信上传永久素材接⼝⽅法/*** 上传永久图⽂素材(认证后的订阅号可⽤)* 新增的永久素材也可以在公众平台官⽹素材管理模块中看到* @param array $data 消息结构{"articles":[{...}]}* @return boolean|array*/public function uploadForeverArticles($access_token,$data){error_log('post data is=======> '.self::json_encode($data));$url = self::API_URL_PREFIX.self::MEDIA_FOREVER_NEWS_UPLOAD_URL.'access_token='.$access_token; $result = HTTP::request($url, 'POST', self::json_encode($data));error_log('weixin return result is =====>'.$result);if ($result){$json = json_decode($result,true);if (!$json || !empty($json['errcode'])) {$this->errCode = $json['errcode'];$this->errMsg = $json['errmsg'];return false;}return $json;}return false;}upload_meterial⽅法说明:该⽅法为调⽤微信上传永久素材接⼝⽅法* 请注意该⽅法必须保证php的版本在5.6以下,否则会爆40015错误*/function upload_meterial($file_info,$access_token){$url="https:///cgi-bin/material/add_material?access_token={$access_token}&type=image"; $ch1 = curl_init ();$timeout = 5;$real_path="{$file_info['filename']}";//$real_path=str_replace("/", "\\", $real_path);$data= array("media"=>"@{$real_path}",'form-data'=>$file_info);curl_setopt ( $ch1, CURLOPT_URL, $url );curl_setopt ( $ch1, CURLOPT_POST, 1 );curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );curl_setopt ( $ch1, CURLOPT_CONNECTTIMEOUT, $timeout );curl_setopt ( $ch1, CURLOPT_SSL_VERIFYPEER, FALSE );curl_setopt ( $ch1, CURLOPT_SSL_VERIFYHOST, false );curl_setopt ( $ch1, CURLOPT_POSTFIELDS, $data );$result = curl_exec ( $ch1 );echo '<br/>';echo 'reulst is ==========>'.$result;curl_close ( $ch1 );if(curl_errno()==0){$result=json_decode($result,true);//var_dump($result);return $result['media_id'];}else {return false;}}http_post⽅法说明:该⽅法为调http post请求⽅法/*** POST 请求* @param string $url* @param array $param* @param boolean $post_file 是否⽂件上传* @return string content*/private function http_post($url,$param,$post_file=false){$oCurl = curl_init();if(stripos($url,"https://")!==FALSE){curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1}if (is_string($param) || $post_file) {$strPOST = $param;} else {$aPOST = array();foreach($param as $key=>$val){$aPOST[] = $key."=".urlencode($val);}$strPOST = join("&", $aPOST);}curl_setopt($oCurl, CURLOPT_URL, $url);curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );curl_setopt($oCurl, CURLOPT_POST,true);curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST);$sContent = curl_exec($oCurl);$aStatus = curl_getinfo($oCurl);curl_close($oCurl);if(intval($aStatus["http_code"])==200){return $sContent;}else{return false;}}遇到的问题在开发的过程中,在调⽤微信上传媒体⽂件时候始终得到的返回数据为{"errcode":41005,"errmsg":"media data missing hint: [3fSt_0048e297]"}原因:php版本的问题,我本机的版本5.6,⽽带有@识别的php⽅法必须是5.5以下才能识别,5.5以上的版本将这个特性去除了。